我在Java中进行文档分类任务。
这两个算法都备受推荐,它们各自的优点和缺点是什么?在自然语言处理任务的文献中,哪个更常用?
回答:
从根本上讲,Porter和Lancaster词干提取算法之间的主要区别在于Lancaster词干提取器比Porter词干提取器更加激进。目前使用的三大词干提取算法是Porter、Snowball(Porter2)和Lancaster(Paice-Husk),其激进程度基本沿袭相同的线索。Porter是最不激进的算法,每个算法的具体细节实际上相当冗长且技术性强。以下是为您提供的详细说明:
Porter:无疑是最常用的词干提取器,也是最温和的词干提取器之一。它的一个优点是支持Java,尽管它也是这些算法中计算量最大的(当然,差距并不显著)。它也是迄今为止最古老的词干提取算法。
Porter2:几乎普遍被认为是对Porter的改进,理由充分。事实上,Porter本人也承认它比他的原始算法更好。计算时间比Porter略快,周围有一个相当大的社区支持。
Lancaster:非常激进的词干提取算法,有时甚至过度。对于Porter和Snowball,词干表示通常对读者来说相当直观,但Lancaster则不然,许多较短的词会变得完全模糊。这里最快的算法,会大大减少您的工作词集,但如果您想要更多的区分,这不是您想要的工具。
坦白说,我觉得通常情况下Snowball是首选。在某些情况下,Lancaster会大幅减少您的工作词集,这可能非常有用,然而在我看来,与Snowball相比,速度上的微小提升并不值得牺牲精度。Porter的实现最多,因此通常是默认选择的算法,但如果可以的话,使用Snowball更好。
Snowball – 附加信息
Snowball是一种为信息检索设计的用于创建词干提取算法的小型字符串处理语言。
Snowball编译器将Snowball脚本翻译成另一种语言 – 目前支持ISO C、C#、Go、Java、Javascript、Object Pascal、Python和Rust。
名称的历史
由于它有效地提供了一个“后缀剥离语法”,我曾考虑过将其称为“strippergram”,但最终还是理智占了上风,因此它被命名为“Snowball”,以向1960年代的Farber、Griswold、Poage和Polonsky先生们优秀的字符串处理语言SNOBOL致敬。
—Martin Porter
用Snowball语言实现的词干提取器有时简称为Snowball词干提取器。例如,请参见自然语言工具包:nltk.stem.snowball。