Igo-php - PHPによる形態素解析プログラム

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

2. インストール方法
    アーカイブを解いて、取り出された内容を適当な場所にコピーして使用します。
    PHP の API として、他のプログラムから呼び出す場合は、コピー先をインク
    ルードパスに追加するか、既にインクルードパスとして指定してあるディレク
    トリに Igo.php と Igo/ 以下のファイルを配置します。

3. 辞書の作成方法
    Igo-php 自体は、辞書生成の機能を提供しません。従って、辞書生成に当たっ
    ては、本家のIgoを使用します。これについての詳細は、
    http://igo.sourceforge.jp/index.html#usage
    をご覧いただくとして、簡単な手順のみを以下に示します。

(1) MeCabプロジェクトが配布している(もしくはそれと互換性のある)辞書を入手
    する。これは、
    http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
    などから入手可能です。
(2) Igo本体を http://sourceforge.jp/projects/igo/releases/ から入手する。
(3) これらを用いて、
    $ java -cp igo-0.4.3.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP
    を実行する

この手順でカレントディレクトリに生成された ipadic/ 以下が辞書本体です。
これを、適当なディレクトリにコピーして使用してください。

4. 使用方法
(1) 単体で形態素解析機能を使用する方法
    $ php Igo.php <辞書へのパス> <文字列（またはテキストファイル）>
    を実行します。
    一番目の引数は形態素解析に用いる辞書の在処を指定します。
    二番目の引数は解析する文字列です。なお、ここにテキストファイルのパス
    を指定した場合は、テキストファイルの内容を解析します。
    辞書が /home/user/ipadic にある場合、

    $ php Igo.php /home/user/ipadic "すもももももももものうち"

    などとします。結果は以下の通りとなります。

    --
    すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ,0
    も      助詞,係助詞,*,*,*,*,も,モ,モ,3
    もも    名詞,一般,*,*,*,*,もも,モモ,モモ,4
    も      助詞,係助詞,*,*,*,*,も,モ,モ,6
    もも    名詞,一般,*,*,*,*,もも,モモ,モモ,7
    の      助詞,連体化,*,*,*,*,の,ノ,ノ,9
    うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ,10
    --

    Igo.php は 指定された文字列から判定して出力エンコードを決定します。従
    って、入力データがすべて ASCII であるような場合は、結果が文字化けする
    ことがあります。このような場合は環境変数 IGO_OUTPUT_ENCODING に適切な
    値をセットすることで、文字化けを回避することが出来ます。

(2) PHPプログラムから呼び出す場合
   a. 分かち書き
    <?php
    require_once 'Igo.php';

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

   b. 形態素解析
    <?php
    require_once 'Igo.php';

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

    単体で使用する場合と同様に、指定した文字列から適切なエンコードが判定出
    来ないような場合は、Igo クラスのコンストラクタの第2引数に、出力エンコー
    ドを明示的に指定することで回避できます。

    $igo = new Igo("/home/user/ipadic", "UTF-8");

5. REDUCE モード
    これは、実行時の使用メモリを調整するためのものです。
    既定では REDUCE モード ON で動作します。この状態で動作する時、Igo-php
    は、解析時に辞書ファイルに対してダイレクトアクセスします。
    OFFにすると、コンストラクタの実行時に、辞書を内部メモリに貯め込みます。
    解析処理自体は若干早くなりますが、使用メモリは増えます。
    比較的大量のテキストデータをバッチ処理で処理しなければならないような場
    合は、OFFにするとよいでしょう（しかし、このようなケースであれば、本家の
    Igo を使う方が、圧倒的に高速です）。
    REDUCE モードを OFF にするには、Igo.php 内で定義している define ディレ
    クティブを以下のように書き換えます

    define('IGO_REDUCE_MODE', false);  //true -> false にする

    なお、REDUCE モードを OFFで使用する場合、memory_limit パラメータを適切
    に設定するなどの考慮が必要です。

    例） ini_set("memory_limit", "1073741824"); //1024^3

6. バイトオーダーについて
    バイナリ辞書のバイトオーダーは、辞書を作成した環境によります。ビッグエ
    ンディアンな環境で生成された辞書はリトルエンディアンのプラットフォーム
    では使用できません。逆もまた然り。
    Igo-phpは、デフォルトでリトルエンディアン用の設定になっています。
    Intel系のプラットフォームであれば、このままでよいはずです。
    ビッグエンディアンのプラットフォームで利用する場合は、以下の設定内容を
    変更してみてください。

    define('IGO_LITTLE_ENDIAN', true); //true->Little endian, false->Big endian

7. ライセンス
    MITライセンスで配布いたします。詳しくは同梱の COPYING ファイルを参照の
    こと。なお、使用する辞書のライセンスに関しては、辞書配布元のそれに準ず
    ることとします。

8. 連絡先
    igo-php-devel@lists.sourceforge.jp

9. 参考リンク
    「Igo - Java形態素解析器」 http://igo.sourceforge.jp/index.html

