Hatena::ブログ(Diary)

A.C.Milan好きの皮相浅薄な独り言 このページをアンテナに追加 RSSフィード

ikachan

December 29(Thu), 2011

php_mecabのインストールに凄くハマりました(時間を費やしたという意味で)

otoge.net音ゲーの数が増えてきたので、そろそろMecabを使用した検索機能を実装しようと思い、調べた記事を参考に作業を進めていたのですが、MecabPHPから利用するためのモジュールであるphp_mecabのインストールで数時間程はまってしまい、凄く嫌な思いをしたので備忘録として残しておきます。



まず、事前にイカサイトにてMecab辞書インストールしておきます。

MeCab: Yet Another Part-of-Speech and Morphological Analyzer



そして、php_mecabをイカのようにインストールします。

pear channel-discover pecl.opendogs.org
pear remote-list -c opendogs
sudo pear install opendogs/mecab-beta



普通はこれで上手くいくはずなのですが、

略
tmp/pear/temp/mecab/mecab.c: In function ‘php_mecab_node_list_func’:
/tmp/pear/temp/mecab/mecab.c:1521:37: error: ‘mecab_node_t’ has no member named ‘sentence_length’
/tmp/pear/temp/mecab/mecab.c:1524:9: error: ‘mecab_node_t’ has no member named ‘sentence_length’
/tmp/pear/temp/mecab/mecab.c:1528:23: error: ‘mecab_node_t’ has no member named ‘end_node_list’
/tmp/pear/temp/mecab/mecab.c:1528:52: error: ‘mecab_node_t’ has no member named
略
make: *** [mecab.lo] エラー 1

というエラーがでてmakeできませんでした。



その後色々調べてみても、原因っぽいものは中々見つからなかったのですが、調べた中で少し気になる記事を見つけました。
その記事はPHPではなくRubyの話だったのですが、Mecabモジュールバージョンの違いでインストールに失敗した、的な内容でした。
それを見て、php_mecabのインストールの参考にしていた記事比較最近ものだったという点と、php_mecabのREADMEMecabバージョンに関する記述特に無かったという点からバージョンに関しては、そういえば余り気にしていなかったと思い、Mecabサイトを改めて参照してみると、僕がインストールしていたMecabは0.99で、その更新日は一週間前の2011-12-24と、凄くタイムリーバージョンとなっていました。



しかもその更新内容が

2011-12-24 MeCab 0.99

MeCab::Model, MeCab::Lattice クラスを追加

マルチスレッド環境でのユーザビリティの向上。複数スレッドが同一辞書を共有しながら解析可能に

同一辞書を参照する場合辞書へのリファレンス自動的に共有する機能の削除。 (MeCab::Model を使って同一のことが可能なため)

解析中にアトミックに辞書アップデートする機能の追加 Model::swap()

Windows版のバイナリUnicodeバイナリに変更

online learning, HMM, EM learning の各実験コードを削除

MeCab::Node:(begin|end)_node_list メンバの削除

細かいバグの修正

となっており、先ほどのエラーメッセージと凄く関連していてそうな変更点が記述してありました。



ほぼ間違いなくこれが原因のような気がするじゃなイカ、ということでMeCab 0.98を改めてインストールした後、php_mecabをインストールしてみると普通に成功しました。



結果としては、ただのバージョン違いでしたが何だか凄く疲れました。



終わり



スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/alexam/20111229/1325177182