Java Lucene Porter Stemmer不公开

Java Lucene Porter Stemmer不公开,java,lucene,porter-stemmer,Java,Lucene,Porter Stemmer,如何在Lucene 3.6.2中使用Porter Stember类? 以下是我所拥有的: import org.apache.lucene.analysis.PorterStemmer; ... PorterStemmer stemmer = new PorterStemmer(); term = stemmer.stem(term); 我被告知:PorterStemmer在org.apache.lucene.analysis中不公开;无法从包外部访问 编辑:我也读了很多关于使用雪球的书,但并

如何在Lucene 3.6.2中使用Porter Stember类? 以下是我所拥有的:

import org.apache.lucene.analysis.PorterStemmer;
...
PorterStemmer stemmer = new PorterStemmer();
term = stemmer.stem(term);
我被告知:PorterStemmer在org.apache.lucene.analysis中不公开;无法从包外部访问

编辑:我也读了很多关于使用雪球的书,但并不鼓励这样做。阻止在Java中使用Lucene的正确方法是什么???

1)如果您想在Lucene令牌分析过程中使用PorterStemmer,请使用

示例代码

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


2) 如果您只想将PorterStemmer用于任何其他应用程序,下面是作者自己编写的源代码:

在Lucene更高版本中,PorterStemmer不再公开。所以

 class MyAnalyzer extends Analyzer {
   public final TokenStream tokenStream(String fieldName, Reader reader) {
    return new PorterStemFilter(new LowerCaseTokenizer(reader));
   }
   }
或者您可以使用SnowballaAnalyzer词干分析器。(不推荐使用SnowBallaAnalyzer)

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();
    }