Nltk と Scikit 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
の機能として提供されていないものですか? 編集 this と this のような質問を見てきましたが、どちらも個々の単語に関するものです...「ドキュメント」ではありません。文全体が英語であるかどうかを確認するために、文内のすべてのWordをループする必要がありますか?
私はPythonを使用しているので、Pythonにあるライブラリが望ましいでしょうが、必要に応じて言語を切り替えることができます。ただ、Pythonこのため。
Langdetectと呼ばれるライブラリがあります。ここから入手できるGoogleの言語検出から移植されています。
https://pypi.python.org/pypi/langdetect
55の言語をそのままサポートします。
あなたは私の論文に興味があるかもしれません 書かれた言語識別のためのWiLIベンチマークデータセット 。また、いくつかのツールのベンチマークも行いました。
TL; DR:
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
これは私が少し前に使用したものです。 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
エンチャントライブラリを使用する
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
軽量なものが必要な場合は、文字のトライグラムが一般的なアプローチです。すべての言語には、一般的なトライグラムと一般的でないトライグラムの異なる「プロファイル」があります。あなたはそれのためにグーグルで検索するか、自分でコーディングすることができます。以下に、サンプルテキストと参照データ間の距離の尺度として「コサイン類似性」を使用するサンプル実装を示します。
http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/
コーパスで一般的な英語以外の言語を知っている場合、これをyes/noテストに変えるのは非常に簡単です。そうでない場合は、trigram統計がない言語の文を予測する必要があります。文書内の単一文テキストの類似性スコアの通常の範囲を確認するためにテストを行い、英語のコサインスコアに適切なしきい値を選択します。