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/xxxx/mecab/php_mecab-0.4.0/mecab.c: In function 'php_mecab_node_list_func':
/home/xxxx/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とかだと問題がありそう)

バージョン違いが原因で未対応な機能のせいでエラーとなっている様子。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から動かしてみましょう

$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もあるらしい。

コメント

  1. […] CentOS7にリプレースしたのだがMeCabのインストールにつまずいたのでメモ。 昔のやった方法ではリンクが切れていたりしてうまくいかなかった。 MeCab のインストール […]

タイトルとURLをコピーしました