Java Lucene 停用词过滤器

标签 java filter lucene words

我有大约 500 个句子,我想在其中编译一组 ngram。我无法删除停用词。我尝试添加 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 时,为什么停用词会添加到我的列表中?

感谢所有帮助!

最佳答案

您发布的内容对我来说看起来没问题,因此我怀疑 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 可用的格式。

您是否已经生成了这样的停用词?

关于Java Lucene 停用词过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13501421/

相关文章:

反向过滤器/子集数据框

java - 大文件的术语主题矩阵

java - 使用 Liferay 6.1 在自定义 Assets 上实现索引器

hadoop - Solr clusterstate.json损坏。可以手动还原吗?

r - Dplyr:按条件过滤成对分组数据集,每对只保留一行

java - 同时从不同的计算机上部分下载文件

Java+Kotlin Jar 只能与 Gradle 应用程序插件一起运行

java - 在 ActiveJDBC 模型构建过程中执行附加操作

java - 文件的最后修改

android自定义 ListView 适配器不更新getView中的 View 数