我有大约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。
感谢所有帮助!
答案 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的格式中。
您是否已经生成了类似的停止词?