PHPでMeCabを使って形態素解析してみた。 環境は以下の通り。


インストール

まずはMeCabをインストールする。MeCabのインストールはapt-getでもできたのだが、apt-getでインストールされるMeCabのバージョンが0.93でMeCab extension 0.2.0が対応していなかったのと、apt-getでmecab-ipadicがインストールできなかったため、ソースからインストールすることにした。

MeCabのページ」からmecabとmecab-ipadicをDLして、mecabの方からインストールする。このとき、makeやg++がなければ先にインストールしておく。

> apt-get install make g++
> tar xvfz mecab-0.97.tar.gz
> cd mecab-0.97
> ./configure
> make
> make install

次に、mecab-ipadicをインストールする。デフォルトでは文字コードがEUCになるので、使いたい文字コード(ここではUTF-8)を指定しておく。

> cd ..
> tar xvfz mecab-ipadic-2.7.0-20070801.tar.gz
> cd mecab-ipadic-2.7.0-20070801
> ./configure --with-charset=utf8
> make
> make install

これでMeCabのインストールはできたはずなので、確認しておく。

> mecab
言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています.
言語    名詞,一般,*,*,*,*,言語,ゲンゴ,ゲンゴ
,       名詞,サ変接続,*,*,*,*,*
辞書    名詞,一般,*,*,*,*,辞書,ジショ,ジショ
,       名詞,サ変接続,*,*,*,*,*
コーパス        名詞,一般,*,*,*,*,コーパス,コーパス,コーパス
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
依存    名詞,サ変接続,*,*,*,*,依存,イゾン,イゾン
し      動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
汎用    名詞,一般,*,*,*,*,汎用,ハンヨウ,ハンヨー
的      名詞,接尾,形容動詞語幹,*,*,*,的,テキ,テキ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
設計    名詞,サ変接続,*,*,*,*,設計,セッケイ,セッケイ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
基本    名詞,一般,*,*,*,*,基本,キホン,キホン
方針    名詞,一般,*,*,*,*,方針,ホウシン,ホーシン
と      助詞,格助詞,一般,*,*,*,と,ト,ト
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
い      動詞,非自立,*,*,一段,連用形,いる,イ,イ
ます    助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
.       名詞,サ変接続,*,*,*,*,*
EOS

次に、PHPからMeCabが使えるように、MeCab extensionをインストールする。まずMeCab extensionのページからphp_mecab-0.2.0.tgzをDLする。ここでは、phpizeが必要になるので、なければ「apt-get install php5-dev」などとしてインストールしておく。

> cd ..
> apt-get install php5-dev
> tar xfvz php_mecab-0.2.0.tgz
> cd php_mecab-0.2.0
> phpize
> ./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/local/bin/mecab-config
> make
> make install

最後に、php.iniに「extension=mecab.so」を書き加えて、Apacheを再起動する。

PHPからMeCabを使う

単純に、文字列を形態素で区切った結果を配列でほしいだけならば、以下のように書くだけでいい。

<?php
$str = "MeCab extensionは、MeCabを使って文章の形態素解析をするPHP用の拡張モジュールです。";
$result = mecab_split($str);
print_r($result);
?>
Array
(
	[0] => MeCab
	[1] => extension
	[2] => は
	[3] => 、
	[4] => MeCab
	[5] => を
	[6] => 使っ
	[7] => て
	[8] => 文章
	[9] => の
	[10] => 形態素
	[11] => 解析
	[12] => を
	[13] => する
	[14] => PHP
	[15] => 用
	[16] => の
	[17] => 拡張
	[18] => モジュール
	[19] => です
	[20] => 。
)

読みや品詞などの情報がほしい場合には以下のようにする。

<?php
$str = "PHPで形態素解析してみた。";

$mecab = new MeCab_Tagger();
for($node=$mecab->parseToNode($str); $node; $node=$node->getNext()){
        if($node->getStat() != 2 && $node->getStat() != 3){
                print 'ID: '.$node->getId()."\n";
                print 'Surface: '.$node->getSurface()."\n";
                print 'Stat: '.$node->getStat()."\n";
                print 'Length: '.$node->getLength()."\n";
                print 'Feature: '.$node->getFeature()."\n";
                print "\n";
        }
}
?>
ID: 4
Surface: PHP
Stat: 1
Length: 3
Feature: 名詞,一般,*,*,*,*,*

ID: 14
Surface: で
Stat: 0
Length: 3
Feature: 助詞,格助詞,一般,*,*,*,で,デ,デ

ID: 22
Surface: 形態素
Stat: 0
Length: 9
Feature: 名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ

ID: 28
Surface: 解析
Stat: 0
Length: 6
Feature: 名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ

ID: 39
Surface: し
Stat: 0
Length: 3
Feature: 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ

ID: 47
Surface: て
Stat: 0
Length: 3
Feature: 助詞,接続助詞,*,*,*,*,て,テ,テ

ID: 52
Surface: み
Stat: 0
Length: 3
Feature: 動詞,非自立,*,*,一段,連用形,みる,ミ,ミ

ID: 56
Surface: た
Stat: 0
Length: 3
Feature: 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

ID: 59
Surface: 。
Stat: 0
Length: 3
Feature: 記号,句点,*,*,*,*,。,。,。