UbuntuでMeCabのユーザ辞書に単語を追加してPythonで使えるようにする


はじめに

最近、研究でpythonとMeCabを使用した解析し始めたものの、単語をユーザ辞書に追加する際に苦労したので自分用にまとめてみました。

環境

  • Ubuntu 16.04
  • Python 3.6 (anacondaの仮想環境)
  • MeCab 0.996 (pip install mecab-python3で導入)

1. 辞書を用意する

辞書はcsvファイルで作成しておきます。辞書のフォーマットは
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原型,読み,発音
の順で並べます。

vim add_term.csv
アナと雪の女王,,,1,名詞,一般,*,*,*,*,アナと雪の女王,アナトユキノジョオウ,アナトユキノジョオー

左文脈IDと右文脈IDは空欄にしておくと自動で入力してくれます。また、コストはその単語がどれだけ出現しやすいかを示しており、小さいほど出現しやすいという意味になります。コストの推定法もあるようですが、今回は1にしました。不要なものは「*」でオーケーです。
※文字コードは必ず「UTF-8」で作成すること!「Shift-jis」や「EUC-jp」にすると上手くいきませんでした。

2. ユーザ辞書を作成する

作成したcsvファイルからユーザ辞書を作成します。辞書の作成にはMeCabをインストールした際に付属のmecab-dict-indexを使います。

#ユーザ辞書保存先ディレクトリの作成
mkdir /usr/local/lib/mecab/dic/userdic

#辞書作成
sudo /usr/lib/mecab/mecab-dict-index \
-d /usr/local/mecab/dic/ipadic \
-u /usr/local/lib/mecab/dic/userdic/add.dic \
-f utf-8 \
-t utf-8 \
add_term.csv

オプションは以下の通りです。
-d システム辞書が入っているディレクトリ
-u ユーザ辞書の保存先
-f csvファイルの文字コード
-t ユーザ辞書の文字コード
csvファイル

mecab-dict-indexはフルパスで実行します。この時も文字コードはUTF-8を指定します。

reading add_term.csv ... 1
emitting double-array: 100% |###########################################|

done!

と表示されると成功です。

3. MeCabの設定ファイルに作成したユーザ辞書を追加する

設定ファイルに以下の文を追記します。

sudo vim /etc/mecabrc
userdic = /usr/local/lib/mecab/dic/userdic/add.dic

公式サイトでは
/usr/local/lib/mecab/dic/ipadic/dicrc
/usr/local/etc/mecabrc
のどちらかに追記するように書いてありますが、筆者の環境では上手くいかず、上記場所にmecabrcがあったのでそちらに追記することで正しく動作しました。複数辞書を登録したい場合は,

userdic = AAA.dic,BBB.dic

とすれば登録できました。

動作確認

  • コマンドラインから確認する
#追加前
mecab
アナと雪の女王
アナ  名詞,一般,*,*,*,*,アナ,アナ,アナ
と 助詞,並立助詞,*,*,*,*,と,ト,ト
雪 名詞,一般,*,*,*,*,雪,ユキ,ユキ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
女王  名詞,一般,*,*,*,*,女王,ジョオウ,ジョオー
EOS

#追加後
アナと雪の女王
アナと雪の女王   名詞,一般,*,*,*,*,アナと雪の女王,アナトユキノジョオウ,アナトユキノジョオー
EOS
  • pythonのMeCabで使用する
python3
>>> import MeCab
>>> m_t = MeCab.Tagger('-Ochasen \
                        -u /usr/local/lib/mecab/dic/userdic/add.dic')
>>> txt = 'アナと雪の女王を観に行こう。'
>>> print(m_t.parse(txt))
アナと雪の女王    行こ  

インストール済みのmecab-ipadic-neologdと一緒に使いたい場合は

python3
>>> import MeCab
>>> m_t = MeCab.Tagger('-Ochasen \
                        -d /usr/lib/mecab/dic/mecab-ipadic-neologd \
                        -u /usr/local/lib/mecab/dic/userdic/add.dic')

と変更すれば同時に読み込んでくれます。

結論

試行錯誤しましたが、python上で上手く動作するところまで確認できました。もし間違っている点などありましたらご指摘をいただけますと幸いです。

参考サイト

単語の追加方法
MeCab ユーザ辞書への単語追加