私は現在Goを学んでおり、多くの進歩を遂げています。これを行う 1 つの方法は、過去のプロジェクトとプロトタイプを以前の言語から新しい言語に移植することです。
今は、少し前に Python でプロトタイプを作成した「言語検出器」で忙しくしています。このモジュールでは、ngram 頻度表を生成し、そこで特定のテキストと既知のコーパスとの差異を計算します。
これにより、指定された ngram テーブルの 2 つのベクトル表現のコサインを返すことで、どのコーパスが最も一致するかを効果的に判断できます。わーい。算数。
Go で書かれたプレーンな ASCII 文字で完全に動作するプロトタイプを持っていますが、Unicode マルチバイト サポートで動作するようにしたいと考えています。これは私が頭を悩ませているところです。
ここに私が扱っているものの簡単な例があります: http://play.golang.org/p/2bnAjZX3r0
すべてがすでに正常に機能しているため、テーブル生成ロジックのみを投稿しました。
スニペットを実行するとわかるように、最初のテキストは非常にうまく機能し、正確な表が作成されます。2 番目のテキストはドイツ語で、2 バイト文字がいくつか含まれています。私が ngram シーケンスを構築している方法と、これらの特定のルーンが 2 バイトで構成されているという事実により、最初のバイトが切り取られた 2 つの ngram が表示されます。
誰かがより効率的な解決策を投稿したり、少なくとも修正を案内してくれたりできますか? 私はこの問題を分析しすぎているとほぼ確信しています。
私はこのパッケージをオープン ソース化し、Martini を使用してサービスとして実装することを計画しています。これにより、人々が単純な言語計算に使用できる単純な API を提供します。
いつものように、ありがとう!