确定文本可能语言的算法


Algorithm to determine probable language of a text

我正在寻找一个简单的算法或一个开源库(PHP),允许估计文本是否主要使用特定的语言。我找到了以下与Python相关的答案,这可能是正确的方向。但是对于PHP来说,一些开箱即用的东西将是一种魅力。

当然,像n-gram估计器这样的东西不会太难实现,但它也需要一个参考数据库。

实际要解决的问题如下。我开了一个WordPress博客,现在被垃圾邮件淹没了。这个博客是用德语写的,几乎所有的垃圾邮件都是用英语写的。我的想法是立即垃圾邮件所有trackback似乎是英语。但是,我不能使用标记词,因为我不想发送打字错误或引用。

我的解决方案:

使用这个问题的答案,我实现了一个解决方案,它通过一个简单的停顿词比率来检测德语。任何评论必须包含至少25%的德语停词,如果它有链接。所以你仍然可以评论像"酷文章"这样的东西,完全没有停顿词,但如果你放了一个链接,你应该费心写正确的语言。

不幸的是,NLTK的停止词是不正确的。这个列表包含了德语中不存在的单词。所以我用了雪球表。使用Perl regexp优化器,我将整个列表压缩为一个regexp,并使用preg_match_all()对停止词进行计数。整个过滤器有25行,是用于从列表生成regexp的Perl代码的三分之一。让我们看看它在野外的表现。

谢谢你的帮助。

我同意@Thomas的观点,你正在寻找的是一个垃圾邮件分类器而不是语言检测算法。尽管如此,我认为这种语言检测解决方案足够简单,并且可以满足您的需求。基本上,如果你计算不同语言中停顿词的数量,并选择文档中停顿词数量较多的语言,你就有了一个简单但非常有效的语言分类器。

现在,最好的部分是您几乎不需要编写任何代码,因为您可以使用标准的停止词列表和处理包(如nltk)来处理信息。下面是如何使用Python和nltk从头开始实现它的示例。

如果你想做的只是识别英语,那么有一个非常简单的方法。如果您只检查邮件中的字母,英语是唯一完全在纯ascii范围内的语言之一。这是很粗糙的,但我相信这是对一个非常困难的问题的一个体面的简化。

我对功效的猜测,只是在几个法语和德语博客上做一些快速的信封计算,大约是85%,这不是万无一错,但我认为它的简单性非常好。