我正在研究java中的文档分类任务。
强烈推荐这两种算法,每种算法的优点和缺点是哪些,哪些更常用于自然语言处理任务的文献?
答案 0 :(得分:107)
在其基础知识上,搬运工和兰卡斯特干扰算法之间的主要区别在于兰卡斯特干扰器比搬运工干扰器明显更具侵略性。目前使用的三种主要阻塞算法是Porter,Snowball(Porter2)和Lancaster(Paice-Husk),其攻击性连续性基本沿着这些相同的路线。 Porter是最不具侵略性的算法,每种算法的细节实际上都是相当冗长和技术性的。尽管如此,这是一个细分:
波特:毫无疑问,最常用的割除器,也是最温和的割除器之一。实际上具有Java支持的少数词干提取器之一是一个优点,虽然它也是算法中计算密集程度最高的(但不是非常显着)。它也是最古老的词干算法。波特2:几乎普遍认为是对搬运工的改进,并且有充分的理由。波特自己实际上承认它比他原来的算法更好。比搬运工的计算时间略快,周围有一个相当大的社区。 p>
Lancaster:非常积极的词干算法,有时候是一个错误。对于搬运工和雪球来说,词干表示对于读者而言通常是相当直观的,对于兰开斯特来说并非如此,因为许多较短的单词将变得完全混淆。这里最快的算法,会大大减少你的工作单词,但如果你想要更多的区别,而不是你想要的工具。
老实说,我觉得Snowball通常是要走的路。兰卡斯特在某些情况下会严重削减你的工作组,这可能非常有用,但是在我看来,雪球的边际速度增加并不值得缺乏精确度。虽然Porter拥有最多的实现,因此通常是默认的go-to算法,但如果可以,请使用雪球。