【问题标题】:Filtering words with numbers and retrieving 2-grams and 1-grams with Lucene使用数字过滤单词并使用 Lucene 检索 2-gram 和 1-gram
【发布时间】:2016-02-23 15:49:02
【问题描述】:

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

  1. 完全删除包含数字的单词,例如应该从字符串中删除像 log4j 这样的单词
  2. 我想将我的字符串拆分为一个单词术语和 2-Grams 术语,例如:“tie a yellow ribbon”应该被标记为以下术语:“tie”、“yellow”、“ribbon ”、“黄丝带”。请注意,“领带黄色”不是一个术语,因为它在中间有一个停用词

这些可能与Lucene有关吗?如果有怎么办?

到目前为止我做了什么:

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

提前致谢

【问题讨论】:

    标签: java lucene tokenize n-gram


    【解决方案1】:

    关于要求 1:我不知道有什么开箱即用的方法。 NumericPayloadTokenFilter 绝对不是你需要的。您可能需要创建自己的令牌过滤器来执行此操作。

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

    【讨论】:

    • 通过查看一些过滤器示例,编写过滤器相当容易。谢谢你的回答
    猜你喜欢
    • 2017-09-10
    • 2013-10-06
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多