今作っているアプリケーションで形態素解析を使った機能を作りたくてPHPで形態素解析のやり方を調べたので備忘録がてらまとめておこうと思う

igo-PHP

インストール方法

  1. igoをダウンロード
  2. 辞書を作成する為に先ずはigoが必要。
    http://sourceforge.jp/projects/igo/releases/からjarファイルをダウンロード
  3. IPA辞書をダウンロード
  4. 後述するMecab用の辞書を使うらしい。
    https://code.google.com/p/mecab/downloads/detail?name=mecab-ipadic-2.7.0-20070801.tar.gz&can=2&q=mecab-ipadicからダウンロード
  5. ダウンロードしたjarファイルを使って辞書をコンパイル
  6. 
java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP
  7. PHPで使う為にigo-PHPをダウンロード
  8. https://github.com/siahr/igo-phpからダウンロード
  9. PHPで実行
  10. php Igo.php <辞書へのパス> <文字列(またはテキストファイル)> 

    とりあえずの動作確認

使い方

プログラム中から使う場合は下記のような使い方になる。

$igo = new Igo('lib/ipadic'); // ipadicのパスをコンストラクタに渡す
$recipe = '砂糖20g、醤油大さじ2杯、だし1カップを合わせます。';
$result = $igo->wakati($recipe);

// Output
echo "input:".$recipe."
"; echo "output:
"; foreach($result as $val){ print $val.":"."
"; };
wakatiメソッドは文字列の分割のみを行う。
分割された文字列が配列に格納されてくるだけなのであまり使い道はなさそう。

詳細な情報が欲しい場合はparseメソッドを使用してMorphemeクラスの配列を受け取る必要がある。
$igo = new Igo('lib/ipadic'); // ipadicのパスをコンストラクタに渡す
$recipe = '砂糖20g、醤油大さじ2杯、だし1カップを合わせます。';
$result = $igo->parse($recipe);
    
// Output
echo "input:".$recipe."
"; echo "output:
"; foreach($result as $val){ print $val->surface.":".$val->feature.":".$val->start."
"; };

出力結果は下記の通り(見易くする為に出力結果は上記コードとは別に整形してます。)
スクリーンショット 2014 05 17 0 41 14
これで解析元の文章から数や名刺を抽出する事が出来る。
思ってたよりも簡単に導入出来てしまった。
インストール方法の2でダウンロードした辞書も自分で追加・編集が自由に出来るので、用途に合わせて単語に属性を追加しておくことでより精度の高い分析をする事が出来る。
とりあえず明日にでもプロトタイプ作ってみるか。