【问题标题】:Lucene Porter Stemmer not publicLucene Porter Stemmer 未公开
【发布时间】:2013-03-03 13:58:01
【问题描述】:

如何在 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 的正确方法是什么??

【问题讨论】:

    标签: java lucene porter-stemmer


    【解决方案1】:

    1) 如果您想在 Lucene 令牌分析过程中使用 PorterStemmer,请使用 PorterStemFilter

    示例代码

     class MyAnalyzer extends Analyzer {
      public final TokenStream tokenStream(String fieldName, Reader reader) {
        return new PorterStemFilter(new LowerCaseTokenizer(reader));
      }
     }
    

    2) 如果您只想将 PorterStemmer 用于任何其他应用程序,这里是作者自己的源代码:PorterStemmer in Java

    【讨论】:

      【解决方案2】:

      在 Lucene 更高版本中,PorterStemmer 不再公开。所以

       class MyAnalyzer extends Analyzer {
         public final TokenStream tokenStream(String fieldName, Reader reader) {
          return new PorterStemFilter(new LowerCaseTokenizer(reader));
         }
         }
      

      或者您可以使用 SnowballAnalyzer Stemmer.link(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();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多