Lucene Porter Stemmer不公开

时间:2013-03-15 00:04:47

标签: java 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的正确方法?

2 个答案:

答案 0 :(得分:8)

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

示例代码

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

2)如果您只想将PorterStemmer用于任何其他应用程序,请参阅作者本人的源代码:PorterStemmer in Java

答案 1 :(得分:0)

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

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

或者你可以使用SnowballAnalyzer Stemmer。link(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();
    }