静かなる名辞

pythonとプログラミングのこと

MeCab+Pythonでunidicを使う

はじめに

 MeCabの辞書といえばipadicが定番ですが、unidicという辞書もあります。ちょっとこれを使いたくなったので、使うことにしました。

 なお、MeCabおよびmecab-pythonはすでにipadic等で使える状況になっているものとします。

 目次

unidicのいいところ

  • 語彙や単語の分割(これに関しては良し悪しの世界・・・ipadicにはmecab-ipadic-NEologdがあるし)
  • 話し言葉、古文版の辞書がある
  • 分類語彙表シソーラス)と組み合わせて使える。

unidicをmecabで使えるようにする

 とりあえず落としてきます。

「UniDic」国語研短単位自動解析用辞書

 最新版ダウンロードのページからダウンロードできます。ファイルサイズがでかいので、気長に落とします(相手サーバの回線は速いらしく、私が落としたときは十分程度で終わりました)。

 ダウンロードが終わったら、解凍してディレクトリを作ってください。場所はどこでも構いませんが、わかりやすい場所にしておくことをおすすめします*1

 できあがったディレクトリの中には、けっこう色々なファイルが入っています。が、その中身がすべて必要かというとそうでもなく、確認していませんが、

  • char.bin
  • matrix.bin
  • sys.dic
  • unk.dic
  • dicrc

 あたりがあればとりあえず動くはずです。この他には、ライセンスファイル等と、自分でビルドするときに必要になるファイルが同包されています。ビルドするのは大変なので、今回はバイナリ版を素直に使うことにします*2。なお、ビルド手順についてはこちらが参考になります。

MeCab で UniDic 辞書を使ってみる / 桃缶食べたい。

 なお、実行する前に、こちらを参考にしてunidicのdicrcを編集し、出力フォーマットを整えておきます。

UniDic - rmecab

 デフォルトの出力フォーマットは、何かうまくいっていないような感じだからです。

;以下の2行をコメントアウトする(連続しているとは限らない)
;bos-feature = BOS/EOS,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*
;node-format-unidic22 = %m\t%f[0],%f[1],%f[2],%f[3],%f[4],%f[5],%f[6],%f[7],%f[8],%f[9],%f[10],%f[11],%f[12],%f[13],%f[14],%f[15],%f[16],%f[17],%f[18],%f[19],%f[20],%f[21],%f[22],%f[23],%f[24],%f[25],%f[26],%f[27],%f[28]\n

;以下の2行を追加
bos-feature = BOS/EOS,*,*,*,*,*,*,*,*
node-format-unidic22 = %m\t%f[0],%f[1],%f[2],%f[3],%f[4],%f[5],%f[10],%f[9],%f[11]\n

 2018年7月現在では上記リンクとは微妙に設定ファイルの書式が変わっているようですが、そんなに困惑するほどの違いはないのでそのまま書き換えます。

 書き換えたら、コマンドラインで以下のように打ってみます。

$ mecab -d 解凍してできたディレクトリのパス
適当な日本語
適当	名詞,普通名詞,サ変形状詞可能,,,,適当,テキトー,テキトー
な	助動詞,,,,助動詞-ダ,連体形-一般,だ,ナ,ダ
日本	名詞,固有名詞,地名,国,,,日本,ニホン,ニホン
語	名詞,普通名詞,一般,,,,語,ゴ,ゴ
EOS

 上のように出力されれば成功です。

 unidicをデフォルトにしたければ、mecabrcなどを書き換えるという作業がこの後に続きますが、私はデフォルトはipadicでいいのでそのままにします。

mecab-pythonから呼ぶ

 コマンドライン引数をMeCab.Taggerの引数に渡すだけ。

>>> import MeCab
>>> tagger = MeCab.Tagger("-d 解凍してできたディレクトリのパス")
>>> print(tagger.parse("何らかの日本語"))
何	代名詞,,,,,,何,ナン,ナン
ら	接尾辞,名詞的,一般,,,,ら,ラ,ラ
か	助詞,副助詞,,,,,か,カ,カ
の	助詞,格助詞,,,,,の,ノ,ノ
日本	名詞,固有名詞,地名,国,,,日本,ニホン,ニホン
語	名詞,普通名詞,一般,,,,語,ゴ,ゴ
EOS

 簡単でいいですね。

*1:ホーム以下にディレクトリを掘って置いても良いし、正式にはmecabの辞書を置くディレクトリに入れるべきでしょうか

*2:linux環境、UTF-8で使う分には問題ないと思います。それ以外だと文字コードを変換して自分でビルドする作業が必要になるはずです