MeCabをインストールする機会があったので。
インストール
環境
- Fedora12
- Python2.6.2
MeCabのインストール
wget http://sourceforge.net/projects/mecab/files/mecab/0.98/mecab-0.98.tar.gz/download tar zxf mecab-0.98.tar.gz cd mecab-0.98 ./configure --with-charset=utf8 --enable-utf8-only make make install
辞書データのインストール
mecabの公式でipaの辞書データを推奨って書いてあったので。
wget http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/mecab-ipadic-2.7.0-20070801.tar.gz/download tar zxf mecab-ipadic-2.7.0-20070801.tar.gz cd mecab-ipadic-2.7.0-20070801 ./configure --with-charset=utf8 --enable-utf8-only make make install
試しに実行
$ mecab これはテストです。 これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ は 助詞,係助詞,*,*,*,*,は,ハ,ワ テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 。 記号,句点,*,*,*,*,。,。,。 EOS
おー。パチパチパチ。
Pythonバインディングのインストール
wget http://sourceforge.net/projects/mecab/files/mecab-python/0.98/mecab-python-0.98.tar.gz/download tar zxf mecab-python-0.98.tar.gz cd mecab-python-0.98 python setup.py install
Pythonインタプリタで実行
import MeCab
下記エラー発生...。詰んだ?
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MeCab.py", line 25, in <module> _MeCab = swig_import_helper() File "MeCab.py", line 17, in swig_import_helper import _MeCab ImportError: libmecab.so.1: cannot open shared object file: No such file or directory
自分の環境だと、/usr/local/libにlibmecab.soがあることを確認した。/etc/ld.so.confに下記パスを追加する。
/usr/local/lib
/usr/local/libの反映を有効にするため、.confの再読み込み。
$ sudo ldconfig
再度Pythonインタプリタでimportとテスト実行してみる。
import MeCab print m.parse(u"これはテストです".encode("utf-8")) これ 名詞,代名詞,一般,*,*,*,これ,コレ,コレ は 助詞,係助詞,*,*,*,*,は,ハ,ワ テスト 名詞,サ変接続,*,*,*,*,テスト,テスト,テスト です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス EOS
うまくいった!パチパチ...。さて何に活用するか...。
追記
結果データが複数行になってるからStringのsplitlinesメソッド使って配列にすると使いやすそう。
タブ削除して配列にすると扱いやすいかな?「EOS」どうしようか...。
import MeCab mecabstring = m.parse(u"これはテストです".encode("utf-8")) result = map(lambda x: x.replace("\t", ",").split(","), mecabstring.splitlines())
必ず最終行に「EOS」が入るみたいだからpopしちゃえ。
import MeCab mecabstring = m.parse(u"これはテストです".encode("utf-8")) mecablist = mecabstring.splitlines() mecablist.pop() result = map(lambda x: x.replace("\t", ",").split(","), mecablist)
追々記
「EOS」でpopしちゃだめだ!!これ区切り文字だw
参考
- 【Python】 PythonからMeCabを使う。
- configure時のオプションを参考にさせていただきました。