スポンサーリンク

Google Compact Language Detector (CLD3)

CLD3はGoogleが提供する、文字列から言語を推測するためのライブラリ。Apache License 2.0。

推測するものなので、例えば「漢字」は中国語として判断される。

サンスクリット語とヒンディー語、ロシア語とウクライナ語など、同じ文字や単語を使っている言語の識別制度は低くなる。

今回はvcpkgでインストールする。

vcpkg install cld3
#pragma warning(disable:4996)

#ifdef _DEBUG

#pragma comment(lib,"libprotobufd.lib")
//#pragma comment(lib, "abseil_dll.lib")

#else

#pragma comment(lib,"libprotobuf.lib")

#endif

#include <cld3/nnet_language_identifier.h>

#pragma comment(lib,"cld3.lib")

// SetConsoleOutputCP
#include <windows.h>


int main() {

    SetConsoleOutputCP(CP_UTF8); // コンソール出力にUTF8を指定

    // 検出器を初期化(最小/最大テキスト長を指定)
    chrome_lang_id::NNetLanguageIdentifier lang_id(0, 512);

    std::string text8[] = {
        u8"日本",
        u8"你好",
        u8"汉字",
        u8"榊峠", // 榊も峠も和製漢字なので、日本語として判断されてほしい。が。。。
        u8"中国語では你好",
        u8"英語ではHello",
        u8"Hello",
        u8"Bonjour", // フランス語
        u8"안녕하세요",
        u8"こんにちは",
        u8"Здравствуйте", // ロシア語
        u8"Це моя книга", // ウクライナ語
        u8"Это моя книга", // ロシア語
        u8"مرحبا", // アラビア語
        u8"नमस्ते, आप कैसे हैं?",  // ヒンディー語
        u8"नमस्ते",  // ナマステ(サンスクリット語)
        u8"नमः सर्वेभ्यः।",// サンスクリット語
        u8"Olá"   // ポルトガル語
    };


    std::cout << u8"文,言語,精度" << std::endl;
    for( const auto& text : text8 ) {
        // 言語を検出
        auto result = lang_id.FindLanguage(text);

        std::cout << text << ",";
        std::cout << result.language << ",";
        std::cout << result.probability << std::endl;
    }

}
言語 精度
日本 zh 0.976997
你好 zh 0.999996
汉字 zh 0.998365
榊峠 zh 0.998102
中国語では你好 ja 0.999899
英語ではHello ja 0.999996
Hello sr 0.830728
Bonjour no 0.933856
안녕하세요 ko 0.999985
こんにちは ja 1
Здравствуйте ru 0.314022
Це моя книга uk 0.902219
Это моя книга ru 0.996748
مرحبا fa 0.996155
नमस्ते, आप कैसे हैं? hi 0.999293
नमस्ते mr 0.999077
नमः सर्वेभ्यः। mr 0.722388
Olá ga 0.997063

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: