2017-04-12 62 views
3

我使用NltkScikit Learn来做一些文本处理。但是,在我的文件清单中,我有一些文件不是英文的。例如,下面可能是真的:确定文本是否为英文?

[ "this is some text written in English", 
    "this is some more text written in English", 
    "Ce n'est pas en anglais" ] 

对于我分析的目的,我想这不是英文句子都作为预处理的一部分被移除。但是,有没有一种好方法可以做到这一点?我一直在谷歌搜索,但无法找到任何具体的东西,可以让我认识到,如果字符串是英文或不。这是不是作为NltkScikit learn的功能提供? 编辑我见过类似thisthis的问题,但都是针对单个单词...不是“文档”。我是否需要遍历句子中的每个单词来检查整个句子是否是英文的?

我正在使用Python,所以Python中的库会更好,但如果需要,我可以切换语言,只是认为Python会是最好的。

回答

3

有一个叫langdetect的库。它是从这里获得谷歌的语言检测移植:

https://pypi.python.org/pypi/langdetect

它支持55种语言的开箱。

+0

正是我一直在寻找的感谢! :)只是一个问题,你知道这个库在长文件上的表现吗? – ocean800

+1

我没有用过它。在这里分享你的经验将会很棒。 – salehinejad

+0

不幸的是,它在很多文档上都很慢,但是谢谢! – ocean800

1

使用附魔库

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

+0

感谢这个图书馆看起来很有趣。你知道任何有关长文档字符串的这个库的性能吗? – ocean800

+0

我没用过很长的文档字符串;我为此训练了自己的模型。试试看看这个图书馆是否足够强大!它也有自己的拼写检查器(图书馆的主要目的) – lordingtar

+0

将试试看,看哪个库更好,谢谢:) – ocean800

1

拍摄,信卦是一种流行的做法。每种语言都有一个不同的普通和不常见三角形“轮廓”。你可以谷歌周围,或自己的代码。下面是我碰到一个样本实现,它使用“余弦相似性”作为距离的示例文本和参照数据之间的措施:

http://code.activestate.com/recipes/326576-language-detection-using-character-trigrams/

如果你知道你的语料库中常见的非英语语言,把它变成一个是/否的测试是很容易的。如果你不这样做,你需要预测你没有三元组统计数据的语言句子。我会做一些测试,以查看文档中单句文本的正常范围的相似性分数,并为英语余弦分数选择合适的阈值。

+0

感谢您的答案!只是一个问题,你知道关于在大型数据集上的性能吗? – ocean800

+1

Trigram模型很快...没有太多的事情要做。但是,“大数据集”是什么意思?如果你的每一份文件都是单一语言,并且你有太多的文件来计算整个文件的遏制速度会让你放慢速度,那么在几个晦涩的单词后停下来。 – alexis

1

您可能对我的论文The WiLI benchmark dataset for written language identification感兴趣。我也对一些工具进行了基准测试。

TL; DR:

  • CLD-2是非常好,非常快
  • lang-detect是一点点好转,但慢得多
  • LANGID是好的,但CLD-2和朗检测更好
  • NLTK的Textcat既不高效也不有效。

您可以安装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