4

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

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

有人告诉我: PorterStemmer 在 org.apache.lucene.analysis 中不公开;无法从外部包访问。

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

4

2 回答 2

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 用于任何其他应用程序,这里是作者自己的源代码:Java 中的 PorterStemmer

于 2013-03-15T00:11:34.493 回答
0

在 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();
    }
于 2014-11-21T06:14:21.783 回答