ruby-chasen
RAA:ruby-chasen ChaSen 用 Ruby binding
ChaSen のビルド
CygwinでChaSen
chasen-2.2.9 を使う。Linuxで Darts のコンパイル他ではまったので日和ってみた。
6/2追記:Cygwinでは成功したが、案の定 MinGWではコンパイル出来なかった>Darts
ChaSen自体のビルドは特に問題なかったので省略。INSTALL-ja に書かれてる通り。とりあえず /usr/local 以下にインストールまでしておく。chasenコマンドを確認しとくとか。
Mingw32でChaSen
% tar xfvz chasen-2.2.9.tar.gz % cd chasen-2.2.9 % CC='gcc -mno-cygwin' CXX='g++ -mno-cygwin' ./configure \ --disable-shared --target=i686-mingw32 \ % vim lib/Makefile chasen/Makefile
DEFS = ... の最後に『-DNO_SERVER』 を追加。 ./configure の前に DEFS=-DNO_SERVER で良さそうなものだが。
% make % make install
ipadic のビルド
% tar xfvz ipadic-2.5.1.tar.gz % cd ipadic-2.5.1 % ./configure && make % make install
Cygwinで作った辞書は当然MinGW32版からも使える。中身は EUC-JPなのに注意。
ruby-chasen
Cygwin版
extconf.rb が何か変なので適当に。
% ruby -rmkmf -e 'dir_config("chasen","/usr/local"); \
create_makefile("chasen") if have_library("chasen")'
checking for main() in -lchasen... yes
creating Makefile
% make
% ruby -I. sample/test.rb|nkf -s
(感動詞 こんにちは こんにちは)
(句点 。 。)
EOS
% make install
nkf -s は、コンソール(DOS窓)が Shift_jis な出力のため。
MinGW32版
Cygwin版と同様だがビルドしといたライブラリの場所を --with-chasen-lib で指定してやる。
% i686-mingw32-ruby -rmkmf -e \
'dir_config("chasen"); \
create_makefile("chasen") if have_library("chasen")' \
-- --with-chasen-lib=../chasen-2.2.9/lib/.libs
checking for main() in -lchasen... yes
creating Makefile
% make
% cp /usr/local/etc/chasenrc .
% vi chasenrc
(GRAMMAR ...)の行のChaSenの辞書の場所をMinGW32が理解出来る形式に変更しとく。Cygwinにおける /usr/local/share/chasen/dic/ipadic は
% cygpath -w /usr/local/share/chasen/dic/ipadic C:\cygwin\usr\local\share\chasen\dic\ipadic
で判る。
% CHASENRC=./chasenrc i686-mingw32-ruby -I. sample/test.rb|nkf -s (感動詞 こんにちは こんにちは) (句点 。 。) EOS
MSWin32版
MinGW32で作ったファイルをコピーして Makefileを書き換える。
% mkdir rbchasen1.6-mswin; cd rbchasen1.6-mswin % cp -r ../rbchasen1.6/* . % vi Makefile -RUBY_SO_NAME = mingw32-$(RUBY_INSTALL_NAME)16 +RUBY_SO_NAME = mswin32-$(RUBY_INSTALL_NAME)16 % make gcc -mno-cygwin -DIMPORT -DNT -D__NO_ISOCEXT -Os -march=i686 -I. -IC:/CYGWIN/USR/LOCAL/I686-PC-MINGW32/lib/ruby/1.6/i686-mingw32 -I. -c -o chasen.o chasen.c dllwrap --target=mingw32 --as=as --dlltool-name=dlltool --driver-name=gcc -mno-cygwin --export-all -s --def=chasen.def -L. -LC:/CYGWIN/USR/LOCAL/I686-PC-MINGW32/lib -o chasen.so chasen.o -L. -lmswin32-ruby16 -lchasen -lcrypt -lwsock32 -lmsvcrt % CHASENRC=chasenrc i586-mswin32-ruby -I. sample/test.rb |nkf -s (感動詞 こんにちは こんにちは) (句点 。 。) EOS
注意点
全般的な設定を chasenrc ファイルに、辞書ファイルの場所をその chasenrcファイルの GRAMMARに記述する必要がある。
chasenrc ファイルは形態素解析プログラムに必要な様々な選択肢を 定義するために用いられる.これらの定義は通常,REFIX/etc/chasenrc に記述されるが,利用者のホームディレクトリの‘.chasenrc’ という ファイルに記述することもできる.起動時オプションなどによって chasenrc ファイルを指定することもできる.具体的には次のような 優先順位でchasenrc ファイルが読み込まれる. 1. 起動時に-r オプションで指定されたファイル. 2. 環境変数CHASENRC で指定されたファイル. 3. 利用者のホームディレクトリにある.chasen2rc. 4. 利用者のホームディレクトリにある.chasenrc. 5. PREFIX/etc/chasenrc(デフォルトではインストールされない). 設定項目一覧を以下に示す.このうち,「PATDIC」または「SUFDIC」, 「未知語品詞」,「品詞コスト」は必ず指定しなければならない. (chasen付属のmanual-j.pdfより抜粋)
よって、コマンドラインから環境変数CHASENRCを使うか、スクリプト内でChasen.getopt にて -r でファイル指定をする必要がある。
なお、Cygwin環境では /usr/local/etc/chasenrc がインストールされていた。
Keyword(s):[ruby] [chasen] [cygwin] [mingw32] [mingw] [ipadic]
References: