如何使用NLTK检测文本的写入语言?
我见过的示例使用nltk.detect
,但是当我在Mac上安装它时,我找不到这个包。
答案 0 :(得分:36)
您是否遇到过以下代码段?
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)
来自http://groups.google.com/group/nltk-users/browse_thread/thread/a5f52af2cbc4cfeb?pli=1&safe=active
或以下演示文件?
答案 1 :(得分:23)
这个库不是来自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?
P.S。:不要期望这个能够正常工作:
>>> 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'
答案 2 :(得分:19)
答案 3 :(得分:1)
太晚了,但是您可以在textcat
,here中使用nltk
分类器。 paper讨论了该算法。
它返回 ISO 639-3 中的国家/地区代码,因此我将使用pycountry
来获取全名。
例如,加载库
import nltk
import pycountry
from nltk.stem import SnowballStemmer
现在让我们看两个短语,并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)