【问题标题】:How to combine Analyzer instances for stop word removal and stemming in Lucene (5.2.1)?如何在 Lucene (5.2.1) 中组合分析器实例以去除停用词和词干?
【发布时间】:2015-11-04 15:15:36
【问题描述】:

我正在使用 Lucene 最新版本 5.2.1.. 在索引文档时,我希望删除停用词,之后所有词都应该被删除它的词根。

EnglishAnalyzer可用,但词干不准确。还有 StopAnalyzer 可以删除停用词。

Lucene 有什么分析器可以同时做这两件事吗?

我还编写了一个自定义分析器,用于使用 KStemFilter 进行词干提取如何在自定义分析器中使用现有的 StopAnalyzer

【问题讨论】:

    标签: java indexing lucene stemming stop-words


    【解决方案1】:

    是的,可以将 Lucene 中的不同分析器组合在一起。

    你应该使用这样的东西:

    StringReader reader = new StringReader(text);
    Tokenizer whitespaceTokenizer = new WhitespaceTokenizer();
    whitespaceTokenizer.setReader(reader);
    TokenStream tokenStream = new StopFilter(whitespaceTokenizer, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
    tokenStream = new PorterStemFilter(tokenStream);
    

    其中 text 是一个变量,包含您要分析的内容。在这里,我结合了空格标记化(可能你可以用更复杂的 StandardAnalyzer 替换它)然后我用 StopFilter 删除停用词,然后在分析器链中使用 PorterStemFilter(这也比简单的EnglishStemmer更好,你也可以用任何你喜欢的TokenFilter替换它。

    此处提供完整示例 - https://raw.githubusercontent.com/MysterionRise/information-retrieval-adventure/master/lucene4/src/main/java/org/mystic/StopWordsStemmingAnalyzer.java

    【讨论】:

    • 感谢神秘侠。如果我将此逻辑放在扩展分析器的自定义类中,并将此分析器放入 IndexWriterConfig 那么令牌流重置/关闭将如何调用?
    • 我猜这是另一个问题 :) 另外,如果您查看我的 java 代码,您会看到,如果我正确理解您的问题,您可以调用重置/关闭跨度>
    • 是的,这是另一个问题。如果我想把它放在扩展 Analyzer 抽象类的自定义分析器中,同样的逻辑,那么它怎么做呢?这个逻辑需要在createComponents(String a)里面放对。
    • 感谢神秘侠。参考了我在评论中的另一个问题的文档,您的答案指向了解决方案。
    • 该示例不再可用.. 还有其他链接吗?
    猜你喜欢
    • 2011-04-22
    • 2011-09-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多