有没有人比较过来自 Lucene(包 org.tartarus.snowball.ext)的这些词干分析器:EnglishStemmer、PorterStemmer、LovinsStemmer?它们背后的算法的优点/缺点是什么?什么时候应该使用它们?或者也许有更多的算法可用于英语单词词干提取?
谢谢。
Lovins 词干分析器是一种非常古老的算法,没有太多实际用途,因为 Porter 词干分析器要强大得多。基于对源代码的一些快速浏览,它似乎PorterStemmer
实现了 Porter 的原始(1980)算法,同时EnglishStemmer
实现了他的更新版本,应该会更好。
斯坦福 NLP 工具中提供了更强大的词干提取算法(实际上是词形还原器)。您可以在此处获得真正桥梁的 Lucene-Stanford NLP (API 文档)。
有关词干提取和词形还原的一般信息,另请参阅Manning、Raghavan和 Schütze。
我已经在我正在处理的文档分类问题中测试了4.4.0 版本中可用的 3 个 Lucene 词干分析器org.apache.lucene.analysis.en
,它们分别是EnglishMinimalStemFilter
、KStemFilter
和。PorterStemFilter
我的结果证实了Introduction to Information Retrieval的作者提出的主张,即对于文档分类设置中的小型训练语料库,词干提取是有害的,而对于大型语料库词干提取没有任何区别。
对于搜索和索引,词干提取可能更有用(例如,参见Jenkins & Smith),但即使在那里,您的问题的答案也取决于您正在做什么的细节。 天下没有免费的午餐!
归根结底,没有什么能比对真实数据的真实代码的经验测试更好的了。您真正知道哪个更好的唯一方法是在您的应用程序中为自己运行词干分析器。