ちょいと前の記事にanalyzer apiを使って形態素解析みたいなことができるというものをやったんですけど、中央線が「中央」と「線」に分離するむかつく事態が発生したため、ユーザー辞書を使って分類してもらうことにしました。

辞書はインストールした場所におく

辞書の場所は「{elasticsearchのインストール場所}/config/hoge.dic」みたいな記事が多く見かけたんですけど、configなんてないし、別に作らなくてもインストールした場所において問題ありませんでした。

また、configを作って入れてもいいですけど、辞書の読み込みの場所指定が、インストールした場所からの相対パス記載だったので、その時は「config/hoge.dic」みたいな記載でできました。

私の場合、elasticsearchがインストールされていた場所は「/etc/elasticsearch/」でした。

辞書を作成する

辞書の形式は、「単語,分解後の単語,読み,品詞」なので、以下で作成してみた。

中央線,中央線,チュウオウセン,路線名
京浜東北線,京浜東北線,ケイヒントウホクセン,路線名

analyzerの設定をする

適当なindex名で、設定をぶちこんでみる
まずは、以下のjsonをファイルで作成した

{
  "settings": {
    "analysis": {
      "tokenizer": {
        "kuromoji": {
          "type": "kuromoji_tokenizer",
          "user_dictionary": "config/test.txt"
        }
      },
      "analyzer": {
        "kuromoji_analyzer": {
          "tokenizer": "kuromoji",
          "type": "custom",
        "mode":"search",
          "filter": [
            "cjk_width"
          ]
        }

      }
    }
  }
}

ほんで、以下で設定した

# curl -XPUT -d @{jsonのファイル名} -H "Content-Type: application/json" http://192.168.11.31:9200/analyze_api/?pretty

さて、結果を。。

結果どうなったか?

京浜東北線で人身事故が発生。大変なことに を解析した

///新しくなったやつ

{
  "tokens" : [
    {
      "token" : "京浜東北線",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "で",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "人身",
      "start_offset" : 6,
      "end_offset" : 8,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "事故",
      "start_offset" : 8,
      "end_offset" : 10,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "が",
      "start_offset" : 10,
      "end_offset" : 11,
      "type" : "word",
      "position" : 4
    },
    {
      "token" : "発生",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "word",
      "position" : 5
    },
    {
      "token" : "大変",
      "start_offset" : 14,
      "end_offset" : 16,
      "type" : "word",
      "position" : 6
    },
    {
      "token" : "な",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "word",
      "position" : 7
    },
    {
      "token" : "こと",
      "start_offset" : 17,
      "end_offset" : 19,
      "type" : "word",
      "position" : 8
    },
    {
      "token" : "に",
      "start_offset" : 19,
    

ちゃんと京浜東北線を判断してくれました。よかったね。

あ、途中で失敗してindexの削除を何回かしましたが、削除は以下です

curl -XDELETE -H “Content-Type: application/json” http://192.168.11.31:9200/{index名}/?pretty

あと、色々送り仮名的?な品詞が出てきてるので、以下もあとあと追加しました。filterに。

ja_stop
kuromoji_baseform
kuromoji_stemmer
kuromoji_number

コメント