phpでMecab使ってみた
案件でmecab使うことあったから、phpで扱うためのインスト備忘録です。
ちなみにphpバージョンは5.6です。
index
mecabインストール
mecab本体のインストール方法です
参考URL
http://qiita.com/Keech/items/3b51a60c89b9e803b256
手順
##### rootで作業
cd /usr/local/src/
wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar xvf mecab-0.996.tar.gz
cd /usr/local/src/mecab-0.996/
./configure
make
make check
make install
確認方法
$ mecab -v
mecab of 0.996
makeでコケる場合
自分の環境の場合以下のツールがなかったためmakeでコケました。
yum install gcc-c++
※ そもそもc++で作られているようで、そりゃコンパイラが必要でしたね。。。すいません。
辞書のインストール
標準的な「IPA辞書」ではなく、ググッて評判が良さそうだった、「mecab-ipadic-neologd」を入れるようにしました。
参考URL
-
http://diary.overlasting.net/2015-03-13-1.html
http://www.slideshare.net/overlast/mecab-ipadicneologdtokyordf-46497035
手順
##### rootで作業
cd /usr/local/src/mecab-0.996/
mkdir library
cd /usr/local/src/mecab-0.996/library
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd /usr/local/src/mecab-0.996/library/mecab-ipadic-neologd/
./bin/install-mecab-ipadic-neologd -n
コケる場合
自分の環境では以下のツールをインストールすることで、問題なく入りました
yum install patch
確認方法
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd
センテンススプリングでも文春でもどっちでもいいだろ
センテンス 名詞,一般,*,*,*,*,センテンス,センテンス,センテンス
スプリング 名詞,一般,*,*,*,*,スプリング,スプリング,スプリング
で 助詞,格助詞,一般,*,*,*,で,デ,デ
も 助詞,係助詞,*,*,*,*,も,モ,モ
文春 名詞,固有名詞,一般,*,*,*,文春,ブンシュン,ブンシュン
で 助詞,格助詞,一般,*,*,*,で,デ,デ
も 助詞,係助詞,*,*,*,*,も,モ,モ
どっち 名詞,代名詞,一般,*,*,*,どっち,ドッチ,ドッチ
でも 助詞,副助詞,*,*,*,*,でも,デモ,デモ
いい 動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,イイ
だろ 助動詞,*,*,*,特殊・タ,未然形,だ,ダロ,ダロ
EOS
php-mecabのインストール
手順
##### rootで作業
cd /usr/local/src/
git clone https://github.com/rsky/php-mecab.git
cd /usr/local/src/php-mecab/mecab
phpize
./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/bin/mecab-config
make
make test
make install
### extensionファイル作成
vim /etc/php.d/mecab.ini
extension=mecab.so
/etc/init.d/httpd restart
確認方法
$ php -r 'phpinfo();' | grep 'mecab' -i
/etc/php.d/mecab.ini
mecab
MeCab Support => enabled
MeCab Library => 0.996 => 0.996
mecab.default_dicdir => no value => no value
mecab.default_rcfile => no value => no value
mecab.default_userdic => no value => no value
使用方法
コード
check.php
<?php
$str = 'センテンススプリングでも文春でもどっちでもいいだろ';
$options = array('-d', '/usr/local/lib/mecab/dic/mecab-ipadic-neologd');
$mecab = new MeCab_Tagger($options);
$nodes = $mecab->parseToNode($str);
foreach ($nodes as $n)
{
echo $n->getSurface() . "<br />";
echo $n->getFeature() . "<br />";
}
結果
BOS/EOS,*,*,*,*,*,*,*,*
センテンス
名詞,一般,*,*,*,*,センテンス,センテンス,センテンス
スプリング
名詞,一般,*,*,*,*,スプリング,スプリング,スプリング
で
助詞,格助詞,一般,*,*,*,で,デ,デ
も
助詞,係助詞,*,*,*,*,も,モ,モ
文春
名詞,固有名詞,一般,*,*,*,文春,ブンシュン,ブンシュン
で
助詞,格助詞,一般,*,*,*,で,デ,デ
も
助詞,係助詞,*,*,*,*,も,モ,モ
どっち
名詞,代名詞,一般,*,*,*,どっち,ドッチ,ドッチ
でも
助詞,副助詞,*,*,*,*,でも,デモ,デモ
いい
動詞,自立,*,*,五段・ワ行促音便,連用形,いう,イイ,イイ
だろ
助動詞,*,*,*,特殊・タ,未然形,だ,ダロ,ダロ
BOS/EOS,*,*,*,*,*,*,*,*
やってみて
言葉では知ってたけど実際にやったことなかったmecabですが、とても面白かった。