2008/01/31

PHPとMeCabでオートリンクの実装をする2

PHPとMeCabでオートリンクの実装をする の続きエントリー.

上ではMeCabを用いてオートリンクを行う仕組みを作ったので,これをPHPで使うのがこのエントリーの目的.

まず,ウノウではPHPのMecab拡張モジュールを用いている.
ただ俺はPHPからコマンドプロンプトに処理を投げる方式を用いる.
利用する関数はshell_execです.

ポイントはコマンドプロンプトから入力したコマンド
mecab -d.
にある.
このコマンドのドットがカレントディレクトリを指しているので,PHPから利用する場合は絶対パス指定をしてやればOK.

つまり
mecab -d "C:\Program Files\MeCab\dic\autolink"
と同義であるということ.

これを踏まえて簡単なPHPで実装する.

<?php
  echo mecab("京都に行きたいな");

  function mecab($input){
    $mecab = '"C:\Program Files\MeCab\bin\mecab.exe"';
    $mecab2 = '"C:\Program Files\MeCab\dic\autolink"';
    $str= shell_exec('echo '.$input.' '.$mecab." -d ".$mecab2);
    return $str;
  }
?>

で実装ができる.
ソースは適宜変更するべし.

以上.

PHPとMeCabでオートリンクの実装をする

ウノウラボ
PHPとMecabでキーワード自動リンクを実装する(以下,ウノウ)
を参照して,PHPとMeCabを用いたオートリンクの実装をWindowsで試みる.

知識不足のせいでいろいろ戸惑った箇所があったので,俺のようなダメ院生でも理解できるように書く.アドバイスを頂いた研究室の先輩には大感謝.

------

MeCabインストールに関しては割愛.
今回俺は C:\Program Files\MeCab にインストールをした.

-----

自動リンク用辞書の作成
ここはウノウを参照して同じものを作成する.

  • 単語辞書(url.csv)
  • 連接表(matrix.def)
  • 未知語の文字定義(char.def)
  • 未知語用品詞定義(unk.def)
  • 設定ファイル(dicrc)
設定ファイル(dicrc)を普通に作ると.txtになるので注意.
拡張子はありません.
俺は C:\Program Files\MeCab\dic\ipadic の中のdicrcをコピーして中を書き換えた.
もしくは,コマンドプロンプトから C:\Program Files\MeCab\dic\autolink>ren dicrc.txt dicrc とリネームしてもOK.

-----

さて,これらのファイルを用いて辞書のコンパイルを行う.
ウノウの例を見てみると1行目に
# /usr/libexec/mecab/mecab-dict-index -f utf-8 -c utf-8
とある.正直意味不明だった.
この例はLinuxで行ってるため,今回のようにWindowsで行う場合は以下の方法を試す.

まず,1行目にあるmecab-dict-indexに注目する.
C:\Program Files\MeCab\bin の中にmecab-dict-index.exeがあることを確認して欲しい.
他にはmecab.exeなどもある.

ここで確認しておく.
MeCabを使うためのPATHは通してあるだろうか?
俺のインストール先を例にするならば c:\program files\mecab\bin とPATHを通す.
これ必須.

試しにプロンプトでmecab-dict-indexと入力してみる.

C:\>mecab-dict-index
'mecab-dict-index' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


と出るのであれば,PATHが通ってない.
コマンドプロンプトを立ち上げたり,PATHを見直してみることをお薦めする.

C:\>mecab-dict-index
dictionary_compiler.cpp(70) [param.load(DCONF(DICRC))] no such file or directory: .\dicrc

と表示されるならOKである.

ということで,コンパイルをはじめる.
今回作成したautolinkフォルダまでカレントディレクトリを移動させる.
そこで,以下のコマンドを使用.

C:\Program Files\MeCab\dic\autolink>mecab-dict-index -f shuft-jis -c shuft-jis
エンコードは適宜
C:\Program Files\MeCab\dic\autolink>mecab-dict-index -f UTF-8 -c UTF-8
のように変更すること.

すると何かぐちゃぐちゃと表示された後,最後に「done!」と表示されれば成功だ.
autolinkフォルダのファイルが増えていることを確認しよう.

--

コンパイルに成功したところで,さっそく使ってみる.
コマンドは
C:\Program Files\MeCab\dic\autolink>mecab -d .
である.
その後待機状態になるので入力文を入力する.

C:\Program Files\MeCab\dic\autolink>mecab -d.
京都でムフフなことしたいどすえ
京都でムフフなことしたいどすえ


大成功である.
ちなみに mecab -d . のドットはカレントディレクトリを指すので重要.
ゴミと思って入力し忘れないように.


MeCabを用いたオートリンクの実装に成功した.
ウノウの例では,PHPのMeCab拡張モジュールを用いてPHPの実装を行っているが,今回はコマンドプロンプトを直接介して処理を行う.

これに関しては以下の別エントリーで解説します.
PHPとMeCabでオートリンクの実装をする2

--

参考リンク
http://labs.unoh.net/2008/01/keyword-autolink-using-php-and-mecab.html
http://mecab.sourceforge.net/dic-detail.html
http://d.hatena.ne.jp/tokushiman/20071024/1198588473
http://ratti.kachoufuugetu.net/diary/diary_archive/0710.html(10/25(10/25)の記事

2008/01/22

RDFGravityに投げてみた

今日は他研究室の先輩に研究のお話をして頂いた.
大変貴重なお話や提案をして頂き,研究が一歩前進したと思う.
ありがとうございました.

--
今構築しているオントロジーをRDF Gravity(RDFファイル可視化ツールのようなもの)に投げてみたら凄いことになった笑