さくらのレンタルサーバでMecabを使用する
概要
さくらインターネットのレンタルサーバで、Ruby経由でMecabを使おうと思い、いろいろハマりながらインストールした際のログです。
入れたものは
・MeCab0.98
・mecab-naist-jdic-0.6.1-20090630
・Ruby-1.9.1-p243
・mecab-ruby-0.98
以上4ソフトです。
mecab-rubyを入れる為に、わざわざHOMEの下にrubyを入れています。
インストール先は、$HOME/usr/loacalにしています。ここだとNAISTの辞書を入れるのが楽だったからです。
入れたものは
・MeCab0.98
・mecab-naist-jdic-0.6.1-20090630
・Ruby-1.9.1-p243
・mecab-ruby-0.98
以上4ソフトです。
mecab-rubyを入れる為に、わざわざHOMEの下にrubyを入れています。
インストール先は、$HOME/usr/loacalにしています。ここだとNAISTの辞書を入れるのが楽だったからです。
インストールする前に
現在(2009/10/11)、さくらのレンタルサーバにはMeCabが既にインストールされているようです。
私の環境は、こんな状態でした。
全てのサーバに同じものが入っているかは不明です。
私の環境は、こんな状態でした。
$ which mecab
/usr/local/bin/mecab
$ /usr/local/bin/mecab -v
mecab of 0.98
$ ls -l /usr/local/bin/mecab
-r-xr-xr-x 1 root wheel 3644 Feb 2 2009 /usr/local/bin/mecab
$ ls /usr/local/lib/mecab/dic/
ipadic
見ての通り、2009年の2月にインストールされたようです。辞書はipadicが入っています。mecab-rubyは入っていませんでした。全てのサーバに同じものが入っているかは不明です。
注意点
下記インストール手順を使用した場合、うちで実行した限りでは、ログインしてRubyファイルを叩く場合は自前で入れたMeCabが使われるのですが、CGIから実行すると/usr/local/bin/mecabの方が使われていました。
どうやって回避すれば良いのだろう。とりあえず辞書が気になるだけなら、Taggerする際にユーザ辞書で指定して調整すれば良いので、まぁ、いいかなと。
どうやって回避すれば良いのだろう。とりあえず辞書が気になるだけなら、Taggerする際にユーザ辞書で指定して調整すれば良いので、まぁ、いいかなと。
MeCabのインストール
Mecabは普通に--prefixをHOMEディレクトリ配下に指定しておけば動きます。
【参考サイト】Mecab公式サイト
http://mecab.sourceforge.net/
$ mkdir work
workディレクトリ作るのはただの私の癖です
$ cd work
$ wget http://sourceforge.net/projects/mecab/files/mecab/0.98/mecab-0.98.tar.gz/download
URLは変わっていたり最新版が出ているかもしれません
http://sourceforge.net/projects/mecab/files/
などで確認してください
$ tar xzvf mecab-0.98.tar.gz
解凍
$ cd mecab-0.98
$ ./configure --prefix=$HOME/usr/local --with-charset=utf8 --enable-utf8-only
インストール先に$HOME/usr/localを指定しておきます。
charasetはUTF-8固定で設定していますが、この辺は趣味です。
$ make
$ make install
これでmecab本体のインストールは完了です。
$ ~/usr/local/bin/mecab -v
試しにバージョンを表示してみましょう。
入れたMeCabのバージョンが出れば成功です。
$ PATH=/home/#{ユーザ名}/usr/local/bin:$PATH
binの位置をPATHに追加しておきます
$ vi ~/.profile
最終行に追加(既に居たら修正)
setenv PATH $HOME/usr/local/bin:$PATH
setenv LD_LIBRARY_PATH $HOME/usr/local/lib
【参考サイト】Mecab公式サイト
http://mecab.sourceforge.net/
NAIST辞書のインストール
次に辞書をインストールします。
ipadicは元々さくらのレンタルサーバに入っているようなので、ここではNAISTの方を入れてみます。
prefixを指定して入れようとすると途中で落ちたので、make install時にDESTDIRを指定することで入れています。
http://sourceforge.jp/projects/naist-jdic/
ipadicは元々さくらのレンタルサーバに入っているようなので、ここではNAISTの方を入れてみます。
prefixを指定して入れようとすると途中で落ちたので、make install時にDESTDIRを指定することで入れています。
$ cd ~/work
$ wget "http://sourceforge.jp/frs/redir.php?m=globalbase&f=%2Fnaist-jdic%2F40865%2Fmecab-naist-jdic-0.6.1-20090630.tar.gz"
辞書のバージョンも更新されている可能性があるので、ダウンロード先は下記のページを参照。
http://sourceforge.jp/projects/naist-jdic/releases/40865
$ tar xzvf mecab-naist-jdic-0.6.1-20090630.tar.gz
解凍。ファイル名が違う場合は適宜読み替えてください。
$ cd mecab-naist-jdic-0.6.1-20090630
$ ./configure --with-dicdir=/usr/local/lib/mecab/dic/naist-jdic --with-charset=utf8
辞書の場所を指定して、文字コードはUTF-8に設定しています
$ make
$ make DESTDIR=$HOME install
DESTDIRにHOMEを指定しておくと、HOME以外の領域にファイルを置こうとしなくなる為、エラーになりません。prefixで指定した場合は、一時ファイルか何かを/usr/localに作ろうとしてエラーになりました。
$ vi ~/usr/local/etc/mecabrc
MeCabのシステム辞書の設定を変更します
変更内容
dicdir = /home/mwsoft/usr/local/lib/mecab/dic/ipadic
↓
dicdir = /home/mwsoft/usr/local/lib/mecab/dic/naist-jdic
$ echo test | ~/usr/local/bin/mecab
上記コマンドで動いているかテストします
それっぽい結果が返ったら成功です
UTF-8に設定しているので、おそらくコンソール上では文字化けしてると思います
【参考サイト】NAIST Japanese Dictionaryhttp://sourceforge.jp/projects/naist-jdic/
Rubyのインストール
レンタルサーバでは、自前でgemとか言うことができない為、Ruby本体を入れてしまいます。
本体を入れておけば、バージョンも好きに変えられますし、入れたいモジュールが入れられるので便利です。
本体を入れておけば、バージョンも好きに変えられますし、入れたいモジュールが入れられるので便利です。
$ cd ~/work/
$ wget ftp://ftp.iij.ad.jp/pub/lang/ruby/1.9/ruby-1.9.1-p243.tar.gz
落とす場所は下記URL参照
http://www.ruby-lang.org/ja/downloads/
$ tar xzvf ruby-1.9.1-p243.tar.gz
解凍
$ cd ruby-1.9.1-p243
$ ./configure --prefix=$HOME/usr/local/ruby
ここは$HOME/usr/localでも良かった気もしています。
自宅PCの/usr/local配下のパス構成になんとなく合わせてしまいました。
$ make
$ make install
mecab-rubyのインストール
普通にインストールしたら動かなくて、若干ハマりました。
回避策を含めて書きましたが、環境依存のバグのようなので、使用している環境やバージョンによっては下記のような面倒な手順は取らなくても良いかもしれません。
回避策を含めて書きましたが、環境依存のバグのようなので、使用している環境やバージョンによっては下記のような面倒な手順は取らなくても良いかもしれません。
$ cd ~/work/
$ wget http://sourceforge.net/projects/mecab/files/mecab-ruby/0.98/mecab-ruby-0.98.tar.gz/download
ダウンロード先はこの辺参照。
http://sourceforge.net/projects/mecab/files/
$ tar xzvf mecab-ruby-0.98.tar.gz
解凍
$ cd mecab-ruby-0.98
$ set RUBYLIB=$HOME/usr/local/ruby/lib
$ ~/usr/local/ruby/bin/ruby extconf.rb --with-opt-lib=$HOME/usr/local/ruby/lib
インストール先を$HOME配下に指定
このまま入れるとうちの環境ではバグったので、Makefileに以下の修正を加える
$ vi Makefile
変更箇所
LIBS = -lstdc++ -lthr -lrt -lcrypt -lm -lc
↓
LIBS = -lstdc++ -lthr -lrt -lcrypt -lm -lc -L/usr/local/lib -lmecab
$ make
$ make install
CGIで試してみる
$ cd ~/www
$ mkdir test
$ cd test
$ touch .htaccess
$ vi .htaccess
記述内容
AddHandler cgi-script rb
$ chmod 755 test.rb
$ vi test.rb
記述内容
#!/home/#{ユーザ名}/usr/local/ruby/bin/ruby
require 'MeCab'
print "Content-Type: text/html; charset=utf-8\n\n"
m = MeCab::Tagger.new
print m.parse("test")
#{ユーザ名}は適宜書き換えてください
tagger.newする時にユーザ辞書を指定したい場合は以下のようにします。
m = MeCab::Tagger.new("-u #{辞書ファイルのパス}")
CGIから使用する場合は、ユーザの辞書の文字コードは、入っているMeCabの設定に合わせる必要があります。多分、EUC-JPです。
まとめ
イマイチ思っていた形でインストールは出来ませんでしたが、とりあえず動くようにはなりました。
CGIから使用する場合は、MeCabを直接叩いて戻り値をパースするコードでも書けば最低なんとかなるのですが、それも処理効率的にアレですね。
CGIから使用する場合は、MeCabを直接叩いて戻り値をパースするコードでも書けば最低なんとかなるのですが、それも処理効率的にアレですね。