mecabをインストールしてみた
日本語を扱う場合、形態素解析があると何かといろいろできて便利です。
そこで、サーバインストール型のmecabをインストールしてみました。途中なかなかうまくいきませんでしたが、それらも含めて載せたいと思います。
おおまかな流れは以下のようになります。
MeCab本体と辞書データをダウンロード
それぞれ展開してインストール
動作検証
MeCab本体と辞書データをダウンロード
こちら(mecab.sourceforge.net)からMeCab本体(mecab-0.97.tar.gz)と辞書データ(mecab-ipadic 2.7.0-20070801)をダウンロードします。
展開してインストール
$ tar xzvf mecab-0.97.tar.gz
$ cd mecab-0.97
$ ./configure
$ make
まずは何もオプションを付けずに、インストールできるかどうか試みました。
$ make check
問題がないか調べます。すると、なにやらエラーが起こっているようで、以下のようなメッセージが現れました。
・・・
2 of 3 tests failed
・・・
上下の「・・・」は省略してます。
どうやらテストに失敗しているようです。早速調べると以下のような参考記事を発見。
無視してもよいのかな?と思い、そのままinstallを試みます。
make install
また、辞書データも同様にインスール。
$ tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801
$ ./configure
$ make
$ su
make install
すると一応mecabコマンドがコマンド補足ででてくるようになったので、早速たたいてみます。
が、以下のようなエラーがでました。
$ mecab
tagger.cpp(147) [load_dictionary_resource(param)] param.cpp(71) [ifs] no such file or directory: /usr/lib/mecab/dic/ipadic/dicrc
うーん、なにか、まずい設定でもあったな?と思い、悪かったとこがなかったかを振り返ってみました。
そこで気になったが2点。
mecab本体の ./configure したときに、「no」が多発してた箇所があった
make test したときに、ライブラリが見つからないエラーメッセージがあった
./configure時の「no」の多発
「no」が集中的に出ていた部分の始まりは、「g77」というのもでした。
なので、とりあえずこいつをいれてみます。
まず、yumで探してみると、パッケージを発見。
#yum search g77
・・・
compat-gcc-34-g77.i386
・・・
インストールします。
#yum install compat-gcc-34-g77.i386
これで再度、./configure を実行すると集中的な「no」は無くなりました。
make test時にライブラリが見つからない
エラー内容は以下
/usr/local/src/mecab-0.97/src/.libs/lt-mecab-dict-index: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
/usr/local/src/mecab-0.97/src/.libs/lt-mecab: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
どうも libiconv.so.2 が見つかっていないようです。そこで、このライブラリが無いのか、あるいは単に認識できていないのかを調べるため、探してみます。
$ find / -name libiconv.so.2
・・・
/usr/local/src/libiconv-1.12/lib/.libs/libiconv.so.2
/usr/local/lib/libiconv.so.2
・・・
お、ありました。ということは認識できてなさそうですね。そこで、一旦ライブラリのパスを環境に設定します。
$ export LD_LIBRARY_PATH=/usr/local/lib
念のため、再度、mecab本体を ./configure からやりなおし、make、make checkを実行してみると、
・・・
1 of 3 tests failed
・・・
お、どうやら一つ失敗が減ったようです。まだ少し気持ち悪いですが、まずこれで動作確認してみます。
% make install
・・・
$ mecab
tagger.cpp(147) [load_dictionary_resource(param)] param.cpp(71) [ifs] no such file or directory: /usr/lib/mecab/dic/ipadic/dicrc
おぅ・・・やはり同じエラーがでますね。
折れそうな心をなんとかしながら、冷静になってエラーを見てみます。
するとディレクトリが見つからないというエラーであることに気づきました。さらに「ipadic」というのはmecabの辞書データの名前だということも気づきました。辞書データはインストールしていたので、どこにあるか調べてみると、 /usr**/local**/lib/mecab/dic/ipadic/dicrc に存在していることが判明。「/local」がある分、階層が違いますね。
そりゃー見つからないわけだ。
では、次に、ここに辞書データがあることをmecabプログラムがどうやったら認識するか?が問題になります。
mecabプログラムに辞書ライブラリの場所を認識させる
まず、コンパイルオプションで上記のライブラリの場所を設定できないか、と考えたのですが、せっかくうまくいった(であろう)インストールをやり直すのが嫌だったのと、その他のソース系ファイル郡の管理がばらばらになりそうだったので、この方法はパス。
つぎに考えたのが、mecabコマンドに辞書ライブラリのパス指定が無いか?と思い、ヘルプを見てみました。
$ mecab —help
すると、なにやらそれっぽい「-d」オプションというものを発見!早速実行!
$ mecab -d /usr/local/lib/mecab/dic/ipadic/
するとエラーも出ずに、コマンド待ち状態のようになりました。
ついに成功!?
動作検証
ついにキタ!!と思い、適当に文章を打ってみたのですが。。。結果は、うまくいかず文字化けして返ってきました。。。。
ここ(mecab.sourceforge.net)によると、mecabのデフォルトはeuc-jpとのことなので、おそらく私のutf-8環境が原因だろうと思い、どこかで文字コードの指定ができないか、再調査。
mecabコマンドオプションにはそういったものは無かったので、 mecab本体の ./configure から見直すと、それっぽいオプション「–with-charset=utf8」「–enable-utf8-only」を発見。またまた、./configureからやり直してみました。が、結果は変わらず。。。
しかし、文字コードの問題に対する別の解決策があるようで、
また, mecab-dict-index の -t オプションを使って直接文字コードの異なる 辞書を再構築できます.
とのことなので早速実施
$ cd mecab-ipadic-2.7.0-20070801
$ /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
make install
さて、これで3度目の動作検証に挑みます。「すもももももももものうち」というのを打ってみます。
$ mecab -d /usr/local/lib/mecab/dic/ipadic/
すもももももももものうち
すると・・・・
すもも 名詞,一般,,,,,すもも,スモモ,スモモ
も 助詞,係助詞,,,,,も,モ,モ
もも 名詞,一般,,,,,もも,モモ,モモ
も 助詞,係助詞,,,,,も,モ,モ
もも 名詞,一般,,,,,もも,モモ,モモ
の 助詞,連体化,,,,,の,ノ,ノ
うち 名詞,非自立,副詞可能,,,*,うち,ウチ,ウチ
EOS
おーー、返ってきた><!!やっとこさ!!長かった!!
ってことで、これから日本語をごにょごにょするアプリが作れそうです。
とりあえず、PHPから呼び出せるようにするか。。。
参考サイト
http://txqz.net/blog/2006/08/27/0253
http://d.hatena.ne.jp/soybeens/20080602
Tags: [mecab](/tag/mecab), [インストール](/tag/%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab), [形態素解析](/tag/%e5%bd%a2%e6%85%8b%e7%b4%a0%e8%a7%a3%e6%9e%90)
« [固定IPでwebサーバ公開](/92/%e5%9b%ba%e5%ae%9aip%e3%81%a7web%e3%82%b5%e3%83%bc%e3%83%90%e5%85%ac%e9%96%8b)
[phpとmecabの連携](/105/php_mecab) »
[画像未復旧: similar.png](http://blog.playispeace.com/img/similar.png) 関連ありそうなエントリー