読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

mecabをmacにダウンロードしてphpから実行する(失敗記事)

PHP Mecab

スポンサードリンク

http://www.flickr.com/photos/35490291@N07/3889528397
photo by Creative Donkey


はじめてのMecabは失敗に終わりました。


いや、失敗じゃないんだけど、、、phpで実行できなかった。


っつーことで、そんときの話をメモ



環境

# mac
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.10.3
BuildVersion:	14D131

# php
$ php -v
PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

mecab のページ

MeCab: Yet Another Part-of-Speech and Morphological Analyzer


mecabと辞書ファイル(ipadic)をダウンロード

mecab

$ tar xvzf mecab-0.996.tar.gz
$ cd mecab-0.996/
$ ./configure
$ make
$ make check
$ sudo make install

ipa-dicをインストール

$ tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801/
$ ./configure --with-charset=utf8
$ make
$ sudo make install

動作テスト

コンソール上で実行ができます。

$ mecab
すもももももももものうち
すもも	名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
も	助詞,係助詞,*,*,*,*,も,モ,モ
もも	名詞,一般,*,*,*,*,もも,モモ,モモ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
うち	名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS


おおお! すごい! (Ctrl + D で解除できます)

$ mecab
ガンダムは素晴らしいモビルスーツです。
ガン	名詞,一般,*,*,*,*,ガン,ガン,ガン
ダム	名詞,一般,*,*,*,*,ダム,ダム,ダム
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
素晴らしい	形容詞,自立,*,*,形容詞・イ段,基本形,素晴らしい,スバラシイ,スバラシイ
モビルスーツ	名詞,一般,*,*,*,*,*
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
EOS

あ、ガンダムは認識しないのね。この辺は登録すればいけるのかな?

php_mecabをインストール


続いて、PHPからつかえるようにライブラリを追加します。

$ sudo pear channel-discover pecl.opendogs.org
$ sudo pear install opendogs/mecab-beta

# 途中のメッセージに???
# 的当にnoを入力
specify pathname to mecab-config [no] : no


# が、noだとエラーになった。。。
checking for mecab-config... no
configure: error: mecab-config not found
ERROR: `/private/tmp/pear/temp/mecab/configure --with-mecab=no' failed


どうやら、mecabさんのconfigファイルを指定してあげればいいらしい。

specify pathname to mecab-config [no] :  ~/mecab-0.996/mecab-config


うまくいった。


php.iniにも設定を追加

# どこに記述すればいいのかわからなかったので、ファイルの一番最後に記述しました。
extension=mecab.so


念のため、Webサーバは再起動(使ってなかったらいいです)

$ sudo apachectl -k restart

動作テスト(php版)


テスト用のソースをお借りしました。


https://gist.github.com/masayuki5160/4ef3606257af9a1df1d4

$ php test.php
PHP Warning:  MeCab_Tagger::__construct(): /SourceCache/MeCab/MeCab-666.7/src/tagger.cpp(134) [load_dictionary_resource(param)] /SourceCache/MeCab/MeCab-666.7/src/param.cpp(71) [ifs] no such file or directory: ~/mecab/dicrc in ~/mecab/test.php on line 6


・・・・?

dicrcのパスが間違っているっぽい


パスを指定してあげる。

// 辞書ファイルをインストールしたディレクトリを指定
$options = array('-d', '~/mecab-ipadic-2.7.0-20070801');
$mecab = new MeCab_Tagger($options);
$ php test.php
libc++abi.dylib: terminating with uncaught exception of type marisa::Exception
teAbort trap: 6


/(^o^)\



ここから本当に地獄だ・・・・!


一度アンインストール


うまくいかない場合は、アンインストールしてみな。という記述が。

$ sudo pear uninstall opendogs/mecab-beta


今度はソースからインストールします。

$ wget https://github.com/downloads/rsky/php-mecab/php-mecab-0.5.0.tgz
$ tar xzvf php-mecab-0.5.0.tgz
$ cd php-mecab-0.5.0
$ phpize
$ ./configure --with-php-config=${任意のディレクトリ} --with-mecab=${mecabをインストールしたところのconfig path}
$ make
$ sudo make install


ふつうに難なくインストールできました。


もう一度テスト

$ php test.php
libc++abi.dylib: terminating with uncaught exception of type marisa::Exception
teAbort trap: 6


\(^o^)/


なーぜぇー?


色々調べてみたけど、どうやらmacでしか発生しない問題っぽい。


同士がいないか、生まれて初めて、QAサイトを利用してみました。


teratail.com



頼む。解決した人でてきてください!(その間、私も悪あがいてみる)


f:id:aipacommander:20150412224051p:plain


こんなに探したのに、いっぱつで解決できる方がいたら、俺は無能でしょうorz