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: 記号,句点,*,*,*,*,。,。,。