nori_number 词元过滤器
编辑nori_number
词元过滤器
编辑nori_number
词元过滤器将韩语数字规范化为半角字符的常规阿拉伯十进制数字。
韩语数字通常使用韩文和阿拉伯数字与各种标点符号组合书写。例如,3.2천 表示 3200。此过滤器执行这种规范化,并允许搜索 3200 与文本中的 3.2천 匹配,但也可以用于根据规范化数字制作范围分面等。
请注意,此分析器使用词元组合方案,并依赖于在词元流中找到标点符号词元。请确保您的 nori_tokenizer
的 discard_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 }] }