srrvnn srrvnn - 1 year ago 81
Java Question

Lucene Porter Stemmer not public

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??

Answer Source

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