root権限なしでphp-mecabを動かす

既に流行りは過ぎた感のある形態素解析ですが、皆さんは使っているのでしょうか。何を使えばいいか迷ったらMeCabだと思います。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer.
歴史があるし、PHPバインディングもあるからね。

で、MeCabとかphp-mecabとか、CentOS 6のyumでは落ちてこないので、ソースからインストールする必要があります。またApacheに組み込むにはroot権限が必要です。だけど今回はroot権限なしでインストールして、コマンドラインから動かしてみます。

というわけで、とりあえずはMeCabのインストール。ソースを取ってきて解凍して、こんな感じ。

$ ./configure --prefix=$HOME --with-charset=utf8
$ make && make check && make install

PREFIXを$HOMEに指定することでコマンドは $HOME/bin/ の下にインストールされるようになります。あとデフォルトのキャラセットをUTF8に指定しました。

辞書も必要です。こちらもMeCabのサイトで配布されているのでダウンロード、解凍して、同じように。

$ ./configure --prefix=$HOME --with-charset=utf8
$ make && make install

これでMeCabのインストールは完了。

動作確認にコマンドラインから mecab と打ってみる。$HOME/bin/ にパスが通っていない人は通しておきましょう。絶対パスで $HOME/bin/mecab で実行してもいいです。すると入力待ちになるので、そこに解析したい文章を入れてみましょう。文字化けする人は辞書の文字コードがターミナルの文字コードと合ってないかも。

MeCabの動作確認ができたら、ついにphp-mecabです。
rsky/php-mecab
これもソースコードを取ってきてインストールします。いや、正確にはコンパイルまでで終わらせます。

$ phpize && ./configure && make && make test

make test は必須じゃないかも。ここだけ ./configure から make へ && でつなげた意味はありません。&& は成功したら次、の意味です。

make が完了したら modules/mecab.so というファイルが出来上がります。これがphp-mecabのエクステンションです。

出来上がったエクステンションを読み込んで動かしてみましょう。

$ php -d extension=modules/mecab.so -r '$mecab = new MeCab_Tagger(); $nodes = $mecab->parseToNode("すもももももももものうち"); foreach ($nodes as $n) var_dump($n->getSurface().": ".$n->getFeature());'
string(25) ": BOS/EOS,*,*,*,*,*,*,*,*"
string(62) "すもも: 名詞,一般,*,*,*,*,すもも,スモモ,スモモ"
string(41) "も: 助詞,係助詞,*,*,*,*,も,モ,モ"
string(50) "もも: 名詞,一般,*,*,*,*,もも,モモ,モモ"
string(41) "も: 助詞,係助詞,*,*,*,*,も,モ,モ"
string(50) "もも: 名詞,一般,*,*,*,*,もも,モモ,モモ"
string(41) "の: 助詞,連体化,*,*,*,*,の,ノ,ノ"
string(64) "うち: 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ"
string(25) ": BOS/EOS,*,*,*,*,*,*,*,*"

引数 -d で php.ini に書く内容を一時的に指定できます。-r を指定するとPHPの開始タグを書く必要がありません。php-mecab は公式マニュアルが公開されていないようで、どんな関数があるか分かりにくいですが、とりあえず、こんな感じで解析できるようです。

ってな感じで、コマンドラインで使うだけならroot権限はなくてもMeCabやphp-mecabを使うことが出来ます。サービスサイトで使うならサーバ管理者と相談したほうがいいと思うけど、検証用で個人的に試すだけなら十分だと思います。