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