MeCab

形解素分析を使う必要がでてきましてですね。
形解素分析とは自然言語で書かれた文章を各単語や接続詞に分解して抽出するために技術です。ざっくりいうと。

日本語の形解素分析エンジンとしては、「茶釜」と「めかぶ」が有名でして、調べてみたら「めかぶ」のほうが高速みたいなんで、めかぶを利用することにしました。

で、インストールから利用の仕方についてはこちらのサイトを参考にさせて頂きました。
ありがとうございます。

形態素解析「MeCab」と「php_mecab」を使った(複合)名詞の抽出

同じ操作でさくらインターネットのVPSサーバにインストールできたので、一応手順をメモっときます。

MeCabのダウンロード&インストール

まずrootになって、rootディレクトリに移動します。

#su - (パスワード)
#cd

で、MeCabをダウンロード&インストールします。

# wget http://sourceforge.net/projects/mecab/files/mecab/0.98/mecab-0.98.tar.gz/download
# tar zxfv mecab-0.98.tar.gz
# cd mecab-0.98
# ./configure --enable-utf8-only
# make
# make install

UTF-8サポートのみにしてます。

辞書のダウンロード&展開&インストール

つづいて辞書のインストールです。
ここでは「naist-jdic」という辞書をインストールします。

# wget http://iij.dl.sourceforge.jp/naist-jdic/48487/mecab-naist-jdic-0.6.3-20100801.tar.gz
# tar zxvf mecab-naist-jdic-0.6.3-20100801.tar.gz
# cd mecab-naist-jdic-0.6.3-20100801
# ./configure --with-charset=utf8
# make
# make install

辞書とMeCabを紐付け

MeCabの設定ファイルを編集して「naist-jdic」を紐付けます。

# vi /usr/local/etc/mecabrc
-----------------------------------------------
;dicdir =  /usr/local/lib/mecab/dic/ipadic (コメントアウト)
dicdir = /usr/local/lib/mecab/dic/naist-jdic (追加)
(後略)
-----------------------------------------------

MeCab用のPHPモジュール「php_mecab」のインストール

まず、「php_mecab」のソースをダウンロードして解凍します。

# wget http://www.opendogs.org/pub/php_mecab-0.3.0.tgz
# tar zxvf php_mecab-0.3.0.tgz

次に「php-config」と「mecab-config」の場所を確認します。

# which php-config
/usr/bin/php-config

# which mecab-config
/usr/local/bin/mecab-config

つづいてビルドとインストールです。

# 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

PHPのモジュール用ディレクトリに「mecab.so」ができれば完成です。

# ls -l /usr/lib64/php/modules/mecab.so
-rwxr-xr-x 1 root root 176908 Oct 23 10:17 /usr/lib64/php/modules/mecab.so

PHPでMeCabを使う

PHPからMeCabを使う場合、php.iniファイルを編集して「extension=mecab.so」を追加するか、PHPのプログラム内で「dl()」関数を使って拡張モジュールをロードか、どちらかが必要です。

PHPを編集する場合、以下を追加してApacheを再起動します。

extension=mecab.so

PHPプログラム内でロードする場合、ソースに以下の記述をします。

<?php
dl("mecab.so");
...
?>

では、実際のコードを書いてみます。
テキストの中から名詞を抜き出してみます。

<?php
dl('mecab.so');
$mecab = new MeCab_Tagger();
$txt = "坊主が屏風に上手にジョーズの絵を描いた。";
$meishi = array();	//名詞配列

for($node=$mecab->parseToNode($txt); $node; $node=$node->getNext()){
	// 名詞だったら配列に追加する。
	if($node->getStat() != 2 && $node->getStat() != 3 && mb_strpos($node->getFeature(), '名詞', NULL, 'utf-8')===0){
		array_push($meishi, $node->getSurface());
	}
}

//名詞の重複削除
$meishi = array_unique($meishi);

print("<pre>");
print_r($meishi);
print("</pre>");
?>

結果はこうなりました。

Array
(
    [0] => 坊主
    [1] => 屏風
    [2] => 上手
    [3] => ジョーズ
    [4] => 絵
)

うん、これなら使えそう。