読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

mecabにwikipediaとhatenaキーワードのユーザ辞書を適用する(ついでに、辞書にない場合はそれもわかるようにするオプション付き)

mecabのインストール

$ brew install mecab
$ brew install mecab-ipadic

wikipediaとhatenaのキーワードファイルの取得

$ curl -L http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv | iconv -f euc-jp -t utf-8 > keywordlist_furigana.csv
$ curl -L http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz | gunzip > jawiki-latest-all-titles-in-ns0

辞書作成コードを用意する(make_dict.rb)

gist88bfb2936690d5508a8c

$ ruby make_dict.rb

辞書を作成する

$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic -u onomasticon.dic -f utf-8 -t utf-8 onomasticon.csv

試してみる

作成したユーザ辞書を -u で指定すると、有効になる。ちなみに、 --unk-feature を指定すると、判定できなかった言葉に対して指定した文言を割り付けることができる

$ echo 'レーベンシュタイン距離' | mecab --unk-feature "未知語"
レーベンシュタイン      未知語
距離    名詞,一般,*,*,*,*,距離,キョリ,キョリ
EOS
$ echo 'レーベンシュタイン距離' | mecab -u onomasticon.dic --unk-feature "未知語"
レーベンシュタイン距離  名詞,一般,*,*,*,*,レーベンシュタイン距離,*,*,wikipedia
EOS

前者では レーベンシュタイン を未知語として判定しているのに対し、後者では レーベンシュタイン距離 で一語として判定していて、かつwikipediaに登録されているデータということもわかる。