facebook twitter hatena line email

「Mecab」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
行4: 行4:
  
 
[[mecab/php7実装]]
 
[[mecab/php7実装]]
 
==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()."<<nowiki />br />";
 
    echo "surface=".$node->getSurface()."<<nowiki />br />";
 
    echo "stat=".$node->getStat()."<<nowiki />br />";
 
    echo "length=".$node->getLength()."<<nowiki />br />";
 
    echo "feature=".$node->getFeature()."<<nowiki />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.0でmecabを動かす==

2016年2月17日 (水) 19:06時点における版

mecab/インストール・実装

mecab/php5実装

mecab/php7実装

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