web-dev-qa-db-ja.com

テキストの言語を検出する

特定のテキストの言語を検出できるC#ライブラリはありますか?つまり、入力テキスト"This is a sentence"の場合、言語を"English"として検出する必要があります。または、"Esto es una sentencia"の場合、言語を"Spanish"として検出する必要があります。

テキストからの言語検出は決定論的な問題ではないことを理解しています。ただし、 Google翻訳Bing Translator の両方に「自動検出」オプションがあり、入力言語を最もよく推測します。公に、できればC#で利用できる同様のものはありますか?

21
Nikhil

はい、確かに、TextCatは言語の識別に非常に適しています。また、さまざまな言語で多くの実装があります。

.Netにはポートがありませんでした。だから私は1つ書いた: NTextCatNuGetオンラインデモ =)。

これは純粋な.NET FrameworkDLL +コマンドラインインターフェイスです。デフォルトでは、14のプロファイルを使用します。言語。

フィードバックは大歓迎です!新しいアイデアや機能のリクエストも歓迎します:)

30
Ivan Akcheurov

言語検出は非常に難しいことです。

一部の言語は、発音区別符号と有向グラフ/三重音字が使用されているため、他の言語よりもはるかに簡単に検出できます。たとえば、 ダブルアキュートアクセント は、ハンガリー語でほぼ独占的に使用されます。 ドットなしのi 「ı」はトルコ語でのみ使用され[私は思う]、t-comma(t-cedillaではない)はルーマニア語でのみ使用され、エスケット「ß」はドイツ語でのみ使用されます。

いくつかの有向グラフ、三グラフ、四重音字も良いプレゼントです。たとえば、「eeuw」と「ieuw」は主にオランダ語で、「tsch」と「dsch」は主にドイツ語などで見つかる可能性があります。

より多くの景品には、特定の言語で使用される一般的な単語または一般的な接頭辞/接尾辞が含まれます。使用される句読点でさえ、言語(引用符のスタイルや使用法など)を決定するのに役立つ場合があります。

そのようなライブラリが存在する場合、私は自分でライブラリに取り組んでいるので、それについて知りたいと思います。

3
dreamlax

ここで3グラム分析に基づくC#実装を見つけてください:

http://idsyst.hu/development/language_detector.html

3
Sasvári Tamás

ここに、バイグラム統計に基づく単純な検出器があります(基本的には、各言語でより頻繁に発生するバイグラムを大きなセットから学習し、以前に検出された値と比較して、テキスト内のバイグラムをカウントすることを意味します):

http://allantech.blogspot.com/2007/07/automatic-language-detection.html

これはおそらく多くの(ほとんどの?)アプリケーションには十分であり、インターネットアクセスを必要としません。

もちろん、GoogleやBingのアルゴリズム(それ自体は優れていません)よりもパフォーマンスが低下します。 優れた検出パフォーマンスが必要な場合は、多くのハードワークと大量のデータの両方を実行する必要があります。

もう1つのオプションは、アプリにインターネットアクセスがある場合、 Google またはBingAPIを利用することです。

2
Vinko Vrsalovic

隠れマルコフ連鎖に基づく機械学習アルゴリズムが必要になり、さまざまな言語で大量のテキストを処理します。

次に、未確認のテキストに到達すると、「スコア」が近い言語が勝者になります。

0
Arafangion

テキスト言語を識別するための簡単なツールがあります: http://www.detectlanguage.com/

0
Laurynas

「textcat」はこれに非常に役立つことがわかりました。私はPHP実装、 PHP Text Cat 、これに基づいて この元の実装 )を使用し、信頼できることがわかりました。ソースを見ると、選択した言語で実装するのはそれほど難しいことではないことがわかります。ハードワーク(特定の言語に関連する文字の組み合わせ)はすべてデータとしてそこにあります。

0
Matt Gibson