2013年1月22日火曜日

igo-phpを使って形態素解析をする方法

XAMPP for MacのPHPでMecabを使おうとして挫折した愚か者のメモ。

形態素解析をもっと簡単に使える方法を探す
igo-phpを発見。

READMEによると、

これは「Igo - Java形態素解析器」の PHP による実装です。 Igo は、MeCab由来の辞書フォーマットを用い、ほぼ MeCab と同様の解析結果を提供する形態素解析プログラムです。 Igo-phpは、Igoと同様の形態素解析と分かち書きの機能を提供します。

とのこと。素晴らしい。ちなみにigoの本家はこちら

早速、READMEに書かれている手順でインストール。


igo-phpのダウンロード
展開後、好きな場所にコピーし、php.iniのinclude_pathに追加する。

igo本体のダウンロード
mecabの辞書をダウンロード
jarファイルと辞書フォルダを両方共ホームディレクトリにコピー。
以下のコマンドを入力する。

$ java -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP

と、何やらエラー

### Build word trie
### Build word dictionary
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuilder.append(StringBuilder.java:119)
at net.reduls.igo.dictionary.build.WordDic.buildWordInfo(Unknown Source)
at net.reduls.igo.bin.BuildDic.main(Unknown Source)

このエラーはJava heap spaceが不足していることが原因だそうなので、javaコマンドに-Xmxオプションで適当なヒープサイズ(最大値)を指定しておく。
-Xmx1024mを追加。
再度、実行。

java -Xmx1024m -cp igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP

### Build word trie
### Build word dictionary
### Build matrix
### Build char-category dictionary
DONE

出来たっぽい。
あとは、作成されたipadicフォルダを適当な場所にコピーすれば、辞書が使用可能に。

とりあえず、PHPから形態素解析をしてみる。
<?php
    require_once 'Igo.php';

    $igo = new Igo("/home/user/ipadic");
    $result = $igo->parse("すもももももももものうち");
    print_r($result);
    ?>

実行結果

Array
(
    [0] => Morpheme Object
        (
            [surface] => すもも
            [feature] => 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
            [start] => 0
        )

    [1] => Morpheme Object
        (
            [surface] => も
            [feature] => 助詞,係助詞,*,*,*,*,も,モ,モ
            [start] => 3
        )

    [2] => Morpheme Object
        (
            [surface] => もも
            [feature] => 名詞,一般,*,*,*,*,もも,モモ,モモ
            [start] => 4
        )

    [3] => Morpheme Object
        (
            [surface] => も
            [feature] => 助詞,係助詞,*,*,*,*,も,モ,モ
            [start] => 6
        )

    [4] => Morpheme Object
        (
            [surface] => もも
            [feature] => 名詞,一般,*,*,*,*,もも,モモ,モモ
            [start] => 7
        )

    [5] => Morpheme Object
        (
            [surface] => の
            [feature] => 助詞,連体化,*,*,*,*,の,ノ,ノ
            [start] => 9
        )

    [6] => Morpheme Object
        (
            [surface] => うち
            [feature] => 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
            [start] => 10
        )

)
以上。

0 件のコメント:

コメントを投稿