Mecabのユーザー辞書をつくる

MeCabはいつも用意された辞書を使うだけだったので今回は作る方にまわってみる

Mecabって何??

MeCabオープンソース形態素解析エンジンで、奈良先端科学技術大学院大学出身、現GoogleソフトウェアエンジニアでGoogle 日本語入力開発者の一人である工藤拓によって開発されている。名称は開発者の好物「和布蕪(めかぶ)」から取られた。 ref: https://ja.wikipedia.org/wiki/MeCab

Mecabは作者がめかぶが好きだったからつけたと :open_mouth:

$ mecab
私はメロンが好きです
私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
メロン  名詞,一般,*,*,*,*,メロン,メロン,メロン
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き    名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

こんな感じで入力した文章を品詞に分解してくれる

わかち書きだって出来る

$ mecab -O wakati
私はメロンが好きです
私 は メロン が 好き です

辞書について

MeCab辞書にもとづいて形態素解析を行っているのでその辞書が当然必要となる
辞書にはユーザー辞書とシステム辞書というものがあって

  • システム辞書がMecab使用時に必ず1つ使うもので辞書更新が頻繁でない時や解析速度をおとしたくない時に使われる
  • ユーザー辞書に関してはMeCab使用時に複数指定することが出来て辞書の更新が頻繁だったりする場合はこちらを使う

MeCab自体で辞書は提供されている http://taku910.github.io/mecab/#download から使用しても良いが僕の観測範囲だと

github.com

この辞書を使っている人が多いようです

例えば 広瀬すずは女優です形態素解析をしてその差を見る
MeCabで提供されている辞書を使った場合

$ mecab
広瀬すずは女優です
広瀬    名詞,固有名詞,人名,姓,*,*,広瀬,ヒロセ,ヒロセ
すず    名詞,固有名詞,人名,名,*,*,すず,スズ,スズ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
女優    名詞,一般,*,*,*,*,女優,ジョユウ,ジョユー
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

次にmecab-ipadic-neologdを使った場合

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
広瀬すずは女優です
広瀬すず        名詞,固有名詞,人名,一般,*,*,広瀬すず,ヒロセスズ,ヒロセスズ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
女優    名詞,一般,*,*,*,*,女優,ジョユウ,ジョユー
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス

今回の例だと広瀬すずという一括りで僕らは認識しているので形態素解析をした時もそのまとまりで出てきてほしいはずです

MeCabで提供されている辞書を使った場合は広瀬すず広瀬すずに分かれてしまうので意図した結果にならないですが
mecab-ipadic-neologdを使うと広瀬すずと出してくれました!!

ここまでははmecab-ipadic-neologdすげーって話
ここからが本題

自分で辞書を作成してみる

今回はココナッツケーキを例にする

$ mecab
ココナッツケーキ
ココナッツ      名詞,一般,*,*,*,*,ココナッツ,ココナッツ,ココナッツ
ケーキ  名詞,一般,*,*,*,*,ケーキ,ケーキ,ケーキ
EOS

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
ココナッツケーキ
ココナッツ      名詞,一般,*,*,*,*,ココナッツ,ココナッツ,ココナッツ
ケーキ  名詞,一般,*,*,*,*,ケーキ,ケーキ,ケーキ
EOS

MeCabで提供されている辞書を使ってもmecab-ipadic-neologdの辞書を使ってもココナッツとケーキにわかれてしまう

単語の追加に関しては 公式にも記載されているのでそちらを参考にしつつやっていく

まず下記のフォーマットにのっとってcsvを作成していきます

表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

ココナッツケーキ,,,10,名詞,一般,*,*,*,*,ココナッツケーキ,ココナッツケーキ,ココナッツケーキ

※ この時一番最後に改行をいれないように注意してください。改行が入るとコンパイル時にエラーになります

# -d DIR: システム辞書があるディレクトリ
# -u FILE: FILE というユーザファイルを作成
# -f charset: CSVの文字コード
# -t charset: バイナリ辞書の文字コード
$ /usr/local/libexec/mecab/mecab-dict-index \
  -d /usr/local/lib/mecab/dic/ipadic \
  -u user.dic \
  -f utf-8 \
  -t utf-8 \
  user_dict.csv

コンパイルが終わるとuser.dicが出来ているはずなので-uでユーザー辞書を指定してあげればちゃんと意図した結果になるはずです

mecab -u user.dic 
ココナッツケーキ
ココナッツケーキ        名詞,一般,*,*,*,*,ココナッツケーキ,ココナッツケーキ,ココナッツケーキ
EOS