1

辞書アプリを書いています。ユーザーがUnicode文字を入力した場合、その文字がどの言語であるかを確認したいと思います。

例えば

字 - returns ['zh', 'ja', 'ko'] 
العربية - returns ['ar']
a - returns ['en', 'fr', 'de'] //and many more
й - returns ['ru', 'be', 'bg', 'uk']

検索したところ、CLDRで実行できることがわかりました https://stackoverflow.com/a/6445024/41948

またはGoogleAPIPython-Unicode文字列言語コードを検出できますか?

しかし私の場合

  • 大きなcharmapdbを検索すると、多くのストレージとメモリが必要になるようです
  • ネットワーク接続が必要なことに加えて、APIの呼び出しが遅すぎる
  • 非常に正確である必要はありません。約80%の正しい比率が許容されます
  • シンプルで速いことが主な要件です
  • UCS2BMP文字だけをカバーしても問題ありません。

任意のヒント?

これをPythonとJavascriptで使用する必要があります。ありがとう!

4

2 に答える 2

3

グリフを語族に絞り込むだけで十分でしょうか?その場合、 http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Planeまたはスクリプトセクションに示されているようなBMPのマッピングに基づいて、一連の範囲(言語->コード範囲)を作成できます。 Unicodeチャートページの-http ://www.unicode.org/charts/

共有シンボルの数が多いため、グリフの親言語を確実に決定することは間違いなくより複雑です。80%の精度のみが必要な場合は、特定の言語の範囲を調整して、範囲を単純化する場合は、特定の文字を意図的に含める/除外することができます。

編集:CLDRを参照した質問と、コード->言語マッピングに関する最初の回答を読み直しました。それは間違いなく問題外だと思いますが、計算コストが少し高い場合は、その逆も可能です。巧妙なデータ構造化により、言語族を識別し、そこから実際の言語範囲にドリルダウンして、無関係な言語->範囲のペアを介したトラバーサルを減らすことができます。

于 2013-02-01T09:27:23.907 に答える
1

言語の数が比較的少ない場合(または気になる数がかなり少ない場合)、言語ごとにブルームフィルターを使用できます。ブルームフィルターを使用すると、すべてのメンバー(この場合はコードポイント)をメモリに保存しなくても、非常に安価なメンバーシップテスト(誤検知が発生する可能性があります)を実行できます。次に、各言語の事前に構築されたフィルターに対してコードポイントをチェックすることにより、結果セットを構築します。調整可能です。誤検知が多すぎる場合は、メモリを犠牲にして、より大きなサイズのフィルターを使用できます。

PythonとJavascript用のブルームフィルターの実装があります。(ねえ-私はこれをした男に会いました!http://www.jasondavies.com/bloomfilter/

ブルームフィルター:http ://en.m.wikipedia.org/wiki/Bloom_filter

もう少し読んでみると、BMP(65,536コードポイント)だけが必要な場合は、言語ごとにストレートビットセットを格納するだけで済みます。または、言語Xコードポイントの2Dビット配列。

いくつの言語を検討しますか?

于 2013-02-01T09:25:27.770 に答える