可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How to use the Porter Stemmber class in Lucene 3.6.2? Here is what I have:
import org.apache.lucene.analysis.PorterStemmer; ... PorterStemmer stemmer = new PorterStemmer(); term = stemmer.stem(term);
I am being told: PorterStemmer is not public in org.apache.lucene.analysis; cannot be accessed from outside package.
Edit: I also read extensively about using Snowball, but it isn't encouraged. What is the right way to stem using Lucene in Java??
回答1:
1) If you want to use PorterStemmer as part of Lucene token analysis process, use PorterStemFilter
Sample code
class MyAnalyzer extends Analyzer { public final TokenStream tokenStream(String fieldName, Reader reader) { return new PorterStemFilter(new LowerCaseTokenizer(reader)); } }
2) If you want to use PorterStemmer just for any other application, here is the sourcecode by author himself: PorterStemmer in Java
回答2:
In Lucene later version, PorterStemmer no longer public. So
class MyAnalyzer extends Analyzer { public final TokenStream tokenStream(String fieldName, Reader reader) { return new PorterStemFilter(new LowerCaseTokenizer(reader)); } }
Or you can use SnowballAnalyzer Stemmer.link (SnowballAnalyzer is deprecated)
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(); }