我正在寻找一种简单的算法或开源库(PHP),以便估计文本是否主要使用特定语言。我找到了与Python相关的following answer,这可能导致了正确的方向。但对于PHP而言,开箱即用的东西将是一种魅力。
当然,像n-gram估算器这样的东西实现起来并不难,但它也需要一个参考数据库。
要解决的实际问题如下。我运行一个WordPress博客,目前被垃圾邮件淹没。该博客采用德语,几乎所有引用垃圾邮件都是英语。我的想法是立即垃圾邮件似乎是英语的所有引用。但是,我不能使用标记词,因为我不想垃圾邮件或引用。
我的解决方案:
使用这个问题的答案,我实现了一个解决方案,它通过简单的关键字比率来检测德语。任何评论必须包含至少25%的德语停用词,如果它有链接。所以你仍然可以评论类似“酷文章”的内容,它根本就没有停用词,但是如果你放了一个链接,你就应该费心去写正确的语言了。
不幸的是,NLTK的停用词不正确。该列表包含德语中不存在的单词。所以我使用了snowball列表。使用Perl regexp optimizer我将整个列表浓缩为单个正则表达式,并使用preg_match_all()计算停用词。整个过滤器是25行,是从列表中生成正则表达式的Perl代码的三分之一。让我们看看它在野外的表现如何。
感谢您的帮助。
答案 0 :(得分:1)
我同意@Thomas你所寻找的是垃圾邮件分类器而不是语言检测算法。尽管如此,我认为这种语言检测解决方案非常简单,并且可以随意使用。基本上,如果你计算不同语言中的停用词的数量并在文档中选择具有更多数量的语言,你就会得到一个简单但非常有效的语言分类器。
现在,最好的部分是您几乎不需要编码任何代码,因为您可以使用标准的停用词列表和处理包(如nltk)来处理信息。 Here您有一个如何使用Python和nltk从头开始实现它的示例。
我希望这会有所帮助。
答案 1 :(得分:0)
如果你想要做的就是认识英语,那么这是一个非常容易的黑客攻击。如果您只是检查帖子中的字母,英语是唯一完全在纯ASCII范围内的语言之一。这很糟糕,但是我认为这是一个非常难以解决的问题。
我对功效的猜测,只是快速回到几个法国和德国博客上的信封计算将是~85%,这不是万无一失的,但是我觉得它的简单性非常好。 / p>