Lucene Porter Stemmer不公开

如何在Lucene 3.6.2中使用Porter Stemmber类? 这是我有的:

import org.apache.lucene.analysis.PorterStemmer; ... PorterStemmer stemmer = new PorterStemmer(); term = stemmer.stem(term); 

我被告知:在org.apache.lucene.analysis中,PorterStemmer不公开; 无法从外包装进入。

编辑:我也广泛阅读有关使用Snowball的内容,但不鼓励这样做。 什么是在Java中使用Lucene的正确方法?

1)如果要将PorterStemmer用作Lucene令牌分析过程的一部分,请使用PorterStemFilter

示例代码

  class MyAnalyzer extends Analyzer { public final TokenStream tokenStream(String fieldName, Reader reader) { return new PorterStemFilter(new LowerCaseTokenizer(reader)); } } 

2)如果你想将PorterStemmer用于任何其他应用程序,这里是作者自己的源代码: Java中的PorterStemmer

在Lucene后期版本中,PorterStemmer不再公开。 所以

  class MyAnalyzer extends Analyzer { public final TokenStream tokenStream(String fieldName, Reader reader) { return new PorterStemFilter(new LowerCaseTokenizer(reader)); } } 

或者你可以使用SnowballAnalyzer Stemmer。 链接 (SnowballAnalyzer已弃用)

 import org.tartarus.snowball.ext.PorterStemmer; . . public static String applyPorterStemmer(String input) throws IOException { PorterStemmer stemmer = new PorterStemmer(); stemmer.setCurrent(input); stemmer.stem(); return stemmer.getCurrent(); }