用数字过滤单词并用Lucene检索2克和1克

时间:2016-02-23 15:49:03

标签: java lucene tokenize n-gram

我正在尝试使用Lucene(5.5.0)进行一些字符串标记化(没有索引)。 我需要:

  1. 完全删除包含数字的单词,例如,应该从字符串中删除像log4j这样的单词
  2. 我想把我的字符串分成一个单词术语,也分成2-gram术语,所以例如:“绑一个黄色的丝带”应该被标记为以下术语:“tie”,“yellow”,“ribbon” “,”黄丝带“。请注意,“领带黄色”不是一个术语,因为它在中间有一个停用词
  3. 这些可能与Lucene有关吗?如果是这样的话?

    到目前为止我做了什么:

    • 关于删除包含数字的单词,我遇到了WordDelimetedFilter这是不好的,因为在它显示的文档中它将单词SD500分成“SD”和“500”,而我想完全删除它。我还发现了一个看起来很有希望的NumericPayloadTokenFilter(名字),但是我有一些问题需要了解如何使用它
    • 关于2Grams和1Grams,我发现了几个如何做到这一点的例子herehereNGramTokenizer documentation然而他们似乎都在研究字符而不是关于我需要的词语

    提前致谢

1 个答案:

答案 0 :(得分:1)

关于要求1:我不知道任何可以做到这一点的事情,开箱即用。 NumericPayloadTokenFilter 绝对不是您需要的。您可能需要创建自己的令牌过滤器来执行此操作。

关于要求2:用Lucene的说法,NGrams通常基于字符。你想要的是ShingleFilter,它结合了令牌。它会在停用词中创建带状疱疹,例如:tie __ yellow,其中_是通用填充令牌。