Lucene词干分子之间的区别:EnglishStemmer,PorterStemmer,LovinsStemmer

有没有人比较过Lucene的这些词干分析器(包org.tartarus.snowball.ext):EnglishStemmer,PorterStemmer,LovinsStemmer? 它们背后的算法的优点/缺点是什么? 什么时候应该使用它们? 或许还有一些算法可用于英语词汇?

谢谢。

Lovins干扰器是一种非常古老的算法,由于Porter干扰器更强大,所以它没有太多实际应用。 基于一些快速浏览源代码,似乎PorterStemmer实现了Porter的原始(1980)算法 ,而EnglishStemmer实现了他的更新版本 ,这应该更好。

Stanford NLP工具提供了更强大的词干分析算法(实际上是一个词形变换器)。 您可以在这里获得Lucene-Stanford NLP( API文档 )。

有关词干和词形还原的一般信息,请参阅Manning,Raghavan和Schütze。

我已经在我正在研究的文档分类问题中测试了org.apache.lucene.analysis.en版本4.4.0中提供的3个Lucene词干分析器 ,它们是EnglishMinimalStemFilterKStemFilterPorterStemFilter 。 我的结果证实了信息检索简介的作者提出的声明,即对于文档分类设置中的小型训练语料库来说,干扰是有害的,对于大型语料库干预没有任何区别

对于搜索和索引,词干可能更有用(例如,参见Jenkins&Smith ),但即使在那里,你的问题的答案取决于你正在做什么的细节。 天下没有免费的午餐!

在一天结束时, 没有什么能比实际数据的真实代码经验测试更好 。 你真正知道哪个更好的唯一方法是在你的应用程序中为自己运行词干分析器。