Create  Edit  Diff  Liam  Index  Search  Changes  History  Source  RSS  wikifarm  Login

ruby-chasen

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 がインストールされていた。


コメント、ぷりぃず

(bbs plugin is disabled).
Last modified:2003/07/14 21:39:37
Keyword(s):[ruby] [chasen] [cygwin] [mingw32] [mingw] [ipadic]
References: