« DEMITOSS 20/UBZ-LK20 | トップページ | scraping »

2009年5月28日 (木)

Windows + MeCab + Ruby

Ruby[2011/01/05 追記]
MeCab互換のIgoという形態素解析エンジンをRubyに移植しました。辞書さえ作ればRuby単体で動作します。詳細はこちら

Googleでも使われているらしいし、Mac OS X Leopardにもインストールされているという形態素解析エンジンMeCab

このMeCabをRubyから使おうとすると、通常はスクリプト言語用のバインディングを使うことになると思うんですけど、このRubyバインディングはWindows環境においてはそのままインストールできません。
C++のコンパイラがあればmakeできるらしいけど、まぁ、メンドいですな。どーしてもmakeを通したいヒトはMicrosoft Visual C++ Express Editionでも使えばいいんジャマイカ。


で、提供されているRubyバインディングにこだわらなければ、WindowsのMeCabをRubyから使用できます。

まず、IO.popenを使う方法。

clipWindows上のrubyでMeCabをちょっこっと使ってみたい

popenは実行ファイルをプロセスを起こして実行し、そのプロセスの標準入出力との間にパイプラインを確立するIOメソッド。MeCabは標準入力からの入力を解析し、標準出力に吐いてくれるので、popenを使えば操作できます。

解析の度にMeCabプロセスを起こすことになる(と思う)ので、リソースを消費するのと、性能が出ない(と思われる)のが難点と言えば難点。
でもまぁ、あるものを組み合わせて、サラりと解決するこのやり方はhackっぽくてケッコー好き。


解析の度にイチイチプロセス起こすなんてあり得ん!!という方は、DLLを直接呼び出すやり方をどうぞ。

clipwindowsのrubyからlibmecab.dllを呼び出す

DLLのインターフェイスが分かっていればRubyから呼び出すのは比較的簡単だし、一度ロードしてしまえばRubyスクリプトがメモリに乗っかってる間は呼び出せるので、毎回プロセスを起こすpopen方式よりはコストが低いと思われます。


先人達の知恵に感謝。


個人的には、無理してDLL呼び出ししなくても、popen方式でRubyバインディングと同じインターフェイスのラッパークラスをローカルに準備するのが吉じゃないかと。
開発はWindowsで運用はLinuxで、というシーンを考えたときに、(Rubyバインディングが使用できる)Linuxに乗せる際の手間がなくなるよう腐心した方が幸せな気がします。

|

« DEMITOSS 20/UBZ-LK20 | トップページ | scraping »

Ruby」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/16742/45151223

この記事へのトラックバック一覧です: Windows + MeCab + Ruby:

« DEMITOSS 20/UBZ-LK20 | トップページ | scraping »