web-dev-qa-db-ja.com

テキストが英語かどうかを判断しますか?

NltkScikit Learn の両方を使用して、テキスト処理を実行しています。ただし、ドキュメントのリストには、英語以外のドキュメントがいくつかあります。たとえば、次のことが当てはまります。

[ "this is some text written in English", 
  "this is some more text written in English", 
  "Ce n'est pas en anglais" ] 

分析のために、英語以外のすべての文を前処理の一部として削除する必要があります。しかし、これを行う良い方法はありますか?私はグーグル検索を行ってきましたが、文字列が英語であるかどうかを認識できる特定のものを見つけることができません。これは、NltkまたはScikit learnの機能として提供されていないものですか? 編集 thisthis のような質問を見てきましたが、どちらも個々の単語に関するものです...「ドキュメント」ではありません。文全体が英語であるかどうかを確認するために、文内のすべてのWordをループする必要がありますか?

私はPythonを使用しているので、Pythonにあるライブラリが望ましいでしょうが、必要に応じて言語を切り替えることができます。ただ、Pythonこのため。

9
ocean800

Langdetectと呼ばれるライブラリがあります。ここから入手できるGoogleの言語検出から移植されています。

https://pypi.python.org/pypi/langdetect

55の言語をそのままサポートします。

6
salehinejad

あなたは私の論文に興味があるかもしれません 書かれた言語識別のためのWiLIベンチマークデータセット 。また、いくつかのツールのベンチマークも行いました。

TL; DR:

  • CLD-2はかなり優れており、非常に高速です
  • lang-detect は少し優れていますが、はるかに遅いです
  • langidは良いですが、CLD-2とlang-detectははるかに優れています
  • NLTKのTextcatは効率的でも効果的でもありません。

lidtk をインストールして言語を分類できます:

$ lidtk cld2 predict --text "this is some text written in English"
eng
$ lidtk cld2 predict --text "this is some more text written in English"
eng
$ lidtk cld2 predict --text "Ce n'est pas en anglais"                  
fra
4
Martin Thoma

これは私が少し前に使用したものです。 3単語より長く、認識されない単語が3単語未満のテキストに対して機能します。もちろん、設定で遊ぶことができますが、私のユースケース(Webサイトの廃棄)では、それらはかなりうまくいきました。

from enchant.checker import SpellChecker

max_error_count = 4
min_text_length = 3

def is_in_english(quote):
  d = SpellChecker("en_US")
  d.set_text(quote)
  errors = [err.Word for err in d]
  return False if ((len(errors) > max_error_count) or len(quote.split()) < min_text_length) else True

print(is_in_english('“办理美国加州州立大学圣贝纳迪诺分校高仿成绩单Q/V2166384296加州州立大学圣贝纳迪诺分校学历学位认证'))
print(is_in_english('“Two things are infinite: the universe and human stupidity; and I\'m not sure about the universe.”'))

> False
> True
1
grizmin

エンチャントライブラリを使用する

import enchant

dictionary = enchant.Dict("en_US") #also available are en_GB, fr_FR, etc

dictionary.check("Hello") # prints True
dictionary.check("Helo") #prints False

この例は、 website

1
lordingtar

軽量なものが必要な場合は、文字のトライグラムが一般的なアプローチです。すべての言語には、一般的なトライグラムと一般的でないトライグラムの異なる「プロファイル」があります。あなたはそれのためにグーグルで検索するか、自分でコーディングすることができます。以下に、サンプルテキストと参照データ間の距離の尺度として「コサイン類似性」を使用するサンプル実装を示します。

http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/

コーパスで一般的な英語以外の言語を知っている場合、これをyes/noテストに変えるのは非常に簡単です。そうでない場合は、trigram統計がない言語の文を予測する必要があります。文書内の単一文テキストの類似性スコアの通常の範囲を確認するためにテストを行い、英語のコサインスコアに適切なしきい値を選択します。

1
alexis