Java Lucene停止词过滤器

时间:2012-11-21 20:18:58

标签: java filter lucene words

我有大约500个句子,我想编译一组ngrams。我无法删除停用词。我尝试添加lucene StandardFilter和StopFilter,但我仍然遇到同样的问题。这是我的代码:

for(String curS: Sentences)
{
          reader = new StringReader(curS);
          tokenizer = new StandardTokenizer(Version.LUCENE_36, reader);
          tokenizer = new StandardFilter(Version.LUCENE_36, tokenizer);
          tokenizer = new StopFilter(Version.LUCENE_36, tokenizer, stopWords);
          tokenizer = new ShingleFilter(tokenizer, 2, 3);
          charTermAttribute = tokenizer.addAttribute(CharTermAttribute.class);

    while(tokenizer.incrementToken())
    {
        curNGram = charTermAttribute.toString().toString();
        nGrams.add(curNGram);                   //store each token into an ArrayList
    }
}

例如,我正在测试的第一个短语是:“对于每个倾听的人”。在此示例中,curNGram设置为“For”,这是我的列表stopWords中的停用词。另外,在这个例子中,“every”是一个停用词,因此“person”应该是第一个ngram。

  1. 当我使用StopFiler时,为什么停用词会被添加到我的列表中?
  2. 感谢所有帮助!

1 个答案:

答案 0 :(得分:1)

您发布的内容对我来说没问题,所以我怀疑stopWords没有向过滤器提供您想要的信息。

尝试类似:

//Let's say we read the stop words into an array list (A simple array, or any list implementation should be fine)
List<String> words = new ArrayList();
//Read the file into words.
Set stopWords = StopFilter.makeStopSet(Version.LUCENE_36, words, true);

假设您生成的停用词列表(我称之为'词'的词)看起来像您认为的那样,这应该将它们置于可用于StopFilter的格式中。

您是否已经生成了类似的停止词?