読者です 読者をやめる 読者になる 読者になる

igo-PHPを使って形態素解析をやってみる

形態素解析と言うとMecabやらChasenやらKuromojiやらを使ってやる場合が多いんだけど、いざPHPでやろうとするとそれぞれにバインディングを準備したりして意外と面倒臭い。

ぼやぼや探していると、igo-PHPというお手軽そうなものがあるので、以下のサイトを参考に試してみる。

igo-PHP

ドキュメントを読む感じだと、Mecab用の辞書を利用したJavaCommon Lisp用のigoという形態素解析器をPHPに移植したものらしい。ので辞書フォーマット及び解析結果は、ほぼMeCab互換。らしい。ちなみに、PHPの他にもPytonやRubyなどの実装もあるっぽい。

Gitのレポジトリはこれ

さわってみた感想

PHPだと形態素解析するにも関連するツールを入れて、準備して云々と手間がかかってたんだけど、igo-PHPの場合は辞書の準備くらいでできてしまうのでかなりお手軽な感じでできてしまう。もちろん、PHPの世界で形態素解析までするような事案がどこまであるかと言われれば若干悩むけど、これだけお手軽ならちょっと組み込む的な使い方も色々できそう。

インストール

インストールは、辞書のダウンロード、辞書の準備、igo-PHPの準備の3段階に分けられる。 詳しくは、igo-PHPのREADMEを参照。

ちなみに、辞書をコンパイルする際「EUC-JP」を指定していてUTF8で使いたい場合どうするの?って思うけど、PHP内で使用するエンコードを指定するので、EUC-JP指定のままで問題なし。

igo-PHP自体は、Composerでもインストールできるっぽいのだけど、さっき試したときはプログラムにSyntax Errorがあってそのままでは実行できないので、素直にGitのsiahr/igo-phpからcloneしておく。

実行する

辞書の準備とigo-PHPのインストールが終わったら以下のような感じで実行すると、携帯解析の結果が出力される。

 <?php
    require_once 'igo-php/lib/Igo.php';

    $igo = new Igo("dic/ipadic", "UTF-8");
    $text = file_get_contents("sample.txt");
    
    // 分かち書きのみの場合は wakati() を使う
    // $result = $igo->wakati($text);
    
    // 品詞情報なども合わせて取得する
    $result = $igo->parse($text);

    print_r($result);

結果は以下

$ php index.php
 Array
(
    [0] => Morpheme Object
        (
            [surface] => 本日
            [feature] => 名詞,副詞可能,*,*,*,*,本日,ホンジツ,ホンジツ
            [start] => 0
        )

    [1] => Morpheme Object
        (
            [surface] =>
            [feature] => 助詞,係助詞,*,*,*,*,は,ハ,ワ
            [start] => 2
        )

    [2] => Morpheme Object
        (
            [surface] => 晴天
            [feature] => 名詞,一般,*,*,*,*,晴天,セイテン,セイテン
            [start] => 3
        )

    [3] => Morpheme Object
        (
            [surface] => なり
            [feature] => 助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ
            [start] => 5
        )

)