MacPortsでMeCabを入れてPythonバインディングをvirtualenv環境に入れた

最近読んでるオライリーの入門ソーシャルデータを読み進めるのに必要みたいだったので、MeCabを入れました。入れるのはMacPortsで簡単だったけど、ちょっとだけ注意点があったのでメモしておきます。

インストール

$ sudo port install mecab
$ sudo port install mecab-ipadic-utf8
$ cd /opt/local/lib/mecab/dic/
$ sudo ln -snf ipadic-utf8 sysdic
$ mecab
これはテストです。 #標準入力
これ     名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は     助詞,係助詞,*,*,*,*,は,ハ,ワ
テスト     名詞,サ変接続,*,*,*,*,テスト,テスト,テスト
です     助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。     記号,句点,*,*,*,*,。,。,。
EOS

注意点とか

utf-8の辞書を使う必要がある
$ sudo port install mecab
$ mecab
これはテストです。
これ?     ????,????,*,*,*,*,*
??     ̾??,??ͭ̾??,?ȿ?,*,*,*,*
???     ????,????,*,*,*,*,*
??     ̾??,????,*,*,*,*,??,?????ȥ?,?????ȥ?
???     ????,????,*,*,*,*,*
??     ̾??,??ͭ̾??,?ȿ?,*,*,*,*
??。     ????,????,*,*,*,*,*
EOS

これだけだと文字化けしてしまいます。

$ ls -l /opt/local/lib/mecab/dic/
total 8
drwxr-xr-x  11 root  admin  374  1 19 21:41 ipadic-eucjp
lrwxrwxrwx   1 root  admin   12  1 19 21:42 sysdic -> ipadic-eucjp

sysdicというのが多分使用するデフォルトの辞書ファイルで、ファイル名的にEUC-JPの辞書にシンボリックリンクを貼ってます。

$ sudo port install mecab-ipadic-utf8
$ cd /opt/local/lib/mecab/dic/
$ sudo ln -snf ipadic-utf8 sysdic

依存解決で入ったmecab-ipadicがEUC-JPなので、別途mecab-ipadic-utf8を入れます。シンボリックリンクを張り替えたら、文字化けが解決するはずです。

variantsという手も?
$ port info mecab
mecab @0.991 (textproc, japanese)
Variants:             [+]ipadic, jumandic, naistjdic, sjis, utf8

略

Library Dependencies: mecab-base, mecab-ipadic
Conflicts with:       mecab-sjis, mecab-utf8

入れてから気がついたけどvariantsにuft8ってのがあるから、もしかしたら、これ指定したらもしかしたら一発でスッキリ入るかも?

Pythonバインディングのインストール

各言語から使うにはバイディングをインストールする必要があります。
MacPortsにはPerl用、Ruby用、Python用があるみたいですね。

$ port search mecab
 
p5-mecab @0.980.0 (perl, textproc, japanese)
    a Perl module for MeCab
 
p5.8-mecab @0.980.0 (perl, textproc, japanese)
    a Perl module for MeCab
 
p5.10-mecab @0.980.0 (perl, textproc, japanese)
    a Perl module for MeCab
 
p5.12-mecab @0.980.0 (perl, textproc, japanese)
    a Perl module for MeCab
 
p5.14-mecab @0.980.0 (perl, textproc, japanese)
    a Perl module for MeCab
 
py-mecab @0.98 (python, textproc, japanese)
    a Python module for MeCab
 
py24-mecab @0.98 (python, textproc, japanese)
    a Python module for MeCab
 
py25-mecab @0.98 (python, textproc, japanese)
    a Python module for MeCab
 
py26-mecab @0.98 (python, textproc, japanese)
    a Python module for MeCab
 
py27-mecab @0.98 (python, textproc, japanese)
    a Python module for MeCab
 
rb-mecab @0.98 (ruby, textproc, japanese)
    a Ruby module for MeCab
 
rb19-mecab @0.98 (ruby, textproc, japanese)
    a Ruby module for MeCab
 
Found 28 ports.
macで形態素解析エンジン Mecab を使うときの最も簡単な方法 | clicktx::Tech::Memo

MacPortsPythonバインディングがあるみたいだけど、見た感じpythonbrew+virtualenvで作った環境とは違うとこに入れられそう。それは嫌なので、MeCab公式からtar.gzを落としてきました。

http://mecab.sourceforge.net/#downloadから辿ってmecab-python-0.991.tar.gzをダウンロード。

setup.pyの代わりにeasy_install
1. Installation

  % python setup.py build
  % su
  # python setup.py install

中にあるreadmeによるとsetup.pyで入れるとあったけど、これもVirtualenv環境に入らない様な気がしたので、なんとかeasy_installでやろうと調べました。

$ pythonbrew venv use mecabtest
$ easy_install mecab-python-0.991.tar.gz
Processing mecab-python-0.991.tar.gz
Running mecab-python-0.991/setup.py -q bdist_egg --dist-dir /var/folders/y8/y8IQy4kGHyWTmb7QC2nZUE+++TI/-Tmp-/easy_install-3ppZgF/mecab-python-0.991/egg-dist-tmp-oM5VYq
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for C/ObjC but not for C++
zip_safe flag not set; analyzing archive contents...
MeCab: module references __file__
Adding mecab-python 0.991 to easy-install.pth file

Installed /Users/myuser/.pythonbrew/venvs/Python-2.7.2/mecabtest/lib/python2.7/site-packages/mecab_python-0.991-py2.7-macosx-10.4-i386.egg
Processing dependencies for mecab-python==0.991
Finished processing dependencies for mecab-python==0.991

ログにある通り、Virtualenvの環境に入れられました。
どうやらsetup.pyが使える状態になっているパッケージのzip or tar.gzアーカイブは、ローカルに置いてあるならeasy_installが使えるらしい。C++の辺りで警告が出てるけど、とりあえず動くようなので気にしないでおく。

MeCab, ChaSen, KAKASI

形態素解析エンジンはいくつかあるようで、今使われてるのかよく分かりません。ざっと調べたところMeCabが現状良さそう。MeCabChaSenを元にして作られて、途中からスクラッチで作りなおされたんだとか。ChaSenと同程度の精度で2〜3倍速いらしい。
KAKASIというのはNamazuが使ってたものらしいので、何となく古そうな印象。さらに日本語というよりローマ字で処理するらしく、精度もMeCabの方が良いらしい。

他にもいくつかあるみたい。形態素解析 - Wikipedia

環境

Mac Mac OS X 10.5.8(Leopard
Python 2.7.2
mecab-python 0.991