java - 如何在 Lucene 4.4 中自定义停用词列表

标签 java lucene stop-words

我正在使用 Lucene 4.4 分析小型语料库。我试过 StopAnalyzer 和 StopAnalyzer。然而,许多我不需要的术语仍然出现在我的结果中。比如“I'll”,“we”,“x”等。所以,我需要自定义Lucene提供的停用词列表。我的问题是:

  1. 如何添加新的停用词? 我知道 Lucene 有这个构造函数来使用自定义停用词

    public StopAnalyzer(Version matchVersion, CharArraySet stopWords)

    但我不想从头开始构建停用词。我想使用现有的停用词,只需添加我需要的额外停用词。

  2. 如何过滤掉所有数字,包括单词数字和文字数字,例如“1”、“20”、“五”、“十”等?

我的解决方案

  1. 如 femtoRgon 所示,Lucene 提供的停用词列表非常小且无法更改。我创建了一个带有停用词列表的 CustomizeStopAnalyzer。 我使用 StandardTokenizer 并将几个过滤器链接在一起。
  2. 要删除数字,我必须添加一个 NumericFilter 类来检查每个标记以查看它是否为数字。 非常感谢,

最佳答案

1 - 标准停用词集是 StopAnalyzer.ENGLISH_STOPWORD_SET。它是不可修改的,因此您应该只复制代码作为起点:

 final List<String> stopWords = Arrays.asList(
   "a", "an", "and", "are", "as", "at", "be", "but", "by",
   "for", "if", "in", "into", "is", "it",
   "no", "not", "of", "on", "or", "such",
   "that", "the", "their", "then", "there", "these",
   "they", "this", "to", "was", "will", "with"
 );
 final CharArraySet stopSet = new CharArraySet(Version.LUCENE_CURRENT, 
     stopWords, false);

2 - 停止过滤器不是正确的方法。我怀疑,您可能正在寻找类似 LetterTokenizer 的内容,它将标记定义为连续的字母字符串,从而消除任何非字母字符。

关于java - 如何在 Lucene 4.4 中自定义停用词列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080449/

相关文章:

java - 在 lucene 中使最新内容相关的技术有哪些?

java - 搜索关键字列表以找出哪些存在或不存在

java - 如何将lucene36转移到lucene 40

scikit-learn - CountVectorizer 上的词形还原不会删除停用词

java - 如何保持一个线程调用多个JForm?

java - sonar用于定期分析java maven项目

java - Android:对 findViewById 的引用

java - 为什么我的 JFrame/JPanel 上没有显示图形?

elasticsearch - ElasticSearch/Elastica:搜索包含 “and”或其他停用词的确切术语

java - 如何以更有效的方式从大型集合文件中删除停用词?