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
  }]
}