nori_number 词元过滤器

编辑

nori_number 词元过滤器将韩语数字规范化为半角字符的常规阿拉伯十进制数字。

韩语数字通常使用韩文和阿拉伯数字与各种标点符号组合书写。例如,3.2천 表示 3200。此过滤器执行这种规范化,并允许搜索 3200 与文本中的 3.2천 匹配,但也可以用于根据规范化数字制作范围分面等。

请注意,此分析器使用词元组合方案,并依赖于在词元流中找到标点符号词元。请确保您的 nori_tokenizerdiscard_punctuation 设置为 false。如果从词元流中删除了标点符号字符,例如 U+FF0E(.),则此过滤器将找到输入词元 3 和 2천,并输出 3 和 2000,而不是 3200,这可能不是预期的结果。

如果您想从索引中删除不属于规范化数字的标点符号字符,请在分析器链中的 nori_number 之后添加一个包含您希望删除的标点符号的 stop 词元过滤器。

以下是此过滤器支持的一些规范化示例。输入是未分词的文本,结果是为输入发出的单个词项属性。

  • 영영칠 → 7
  • 일영영영 → 1000
  • 삼천2백2십삼 → 3223
  • 일조육백만오천일 → 1000006005001
  • 3.2천 → 3200
  • 1.2만345.67 → 12345.67
  • 4,647.100 → 4647.1
  • 15,7 → 157 (请注意此缺陷)

例如

PUT nori_sample
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "my_analyzer": {
            "tokenizer": "tokenizer_discard_puncuation_false",
            "filter": [
              "part_of_speech_stop_sp", "nori_number"
            ]
          }
        },
        "tokenizer": {
          "tokenizer_discard_puncuation_false": {
            "type": "nori_tokenizer",
            "discard_punctuation": "false"
          }
        },
        "filter": {
            "part_of_speech_stop_sp": {
                "type": "nori_part_of_speech",
                "stoptags": ["SP"]
            }
        }
      }
    }
  }
}

GET nori_sample/_analyze
{
  "analyzer": "my_analyzer",
  "text": "십만이천오백과 3.2천"
}

结果为

{
  "tokens" : [{
    "token" : "102500",
    "start_offset" : 0,
    "end_offset" : 6,
    "type" : "word",
    "position" : 0
  }, {
    "token" : "과",
    "start_offset" : 6,
    "end_offset" : 7,
    "type" : "word",
    "position" : 1
  }, {
    "token" : "3200",
    "start_offset" : 8,
    "end_offset" : 12,
    "type" : "word",
    "position" : 2
  }]
}