NLTK和语言检测

nik*_*ers 33 python nlp nltk detection

如何使用NLTK检测文本的语言?

我见过的例子nltk.detect,但是当我在Mac上安装它时,我找不到这个包.

Wil*_*Niu 37

您是否遇到过以下代码段?

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) 
Run Code Online (Sandbox Code Playgroud)

来自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

  • 看看这个.. http://blog.alejandronolla.com/2013/05/15/detecting-text-language-with-python-and-nltk/ (2认同)

SVK*_*SVK 24

这个库不是来自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'
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

  • @MarkCramer该算法是非确定性的.如果每次都想要相同的答案,请设置种子:`import DetectorFactory DetectorFactory.seed = 0` (3认同)
  • 感谢您指出它并不总是有效。`detect("You made it home!")` 给了我“fr”。我想知道是否有更好的东西。 (2认同)
  • 这是另一个有趣的观察:它似乎每次都给出不同的答案。`>>> detector_langs("你好,我是克里斯蒂安·阿曼普尔。") [it:0.8571401485770536,en:0.14285811674731527] >>> detector_langs("你好,我是克里斯蒂安·阿曼普尔。") [it:0.8571403121803622,fr:0.14 285888197332486 ] >>> detector_langs("你好,我是克里斯蒂安·阿曼普尔。") [it:0.999995562246093]` (2认同)
  • 安装快速,使用方便。也许并不完美,但对于我的使用来说,它工作得很好。谢谢你! (2认同)

小智 19

虽然这不在NLTK中,但我在另一个基于Python的库中取得了很好的效果:

https://github.com/saffsd/langid.py

这很容易导入,并且在其模型中包含大量语言.


RK1*_*RK1 5

太晚了,但是,您可以textcatnltk, here 中使用分类器。该论文论述的算法。

它返回ISO 639-3 中的国家/地区代码,因此我将用于pycountry获取全名。

例如,加载库

import nltk
import pycountry
from nltk.stem import SnowballStemmer
Run Code Online (Sandbox Code Playgroud)

现在让我们看看两个短语,以及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
Run Code Online (Sandbox Code Playgroud)

然后,您可以将它们传递给其他nltk函数,例如:

stemmer = SnowballStemmer(guess_one_name.lower())
s1 = "walking"
print(stemmer.stem(s1))
walk
Run Code Online (Sandbox Code Playgroud)

免责声明显然这并不总是有效,尤其是对于稀疏数据

极端例子

guess_example = tc.guess_language("hello")
print(pycountry.languages.get(alpha_3=guess_example).name)
Konkani (individual language)
Run Code Online (Sandbox Code Playgroud)