简体   繁体   中英

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM