nori_tokenizer
编辑nori_tokenizer
编辑nori_tokenizer
接受以下设置
-
decompound_mode
-
分解模式决定分词器如何处理复合词。它可以设置为
-
none
-
不进行复合词分解。示例输出
가거도항 가곡역
-
discard
-
分解复合词并丢弃原始形式(默认)。示例输出
가곡역 => 가곡, 역
-
mixed
-
分解复合词并保留原始形式。示例输出
가곡역 => 가곡역, 가곡, 역
-
-
discard_punctuation
- 是否应从输出中丢弃标点符号。默认为
true
。 -
lenient
- 是否应该在提供的
text
上对user_dictionary
进行去重。默认为 false,导致重复项生成错误。 -
user_dictionary
-
Nori 分词器默认使用 mecab-ko-dic 词典。可以将包含自定义名词 (
NNG
) 的user_dictionary
附加到默认词典中。词典应具有以下格式<token> [<token 1> ... <token n>]
第一个标记是强制性的,表示应添加到词典中的自定义名词。对于复合名词,可以在第一个标记之后提供自定义分段 (
[<token 1> ... <token n>]
)。自定义复合名词的分段由decompound_mode
设置控制。为了演示如何使用用户词典,请将以下词典保存到
$ES_HOME/config/userdict_ko.txt
然后创建如下分析器
PUT nori_sample { "settings": { "index": { "analysis": { "tokenizer": { "nori_user_dict": { "type": "nori_tokenizer", "decompound_mode": "mixed", "discard_punctuation": "false", "user_dictionary": "userdict_ko.txt", "lenient": "true" } }, "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "nori_user_dict" } } } } } } GET nori_sample/_analyze { "analyzer": "my_analyzer", "text": "세종시" }
以上
analyze
请求返回以下内容{ "tokens" : [ { "token" : "세종시", "start_offset" : 0, "end_offset" : 3, "type" : "word", "position" : 0, "positionLength" : 2 }, { "token" : "세종", "start_offset" : 0, "end_offset" : 2, "type" : "word", "position" : 0 }, { "token" : "시", "start_offset" : 2, "end_offset" : 3, "type" : "word", "position" : 1 }] }
-
user_dictionary_rules
-
您还可以使用
user_dictionary_rules
选项在分词器定义中直接内联规则PUT nori_sample { "settings": { "index": { "analysis": { "tokenizer": { "nori_user_dict": { "type": "nori_tokenizer", "decompound_mode": "mixed", "user_dictionary_rules": ["c++", "C쁠쁠", "세종", "세종시 세종 시"] } }, "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "nori_user_dict" } } } } } }
nori_tokenizer
为每个标记设置了一些额外的属性,这些属性被分词过滤器用来修改流。您可以使用以下请求查看所有这些附加属性
GET _analyze { "tokenizer": "nori_tokenizer", "text": "뿌리가 깊은 나무는", "attributes" : ["posType", "leftPOS", "rightPOS", "morphemes", "reading"], "explain": true }
响应如下
{ "detail": { "custom_analyzer": true, "charfilters": [], "tokenizer": { "name": "nori_tokenizer", "tokens": [ { "token": "뿌리", "start_offset": 0, "end_offset": 2, "type": "word", "position": 0, "leftPOS": "NNG(General Noun)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "NNG(General Noun)" }, { "token": "가", "start_offset": 2, "end_offset": 3, "type": "word", "position": 1, "leftPOS": "J(Ending Particle)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "J(Ending Particle)" }, { "token": "깊", "start_offset": 4, "end_offset": 5, "type": "word", "position": 2, "leftPOS": "VA(Adjective)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "VA(Adjective)" }, { "token": "은", "start_offset": 5, "end_offset": 6, "type": "word", "position": 3, "leftPOS": "E(Verbal endings)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "E(Verbal endings)" }, { "token": "나무", "start_offset": 7, "end_offset": 9, "type": "word", "position": 4, "leftPOS": "NNG(General Noun)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "NNG(General Noun)" }, { "token": "는", "start_offset": 9, "end_offset": 10, "type": "word", "position": 5, "leftPOS": "J(Ending Particle)", "morphemes": null, "posType": "MORPHEME", "reading": null, "rightPOS": "J(Ending Particle)" } ] }, "tokenfilters": [] } }