使用Lucene 6阻止英语单词

时间:2017-04-25 21:58:01

标签: java lucene stemming

我希望使用Lucene 6.5来阻止英语单词。我已经看到很多使用Lucene来实现这一目标的例子。然而,我到目前为止看到的例子似乎是使用旧版本的Lucene,并且使用Lucene 6复制相同的版本是不可能的。

一个恰当的例子是this one。建议和接受的解决方案使用org.apache.lucene.analysis.PorterStemmer,这似乎与Lucene 6不在同一个包中。

UPDATE :我发现PorterStemmer词干分析器的当前完整路径是org.apache.lucene.analysis.en.PorterStemFilter。此外,还需要依赖"org.apache.lucene" % "lucene-queryparser" % "6.5.0"

我正在努力制作一系列单词。而且我想我只是将这个问题转移到词汇上,因为我看到使用这个词干分析器的例子似乎不起作用,也没有用当前版本的Lucene编译(版本6.5.0)。

1 个答案:

答案 0 :(得分:3)

我终于找到了一种使用Lucene 6来阻止词语的方法:

public List<String> stem(String term) throws Exception {
    Analyzer analyzer = new StandardAnalyzer();
    TokenStream result = analyzer.tokenStream(null, term);
    result = new PorterStemFilter(result);
    result = new StopFilter(result, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
    CharTermAttribute resultAttr = result.addAttribute(CharTermAttribute.class);
    result.reset();

    List<String> tokens = new ArrayList<>();
    while (result.incrementToken()) {
        tokens.add(resultAttr.toString());
    }
    return tokens;
}

使用输入字符串term调用此方法将返回从输入字符串生成的字符串标记列表。此外,该方法从输入中删除停用词。我会把它留在这里,希望它对某人有帮助。