【问题标题】:PorterStemmer in LuceneLucene 中的 PorterStemmer
【发布时间】:2014-02-21 21:32:14
【问题描述】:

我正在寻求有关如何在 Lucene 4.0 中使用 PorterStemFilter 类的帮助。下面是我的索引器取自http://www.lucenetutorial.com/lucene-in-5-minutes.html

...

  StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);
  Directory index = new RAMDirectory();
  IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);

  IndexWriter w = new IndexWriter(index, config);
  addDoc(w, "Lucene in Action", "193398817");
  addDoc(w, "Lucene for Dummies", "55320055Z");

......

有人可以帮助我了解在哪里以及如何使用 PorterStemFilter

【问题讨论】:

    标签: lucene indexing stemming porter-stemmer


    【解决方案1】:

    过滤器通常包含在Analyzer 中。要创建您自己的分析器,您真正需要重写的只是 TokenStream 方法。

    如果您只想将干过滤器放入 StandardAnalyzer,我会从 StandardAnalyzer 复制 tokenStream 的实现,并将过滤器添加到适当的位置(使用词干分析器,通常它们应该添加到过滤器链的后期)。

    @Override
    public TokenStream tokenStream(String fieldName, Reader reader) {
        StandardTokenizer tokenStream = new StandardTokenizer(Version.LUCENE_46, reader);
        tokenStream.setMaxTokenLength(255);
        TokenStream result = new StandardFilter(tokenStream);
        result = new LowerCaseFilter(result);
        result = new StopFilter(true, result, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
        //Adding the StemFilter here
        result = new PorterStemFilter(result);
        return result;
    }
    

    或者,您可以只使用 EnglishAnalyzer(在 other languages 中),它已经有一个词干分析器。

    【讨论】:

    • 如果他们已经处理过滤器,我真的不需要创建自己的分析器。但是,我想知道为什么我没有得到像“国家”这样的查询的点击率。我可以获得查询“countires”的命中率。
    • 不确定我是否理解...所以您有带有“国家”的文档,并且想要查询“国家”来找到它们?是的,那是使用词干分析器的合适时机。
    • 是的,这正是我想要的。我使用 StandardAnalyzer 作为我的分析器和 Lucene 4.6 版。如果分析器中包含了词干分析器,为什么查询为“国家”时无法检索到文档?
    • 不,StandardAnalyzer 中没有词干。使用EnglishAnalyzer(上面答案中的链接)。
    • 这很有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多