在Elasticsearch中使用Kuromoji用户词典
在Elasticsearch中,只有Kuromoji一种选项可用来进行形态分析,但它的词典在某些方面略显不足。
只需一种选择,用汉语来释义以下内容:
比如东京有一个叫做“西国分寺站”的车站,但是进行形态素解析时它会被分成“西”和“国分寺”两个部分。而且它的读音也会变成“Saikokubunji”(正确的应该是“Nishikokubunji”)。
所以,我希望能够在一定程度上通过用户字典来补充。
一個有參考價值的網站
-
- elasticsearch-analysis-kuromojiでユーザ辞書の利用方法
- Elasticsearch 日本語で全文検索 その2
环境
-
- CentOS 6.4
-
- Elasticsearch 1.1.1
kuromoji 2.0.0
创建字典文件
首先创建一个词典文件。
使用普通的文本文件格式,字符编码为UTF-8。扩展名可以任意选择。
在这里,我们以”my_jisho.dic”作为示例。
字典文件存放位置
文件保存路径为”/etc/elasticsearch/my_jisho.dic”,可能是因为这是Elasticsearch 1.1.1版本。
当我查看其他网站时,我发现很多地方都写着”(Elasticsearch主页)/config/my_jisho.dic”,所以我最初把它放在那里试了一下,但在创建索引时出现了一个错误提示说应该放在”/etc/elasticsearch/”。
字典文件的编写方式
文件内容以CSV格式编写,并按以下顺序排列。
単語,形態素解析後の単語,読み,品詞
将“形態素解析后的单词”用半角空格隔开,即可进行分词处理。
“东京晴空塔”的例子
東京スカイツリー,東京 スカイツリー,トウキョウ スカイツリー,カスタム名詞
西国分寺的例子
西国分寺,西国分寺,ニシコクブンジ,駅名
将内容设置为索引
创建用于样本的索引
$ curl -XPUT 'http://localhost:9200/example/' -d '(下のjson)'
{
"settings": {
"analysis": {
"tokenizer": {
"kuromoji": {
"type": "kuromoji_tokenizer",
"user_dictionary": "my_jisho.dic" <ここに辞書ファイル
}
},
"analyzer": {
"kuromoji_analyzer": {
"tokenizer": "kuromoji",
"type": "custom",
"filter": [
"kuromoji_baseform",
"pos_filter",
"greek_lowercase_filter",
"cjk_width"
]
},
"yomigana_analyzer": {
"tokenizer": "kuromoji",
"type": "custom",
"filter": [
"katakana_readingform",
"cjk_width"
]
}
}
}
}
}
让我们来解析一下
$ curl -XGET 'http://localhost:9200/example/_analyze?analyzer=kuromoji_analyzer' -d '西国分寺'
{
"tokens": [
{
"token": "西国分寺",
"start_offset": 2,
"end_offset": 6,
"type": "word",
"position": 1
}
]
}
另外,需要确认读音标注。
$ curl -XGET 'http://localhost:9200/example/_analyze?analyzer=yomigana_analyzer' -d '西国分寺'
{
"tokens": [
{
"token": "ニシコクブンジ",
"start_offset": 2,
"end_offset": 6,
"type": "word",
"position": 1
}
]
}
完成了。