NLTKを使用してテキストが書かれている言語を検出するにはどうすればよいですか?
私が見た例ではnltk.detect
ですが、Macにインストールしたときに、このパッケージが見つかりません。
次のコードスニペットに遭遇しましたか?
english_vocab = set(w.lower() for w in nltk.corpus.words.words())
text_vocab = set(w.lower() for w in text if w.lower().isalpha())
unusual = text_vocab.difference(english_vocab)
from http://groups.google.com/group/nltk-users/browse_thread/thread/a5f52af2cbc4cfeb?pli=1&safe=active
または次のデモファイル?
このライブラリもNLTKからのものではありませんが、確かに役立ちます。
$ sudo pip install langdetect
サポートされているPythonバージョン2.6、2.7、3.x。
>>> from langdetect import detect
>>> detect("War doesn't show who's right, just who's left.")
'en'
>>> detect("Ein, zwei, drei, vier")
'de'
https://pypi.python.org/pypi/langdetect?
PS:これが常に正しく機能することを期待しないでください:
>>> detect("today is a good day")
'so'
>>> detect("today is a good day.")
'so'
>>> detect("la vita e bella!")
'it'
>>> detect("khoobi? khoshi?")
'so'
>>> detect("wow")
'pl'
>>> detect("what a day")
'en'
>>> detect("yay!")
'so'
これはNLTKにはありませんが、別のPythonベースのライブラリで素晴らしい結果が得られました。
https://github.com/saffsd/langid.py
これはインポートが非常に簡単で、モデルに多数の言語が含まれています。
超遅いですが、textcat
でnltk
分類子を使用できます here 。これは paper でアルゴリズムを説明しています。
ISO 639-3で国コードを返すため、pycountry
を使用して完全な名前を取得します。
たとえば、ライブラリをロードします
import nltk
import pycountry
from nltk.stem import SnowballStemmer
ここで、2つのフレーズとguess
の言語を見てみましょう:
phrase_one = "good morning"
phrase_two = "goeie more"
tc = nltk.classify.textcat.TextCat()
guess_one = tc.guess_language(phrase_one)
guess_two = tc.guess_language(phrase_two)
guess_one_name = pycountry.languages.get(alpha_3=guess_one).name
guess_two_name = pycountry.languages.get(alpha_3=guess_two).name
print(guess_one_name)
print(guess_two_name)
English
Afrikaans
次に、それらを他のnltk
関数に渡すことができます。次に例を示します。
stemmer = SnowballStemmer(guess_one_name.lower())
s1 = "walking"
print(stemmer.stem(s1))
walk
免責事項明らかにこれは、特にスパースデータの場合は常に機能するとは限りません
極端な例
guess_example = tc.guess_language("hello")
print(pycountry.languages.get(alpha_3=guess_example).name)
Konkani (individual language)