NLTK和语言检测
nlp
nltk
python
5
0

如何检测使用NLTK编写的文字是哪种语言?

我看到的示例使用nltk.detect ,但是在Mac上安装它后,找不到该软件包。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

您是否遇到了以下代码片段?

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

还是以下演示文件?

https://web.archive.org/web/20120202055535/http://code.google.com/p/nltk/source/browse/trunk/nltk_contrib/nltk_contrib/misc/langid.py

收藏
评论

超级晚,但,你可以使用textcat分类在nltk这里本文讨论了该算法。

它返回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)
收藏
评论

该库也不是来自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

这非常容易导入,并且在其模型中包含多种语言。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号