「Mecab」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→php7.0でmecabを動かす) |
|||
| 行1: | 行1: | ||
| − | + | [[mecab/インストール・実装]] | |
| − | + | ||
| − | + | ||
| − | + | [[mecab/php5実装]] | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | [[mecab/php7実装]] | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
==phpで使う== | ==phpで使う== | ||
2016年2月17日 (水) 19:06時点における版
目次
phpで使う
pear channel-discover pecl.opendogs.org pear remote-list -c opendogs sudo pear install opendogs/mecab-beta > specify pathname to mecab-config [no] :
php-mecabインストールエラーの時
ERROR: `/var/tmp/mecab/configure --with-mecab=no' failed specify pathname to mecab-config [no] : /usr/local/bin
phpのmecabが動かない場合は一旦削除して再度入れる
sudo pear uninstall opendogs/mecab-beta sudo pear install opendogs/mecab-beta
phpのmecab.so設定
$ vi /etc/php.d/mecab.ini extension=mecab.so
phpのmecab設定確認
$ php -r "phpinfo();" | grep mecab /etc/php.d/mecab.ini, mecab mecab.default_dicdir => no value => no value mecab.default_rcfile => no value => no value mecab.default_userdic => no value => no value
コンソールでの動作例
$ php -r "print nl2br(print_r(mecab_split("すもももももももものうち")));"
// Array ( [0] => すもも [1] => も [2] => もも [3] => も [4] => もも [5] => の [6] => うち )
php動作例
$mecab = new MeCab_Tagger();
$str = "すもももももももものうち";
$nodes = $mecab->parseToNode($str);
foreach($nodes as $node) {
if ($node->getStat() == 2 || $node->getStat() == 3) continue;
echo "id=".$node->getId()."<br />";
echo "surface=".$node->getSurface()."<br />";
echo "stat=".$node->getStat()."<br />";
echo "length=".$node->getLength()."<br />";
echo "feature=".$node->getFeature()."<br />";
}
id=9
surface=すもも
stat=0
length=9
feature=名詞,一般,*,*,*,*,すもも,スモモ,スモモ
id=19
surface=も
stat=0
length=3
feature=助詞,係助詞,*,*,*,*,も,モ,モ
id=24
surface=もも
stat=0
length=6
feature=名詞,一般,*,*,*,*,もも,モモ,モモ
id=31
surface=も
stat=0
length=3
feature=助詞,係助詞,*,*,*,*,も,モ,モ
id=36
surface=もも
stat=0
length=6
feature=名詞,一般,*,*,*,*,もも,モモ,モモ
id=47
surface=の
stat=0
length=3
feature=助詞,連体化,*,*,*,*,の,ノ,ノ
id=57
surface=うち
stat=0
length=6
feature=名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
apacheで動かす場合は再起動
/etc/rc.d/init.d/httpd restart
php7.0でmecabを動かす
php7でmecabを動かそうとすると以下エラーが出る
PHP Fatal error: Uncaught Error: Call to undefined function mecab_split()
こちらにphp7で対応されてるphp_mecabがあるとのことだったので入れてみた
参考:https://twitter.com/rsky/status/672877419674468352 https://github.com/rsky/php-mecab
$ cd /usr/local/src $ git clone https://github.com/rsky/php-mecab $ cd php-mecab/mecab $ phpize $ ./configure --with-mecab=/usr/local/bin/mecab-config $ make $ make test $ sudo make install Installing shared extensions: /usr/lib64/php/modules/ $ php -r "print nl2br(print_r(mecab_split("すもももももももものうち")));" PHP Warning: Module 'mecab' already loaded in Unknown on line 0 PHP Fatal error: Uncaught Error: Call to undefined function mecab_split() in Command line code:1
mecab_split()ではなく\MeCab\split()に変更されている様子。
$ php -r "print_r(\MeCab\split("すもももももももものうち"));"
Array
(
[0] => すもも
[1] => も
[2] => もも
[3] => も
[4] => もも
[5] => の
[6] => うち
)
参考:https://teratail.com/questions/27491
MeCab_Taggerも変更
Fatal error: Uncaught Error: Class 'MeCab_Tagger' not found // $mecab = new MeCab_Tagger(); // php5.6 $mecab = new \MeCab\Tagger(); // php7
