如何结合分析器实例以在 Lucene (5.2.1) 中删除停用词和提取词干?

How to combine Analyzer instances for stop word removal and stemming in Lucene (5.2.1)?

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

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

Lucene 有任何分析器可以同时完成这两件事吗?

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

是的,可以在 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