我希望使用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)。
答案 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
调用此方法将返回从输入字符串生成的字符串标记列表。此外,该方法从输入中删除停用词。我会把它留在这里,希望它对某人有帮助。