CodeLab技術ブログ

プログラミング技術まとめ

mecabをPHPで使う

基本的に公式ページにあるとおりインストールすればよいが、
文字コードのデフォルトがeucなのでutf8にする
mecabのインストール
PHPから使いたい場合は古いバージョンのほうがいいかも知れません(後半部分参照)
$ tar zxf mecab-x.xx.tar.gz
$ cd mecab-x.xx
$ ./configure –with-charset=utf8 –enable-utf8-only
$ make
$ sudo make install
辞書ファイル(ipadic)
% tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
% cd mecab-ipadic-2.7.0-XXXX
% ./configure –with-charset=utf8
% make
% su
# make install
こんな感じ。

続いて、phpで使えるようにするためのモジュールphp_mecabを組み込みたいのだが、これが曲者
原作者がいなくなってしまった?のかメンテナンスがあまりされていないためリンクがなかったり、makeが通らなかったりで一苦労。
たとえばこんなのがでました。
/home/hwata/mecab/php_mecab-0.4.0/mecab.c: In function ‘php_mecab_node_list_func’:
/home/hwata/mecab/php_mecab-0.4.0/mecab.c:1642: error: ‘mecab_node_t’ has no member named ‘sentence_length’
・・・・・・・・・・・・・
どうも、mecabとphp_mecabとphpのバージョン競合が激しくおこるようです。(ちなみに、php5.1使用,php6とかだと問題がありそう)
ここによると
http://d.hatena.ne.jp/alexam/20111229/1325177182
バージョン違いが原因で未対応な機能のせいでエラーとなっている様子。MeCab 0.98にしてみました。
改めて公式サイトからダウンロードして同じ手順でインストール
バージョンを確認します
#mecab -v
#mecabof0.98
無事、古いバージョンになりました

改めてphp_mecabをインストール
php5の場合はxvfz php_mecab-0.5.0.tgzのほうがいいかもしれません。
# wget http://www.opendogs.org/pub/php_mecab-0.4.0.tgz
# tar xvfz php_mecab-0.4.0.tgz
# cd php_mecab-0.4.0
# phpize
# ./configure –with-php-config=/usr/bin/php-config –with-mecab=/usr/local/bin/mecab-config
# make
# make install
で、
Installing shared extensions: /usr/lib64/php/modules/
と表示されビルドは完了!
php.iniに反映させます
#sudo vi /etc/php.d/mecab.ini
でiniファイルを新規作成
extension=mecab.so
と書いて保存。httpdを再起動

早速PHPから動かしてみましょう

1
2
3
4
5
< ?php
$str = "MeCab extensionのインストールは大変だった";
$result = mecab_split($str);
var_dump($result);
?>

結果
array
0 => string ‘MeCab’ (length=5)
1 => string ‘extension’ (length=9)
2 => string ‘の’ (length=3)
3 => string ‘インストール’ (length=18)
4 => string ‘は’ (length=3)
5 => string ‘大変’ (length=6)
6 => string ‘だっ’ (length=6)
7 => string ‘た’ (length=3)

お疲れ様でした。
読みや品詞などを出すAPIもあるらしい。