この記事について
| 環境 | さくらVPS + PHP + mecab 0.996 |
|---|---|
| 目的 | 形態素解析のため php-mecab を導入する |
| 結果 | mecab本体 → 辞書 → php-mecab の順にソースからインストールして動いた |
つまずきポイント要約
- 素の ./configure は mecab-config not found になる(–with-php-config と –with-mecab を指定)
- re2c がないエラーが出たら re2c をインストールしてやり直し
- 辞書を入れる前に mecab を実行すると辞書なしエラーが出る(バージョン確認は出ない)
さくらVPSにphp-mecabを入れたときの覚書手順
1.mecab を入れる
2.php-mecab を入れる
参考にしたサイト
phpでmecab
手順は参考サイトどおり。自分なりの捕捉を入れた。
ソースコードをインストールする場所に移動
cd /usr/local/src/
ダウンロードと解凍
wget http://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar xvf mecab-0.996.tar.gz
解凍したディレクトリに移動
cd mecab-0.996
configure で Makefile をつくる
sudo ./configure --enable-utf8-only
※「configure」というシェルスクリプトを実行することで、ソースファイルをコンパイルする前に、インストール対象となるシステム特有の機能/情報をチェックし、チェック状況を記述したMakefileが作成される。
コンパイルとインストール
sudo make
sudo make install
この時点で mecab を実行すると 辞書がないエラーが出る
# mecab
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
バージョン確認だけならエラーは出ない
# mecab -v
mecab of 0.996
ipa辞書のインストール
ipa辞書のダウンロード先をつくる
cd /usr/local/src/mecab-0.996/
mkdir library
ダウンロードして ipa辞書を解凍
tar xvf mecab-ipadic-2.7.0-20070801.tar.gz
configure で Makefile をつくる
./configure --with-charset=utf8
コンパイルとインストール
sudo make
sudo make install
動作確認する
mecab
すもももももももものうち
任意。
辞書「mecab-ipadic-neologd」のインストール
(ipa 辞書を先にインストールしておかないと効果は薄い?要確認)
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
動作確認が終了したら続いて、php-mecab のインストール
cd /usr/local/src/
wget https://github.com/rsky/php-mecab/archive/master.zip
unzip master.zip
cd php-mecab-master/mecab
phpize
(sudo ./configure
↑だとエラーが出た、configure: error: mecab-config not found)
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
./configure の途中で re2c が無いみたいなエラーが出たのでインストールする
re2c をインストール
wget http://jaist.dl.sourceforge.net/project/re2c/re2c/0.13.7.5/re2c-0.13.7.5.tar.gz
tar zxvf re2c-0.13.7.5.tar.gz
cd re2c-0.13.7.5
./configure
make
make install
再び./configure からやり直し
sudo ./configure
sudo ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
sudo make
sudo make install
シンボリックリンクの作成
sudo ln -s /usr/lib64/php/modules/mecab.so /etc/php.d
php.iniの編集
vim /etc/php.ini
/etc/php.ini
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; If you wish to have an extension loaded automatically, use the following
; syntax:
;
; extension=modulename.extension
;
; For example, on Windows:
;
; extension=msql.dll
;
; ... or under UNIX:
;
; extension=msql.so
;
; ... or with a path:
;
; extension=/path/to/extension/msql.so
;
; If you only provide the name of the extension, PHP will look for it in its
; default extension directory.
;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;
;php-mecab を動かす記述
extension=mecab.so
;mecab-php の辞書のパス
mecab.default_dicdir="/usr/local/lib/mecab/dic/mecab-ipadic-neologd"
apacheの再起動
service httpd restart
動作確認
php -r 'phpinfo();' | grep 'mecab' -i
以下のようになっていれば問題ない。
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
test.php
辞書の読み込みをしてないとエラーになる
<?php
$str = 'この焼肉は焼きにくい';
$mecab = new Mecab();
$nodes = $mecab->parseToNode($str);
foreach ($nodes as $n)
{
echo $n->getSurface() . "<br />";
echo $n->getFeature() . "<br />";
}
?>
使用する辞書を PHP で指定する場合
$options = array('-d', '/usr/local/lib/mecab/dic/mecab-ipadic-neologd');
$mecab = new MeCab_Tagger($options);
