gpt4 book ai didi

java - 尽管使用了 StopAnalyzer 和 StopFilter,Apache Lucene 不会过滤停用词

转载 作者:行者123 更新时间:2023-11-30 10:47:11 26 4
gpt4 key购买 nike

我有一个基于 Apache Lucene 5.5/6.0 的模块,它可以检索关键字。一切正常,除了一件事——Lucene 不过滤停用词。

我尝试使用两种不同的方法启用停用词过滤。

方法 #1:

tokenStream = new StopFilter(new ASCIIFoldingFilter(new ClassicFilter(new LowerCaseFilter(stdToken))), EnglishAnalyzer.getDefaultStopSet());
tokenStream.reset();

方法 #2:

tokenStream = new StopFilter(new ClassicFilter(new LowerCaseFilter(stdToken)), StopAnalyzer.ENGLISH_STOP_WORDS_SET);
tokenStream.reset();

完整代码可在此处获得:
https://stackoverflow.com/a/36237769/462347

我的问题:

  1. 为什么 Lucene 不过滤停用词?

  2. 如何在 Lucene 5.5/6.0 中启用停用词过滤?

最佳答案

刚刚测试了方法 1 和方法 2,它们似乎都可以很好地过滤掉停用词。这是我测试它的方式:

public static void main(String[] args) throws IOException, ParseException, org.apache.lucene.queryparser.surround.parser.ParseException 
{
StandardTokenizer stdToken = new StandardTokenizer();
stdToken.setReader(new StringReader("Some stuff that is in need of analysis"));
TokenStream tokenStream;

//You're code starts here
tokenStream = new StopFilter(new ASCIIFoldingFilter(new ClassicFilter(new LowerCaseFilter(stdToken))), EnglishAnalyzer.getDefaultStopSet());
tokenStream.reset();
//And ends here

CharTermAttribute token = tokenStream.getAttribute(CharTermAttribute.class);
while (tokenStream.incrementToken()) {
System.out.println(token.toString());
}
tokenStream.close();
}

结果:

some
stuff
need
analysis

这消除了我样本中的四个停用词。

关于java - 尽管使用了 StopAnalyzer 和 StopFilter,Apache Lucene 不会过滤停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com