2010年7月9日金曜日

Coreserverに最初からMeCabが入ってた件

ひどい、今気がついた。
自力でMeCab入れて、MeCabのRuby用バインディング入れるところまではOK。でもいざ使ってみると毎回コア吐くし、意味がわからんと思ってたら…

なんか最初からMeCabとRuby用バインディング入ってるんですけど!
しかも最初から入ってるやつがCore吐いてるっぽい
(追記) Core吐いてる理由は、使っている辞書(UNIDIC)にあった可能性が。下に詳しく追記。

使えないもの入れてるんじゃねーよ…

というわけなので、デフォで入ってるMeCabのバージョンは最新の0.98だけど、自分で入れ直した方がよさそうです。




まずはMeCab本体
wget http://sourceforge.net/projects/mecab/files/mecab/0.98/mecab-0.98.tar.gz/download
cd mecab-0.98
./configure --prefix=$HOME/local --enable-utf8-only
make
make install

次は辞書
MeCab公式ではIPA辞書が推奨になってるけど、もうこの辞書はメンテされてないぽい。
UniDicがかなり良い感じなので個人的にはこっちがお勧め。表記の揺れにかなり強いし、関西弁でも思った通りに解析してくれます。

次はRuby用バインディング
wget http://sourceforge.net/projects/mecab/files/mecab-ruby/0.98/mecab-ruby-0.98.tar.gz/download
cd mecab-ruby-0.98

コンパイルする前に extconf.rb を編集
require 'mkmf'

mecab_config = with_config('mecab-config', 'mecab-config')
use_mecab_config = enable_config('mecab-config')

`mecab-config --libs-only-l`.chomp.split.each { | lib |
have_library(lib)
}

$CFLAGS += ' ' + `#{mecab_config} --cflags`.chomp
$LDFLAGS = '-L/virtual/himika/local/lib'    # ←この行を追加

have_header('mecab.h') && create_makefile('MeCab')
$CFLAGS +=~の下に、$LDFLAGS~の一行を追加

コンパイル
ruby extconf.rb
make
make install
最後に.bash_profileとか.bashrcで LD_LIBRARY_PATHに$home/local/libを通しておかないと、元から入ってるライブラリを参照して変なことになるので注意!

(追記) 
Core吐いてる理由はUNIDIC+CGIにあった模様。
Coreserverで元から準備してあるMeCabを使っても、自分でコンパイルした物を使っても、「CGI」で辞書に「UNIDIC」を使うと間違いなく落ちます。sshから使っても落ちないのに… 原因は不明(涙)

0 件のコメント:

コメントを投稿