■2006-03-02
* [Perl][メモ] Inline::CでMeCabのXSモジュール
Advanced Perl Programming (2nd ed)を読んでInline::C経由でXSモジュールをつくるのを試してみたくなりました。で、MeCabをWindowsでSWIGなしで動かすのにXSモジュールをつくってみることにしました。まずはText::MeCabにInline::Cを使ってガリガリコードを書いて、コンパイルが通ったらnocleanオプションで削除されずに残ったXSファイルをほぼそのまま利用します(Inline.hを移したりMODULE名とかは書き換えたり)。
できたのがこちらText-MeCab-0.03.tar.gz Text-MeCab-0.04.tar.gz(追記:2006-05-02 CPANに牧さんがちゃんとしたText::MeCabをアップしてくれましたので、公開を停止します)。完全にwindows用です。あしからず。MeCab Windows用バイナリをインストールしたときについてくるsdk/mecab.h、sdk/libmecab.lib、それとbin/libmecab.dllを利用します。mecab-0.90rc9&Visual C++ toolkit 2003でのみ確認しています。ついでにblibに生成されたファイルも用意しておきましたので、こちらはあとblib/arch/auto/Text/MeCabにlibmecab.dll(mecab-0.90rc9)を置けばそのまま動くでしょう。
# 使い方はswig版とだいたい同じ感じ my $mecab = new Text::MeCab "-l1", "-Ochasen"; print $mecab->parse($text); my $node = $mecab->parseToNode($text); # 次のnodeを得るにはメソッドnextを使います。
追記:Win32用ならppmにしてくれればいいのに やり方知らないので。きっと誰かがやってくれるんじゃないかしらと…… 折をみてやってみるかもしれません。
これ見て先を越された! D-5 出張版・・・ということと、なんかMeCabのインターフェースが気に入らないので書きました、Text::MeCab。XSです。SWIGいりません(まぁ、最近はすでにSWIGで展開してあるバージョンが配布されてるけど)。変なtie()インターフェース使いません。....
基本的にはnmakeしたあとにblibの中身を.tar.gzに固めて、nmake ppdとかすればいいだけみたいです。<br> あと、.ppdの中のCODEBASEに.tar.gzのファイル名を書いて、.tar.gzと.ppdを.zipに固めればいいっぽい気がします。<br><br>http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/faq/ActivePerl-faq2.html#how_to_make_ppm_distribution<br><br>#間違ってたらすみません。。。
なんとか出来ました。<br>ありがとうございます。