2017-04-25 69 views
1

我正在寻找使用Lucene 6.5来干扰英语单词。我见过很多使用Lucene实现这个功能的例子。然而,我迄今看到的例子似乎是使用旧版本的Lucene,并且使用Lucene 6复制相同的代码并不可能。使用Lucene 6词干英语单词6

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

更新:我发现,对于PorterStemmer词干当前的完整路径是org.apache.lucene.analysis.en.PorterStemFilter。另外,需要依赖关系"org.apache.lucene" % "lucene-queryparser" % "6.5.0"

我现在正在处理单词列表。我想我只是将这个问题转化为词干,因为我看到使用这个词干的实例似乎并没有工作,也没有用当前版本的Lucene(ver 6.5.0)进行编译。

回答

2

我终于找到了一种方法以阻止使用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,将返回从输入字符串生成的字符串的令牌的列表。此外,该方法从输入中删除停用词。我会在这里留下,希望对某人有帮助。

+0

哇......这真的很复杂吗?我在过去的两年里为lucene 6做了谷歌搜索,几乎没有任何东西出现。但在Javadoc中,我找到了一个org.tartarus.snowball.ext.EnglishStemmer类...我只是不清楚如何与英语分析器结合使用。 –