CentOS ChaSen Ruby

仮想マシンホストのOSへ直接インストールすると、仮想マシンホストを変更したときに環境再構築となるのでゲスト仮想マシンとしてCentOSを用意し、そこ へ ChasenとRubyをインストールして使えるようにしてみた。

まずCentOSへ必要なパッケージをインストールしておく。手元の環境では、これらをインストールすれば充分でした。他にもあるかもしれません。

yum install gcc-c++
yum install autoconf
yum install automake
yum install texinfo
yum install zlib zlib-devel

ホームディレクトリで src (ソースコード置き場)、applications(アプリケーション置き場)を用意。普通はbinかもしれませんが、アプリケーション名ディレクトリをおくことも多いので、この名前にしています。今回の例では、よく使うコマンド類は ${HOME}/applications/bin に置かれることになります。まずはDartsを入手してインストール。

mkdir ${HOME}/src
mkdir ${HOME}/applications
cd ${HOME}/src
wget http://www.chasen.org/~taku/software/darts/src/darts-0.32.tar.gz
tar xzf darts-0.32.tar.gz 
cd darts-0.32
./configure --prefix=${HOME}/applications | tee configure.log 2>&1
make | tee make.log 2>&1
make install | tee make-install.log 2>&1 

次に libiconv をインストール。iconvコマンドがあるから、libiconv もあるかと思ったら、別途ソースからコンパイルして用意する必要があるようです。運用サーバではパッケージを使うのが一番楽ですが、開発マシンなどでは、なければソースからコンパイルして対応というのが一番汎用性があって、結局時間がかからないことが多い気がします。そういう意味でオープンソースはやはり便利。

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
tar xzf libiconv-1.13.tar.gz 
cd libiconv-1.13
./configure --prefix=${HOME}/applications | tee configure.log 2>&1
make | tee make.log 2>&1
make install | tee make-install.log 2>&1 

ちなみにiconvはglibc-commonに含まれる。iconvconfigはglibcに含まれる。

$ rpm -ql glibc-common|grep iconv
/usr/bin/iconv
$ rpm -ql glibc|grep iconv
/usr/sbin/iconvconfig
/usr/sbin/iconvconfig.i686

次に chasen。http://chasen-legacy.sourceforge.jp/ から chasen-2.4.4.tar.gz取得しました。LDFLAGSを使ってライブラリのありかを指定している点に注意。

tar xzf chasen-2.4.4.tar.gz 
cd chasen-2.4.4
LDFLAGS="-L${HOME}/applications/lib" \
./configure --prefix=${HOME}/applications \
  --with-darts=${HOME}/applications/include
make | tee make.log 2>&1
make install | tee make-install.log 2>&1

あとで使うので、先にtoUtf8.shというスクリプトを紹介しておきます。EUC-JPのファイルをUTF-8へ変換するスクリプトです。CentOSには iconv があるので、それを使うようにしています。dicファイルやchaファイルを変換する必要があるので、そのときに使います。

#!/bin/sh
for suffix in cha dic
do
  for f in `ls *.$suffix`
  do
    if [ -f $f ]; then
      echo $f
      iconv -f euc-jp -t utf-8 $f > tmpfile
      mv tmpfile $f
    fi
  done
done
exit

http://sourceforge.jp/projects/ipadic/ からIPA辞書をダウンロード。手に入れたファイルを展開するとipadic-2.7.0ができます。そのまま使うわけではないので名前をipadic-2.7.0-utf8に変更してから、もろもろ作業。あらかじめ作ってあった toUtf8.shをコピーして使っています。

mv ipadic-2.7.0 ipadic-2.7.0-utf8
cd ipadic-2.7.0-utf8/
PATH=${HOME}/applications/bin:${PATH} ./configure --prefix=${HOME}/applications/ipadic
cp -a ../toUtf8.sh .
./toUtf8.sh
`${HOME}/applications/bin/chasen-config --mkchadic`/makemat -i w
`${HOME}/applications/bin/chasen-config --mkchadic`/makeda -i w chadic *.dic
mkdir ${HOME}/applications/etc
make install | tee make-install.log 2>&1 
iconv -f euc-jp -t utf-8 ${HOME}/applications/etc/chasenrc > \
  ${HOME}/applications/etc/chasenrc.utf8
mv  ${HOME}/applications/etc/chasenrc.utf8 \
  ${HOME}/applications/etc/chasenrc
echo "文字コード変更のテスト。" | ${HOME}/applications/bin/chasen -i w 

実行結果は次の通り。

文字 モジ 文字 名詞-一般
コード コード コード 名詞-一般
変更 ヘンコウ 変更 名詞-サ変接続
の ノ の 助詞-連体化
テスト テスト テスト 名詞-サ変接続
。 。 。 記号-句点
EOS

rubyのインストール。いろいろ試しにライブラリはきままに入れる予定なので、CentOSにいれてあるパッケージ版は使わない。また、Ruby/ChaSenとかが、変なふうにインストールされたら面倒なので、とにかく簡単に戻せるように別途インストール。いざとなったら入れ直し。手元で作成したサンプルが多い1.8.7を選択。

cd ruby-1.8.7-p334
./configure --prefix=${HOME}/applications/ruby-1.8.7
make | tee make.log 2>&1
make install | tee make-install.log 2>&1
${HOME}/applications/ruby-1.8.7/bin/ruby --version

次は Ruby/ChaSen。http://raa.ruby-lang.org/project/ruby-chasen から chasen1.7.tar.gz をダウンロード。ChaSenと間違えないように、展開したディレクトリ名は変更。

mv chasen1.7.tar.gz ruby-chasen-1.7.tar.gz
tar xzf ruby-chasen-1.7.tar.gz
mv chasen1.7 ruby-chasen-1.7
cd ruby-chasen-1.7/
${HOME}/applications/ruby-1.8.7/bin/ruby extconf.rb \
   --with-chasen-dir=${HOME}/applications
make | tee make.log 2>&1
make install | tee make-install.log 2>&1

テストプログラムの作成と実行

mkdir -p ${HOME}/workspace/ruby/ruby-chasen
cd ${HOME}/workspace/ruby/ruby-chasen
vi test.rb
${HOME}/applications/ruby-1.8.7/bin/ruby test.rb

テストプログラム test.rb の内容は次の通り。

# -*- coding: utf-8 -*-
require "chasen.so"
#Chasen.getopt("-F", '(%BB %m %M)\n', "-j")
Chasen.getopt("-F", '(%BB %m %M)\n', "-i", "w")
puts Chasen.sparse("こんにちは。")
puts Chasen.sparse("今日はいい天気です。こんにちは。")

実行結果は次の通り。

(感動詞 こんにちは こんにちは)
(句点 。 。)
EOS
(副詞可能 今日 今日)
(係助詞 は は)
(自立 いい いい)
(一般 天気 天気)
(助動詞 です です)
(句点 。 。)
(感動詞 こんにちは こんにちは)
(句点 。 。)
EOS

■関連リンク

■関連書籍 … 関連書籍があるか調べて見ましたが、形態素解析をRubyでやる人は少ないのですかね。こういうのをやる人はプログラミング言語にはあまり依存しないだけかもしれませんが… Rubyにこだわらず参考となりそうな書籍を一覧にしてみました。





同じカテゴリの記事: Linux