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