さくらVPSにphp-mecabを入れたときの覚書

この記事について

環境さくら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);
タイトルとURLをコピーしました