有没有人比较过Lucene中的这些词干提取器(包括org.tartarus.snowball.ext):EnglishStemmer、PorterStemmer、LovinsStemmer?它们背后的算法有什么优缺点?应该在何时使用每个算法?或者可能还有其他可用于英语单词词干提取的算法吗?
谢谢。
Lovins词干提取器是一种非常古老的算法,实际上并没有太多实用价值,因为Porter词干提取器更加强大。根据对源代码的快速浏览,似乎PorterStemmer
实现了Porter的原始(1980年)算法,而EnglishStemmer
实现了他的更新版本,应该更好。
在斯坦福NLP工具中有一个更强大的词干提取器(实际上是一个词形还原器)。我自己开发的Lucene-Stanford NLP桥接工具在这里可用(API文档)。
有关词干提取和词形还原的一般信息,请参阅Manning,Raghavan&Schütze。
org.apache.lucene.analysis.en
版本4.4.0的3个Lucene词干处理器,它们是EnglishMinimalStemFilter
、KStemFilter
和PorterStemFilter
。我正在解决一个文档分类问题。我的结果证实了《信息检索导论》作者的说法:对于文档分类设置中的小训练语料库,词干处理会产生负面影响;而对于大型语料库,词干处理没有影响。
对于搜索和索引,词干提取可能更有用(例如参见Jenkins & Smith),但即使在那里,你的问题的答案也取决于你所做的具体细节。没有免费的午餐!
到最后,没有什么比在真实数据上运行真实代码的经验测试更好的了。唯一能让你真正知道哪个更好的方法是在应用程序中自己运行词干提取器。