PHPでMecab利用

環境情報(2009/01/05追加)

CentOS5.2 / PHP 5.2.11

Mecabのインストール

CentOSyumでインストールできなかったので、ソースからコンパイルを行った。インストール先は/usr/localとし、辞書ファイルはutf8のみとした。

本体インストール
# tar xvfz mecab-0.98.tar.gz
# cd mecab-0.98
# ./configure --prefix=/usr/local --with-charset=utf8 --enable-utf8-only --enable-mutex
# make
# make install

./configureでこける(***.hが見つかりません)とでたらgccのアップグレード

$ sudo yum install gcc-c++
辞書ファイルのインストール
# tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz
# cd mecab-ipadic-2.7.0-20070801
# ./configure --prefix=/usr/local --with-charset=utf8
# make
# make install
インストール確認
$ mecab -v
  mecab of 0.98

と表示されればOK。

ここまででMecab本体のインストールが完了。次はPHP経由で呼び出すためのExtensionを追加する。

php_mecabのインストール

ダウンロード

php_mecab

コンパイル
# tar xvfz php_mecab-0.3.0.tgz
# cd php_mecab-0.3.0
# phpize
# ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
# make
# make install
phpExtensionの登録

/etc/php.d/mecab.iniに以下を記述

; Enable dbase extension module
extension=mecab.so

設定後、apache再起動

$ php -i |grep -i "mecab"

mecabが設定されていればOK。
これでPHPからMecabを利用する環境が整ったので、早速簡単なサンプルで試してみる。

サンプル

文字列"すもももももももものうち"の名詞だけ抽出して出現頻度を数える。品詞IDについては、品詞IDの定義を参照。

<?php
$str = 'すもももももももものうち';
$mecab = new Mecab();

$keywords = array();
$nodes = $mecab->parseToNode($str);
foreach($nodes as $node) {
    if($node->posid >= 37 && $node->posid <= 66) {
        echo "品詞ID: " . $node->posid .":" . $node->surface."<br>";
        if(!isset($keywords[$node->surface])) {
            $keywords[$node->surface] = 1;
        } else{
            $keywords[$node->surface]++;
        }
    }
}
arsort($keywords);
print_r($keywords);

結果は

38:すもも
38:もも
38:もも
66:うち
Array ( [もも] => 2 [うち] => 1 [すもも] => 1 )

となり、正しく動いている模様。