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

完成了。

广告
将在 10 秒后关闭
bannerAds