0

私のアプリケーションでは、ユニコード文字列があり、文字列がどの言語であるかを伝える必要があります。文字列の文字がどの範囲にあるかを判断して、可能な言語のリストを絞り込みたいと思います。

http://jrgraphix.net/research/unicode_blocks.phpから持っている範囲

そしてhttp://unicode-table.com/en/から可能な言語

問題は、アルゴリズムがすべての言語を検出する必要があることです.誰かが言語へのユニコード範囲のより広いマッピングを知っていますか?

ありがとう

4

2 に答える 2

2

これは、いくつかの理由により、実際には不可能です。

  • 多くの言語が同じ書記体系を共有しています。たとえば、英語とオランダ語を見てください。どちらも基本的なラテン アルファベットを使用します。コード ポイントの範囲を見るだけでは、それらを区別することはできません。

  • より多くの文字を使用する言語もありますが、特定のテキストにそれらの文字が含まれているという保証はありません。たとえば、ドイツ語では、基本ラテン アルファベットに加えて「ä」、「ö」、「ü」、「ß」が使用されます。これらの文字は特に珍しいものではありませんが、それらがなくても簡単に文章全体を作成できます。したがって、短いテキストにはそれらが含まれていない可能性があります。したがって、コード ポイントだけを見るだけでは十分ではありません。

  • テキストは常に「純粋」であるとは限りません。英語のテキストには、フランス語からの借用語 (例: "déjà vu") のため、フランス語の文字が含まれる場合があります。または、テキストが外国のことについて話しているため、外国語が含まれている可能性があります (たとえば、「Götterdämmerung はリヒャルト ワーグナーのオペラです...」、または「万里长城は...」)。コードポイントだけを見ると誤解を招きます。

要約すると、いいえ、コード ポイント範囲を確実に言語にマッピングすることはできません。

できること:各文字がテキストに出現する頻度を数え、既知の言語に関する統計とヒューリスティックに比較します。または、マルコフ連鎖などを使用して単語構造を分析します。または、辞書で単語を検索します (抑揚、構成などを考慮して)。またはこれらの組み合わせ。

しかし、これは大変で大変な作業です。むしろ、deceze や Esailja が推奨するような既存のソリューションを使用する必要があります。

于 2012-12-20T12:56:01.650 に答える