tohokuaikiのチラシの裏

技術的ネタとか。

debianでbogofilter+mecab使おうとしたら、色々面倒

Debian(etch)を使ってるのが悪い。とっととlennyに移行しろよって。

http://homepage.mac.com/matsuan_tamachan/mail/ProcMailRc.html
http://homepage.mac.com/matsuan_tamachan/software/BogofilterNihongo.html
を参考に。

mecab-ruby

mecab-rubyの最新版をインストールしようとしたら、Makefileができないって怒られた。

# make
g++ -I. -I. -I/usr/lib/ruby/1.8/i486-linux -I. -DHAVE_MECAB_H -fPIC -Wall -g -fno-strict-aliasing -O2 -fPIC -c MeCab_wrap.cpp
MeCab_wrap.cpp: In function 'const mecab_node_t* mecab_node_t_begin_node_list(mecab_node_t*, size_t)':
MeCab_wrap.cpp:1814: error: 'struct mecab_node_t' has no member named 'sentence_length'
MeCab_wrap.cpp:1816: error: 'struct mecab_node_t' has no member named 'begin_node_list'
MeCab_wrap.cpp:1817: error: 'struct mecab_node_t' has no member named 'begin_node_list'
MeCab_wrap.cpp: In function 'const mecab_node_t* mecab_node_t_end_node_list(mecab_node_t*, size_t)':

とか・・・・

mecab -v すると、0.93だから http://sourceforge.net/projects/mecab/files/ から0.93持って来てREADMEのとおりやったらMakeできた。

rubymailとopen4

rubymail/open4が必要なので、gemでインストール。これまたDebian(etch)のgemは0.9.0で全然動かない。

ソースからインストールして、gem1.8でインストール。
gem1.8 install rmail
gem1.8 install open4
であっさりO.K


require 'rubygems'

さて、環境は整ったのでbogofilter-nihongo.rbをダウンロードして、/usr/local/bin当たりにおいて、chmod 755 したんだけど動かない。

/usr/local/bin/bogofilter-nihongo.rb:33:in `require': no such file to load -- open4 (Load Error)

って言われる。そーいえば、rubyのライブラリパスってどうなってるんだ?

ここによると、ロードパスを調べるには

$ ruby -e 'puts $:'

ってやるらしい。あぁ、変数$:に出てるのね。

/usr/local/lib/site_ruby/1.8
/usr/local/lib/site_ruby/1.8/i486-linux
/usr/local/lib/site_ruby/1.8/i386-linux
/usr/local/lib/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i486-linux
/usr/lib/ruby/1.8/i386-linux

って、そこにgemで入れたopen4とか無いし。

gemで入れたライブラリを使えるようにする方法があるはず。

require 'open4'じゃなくて、gem 'open4'ってやるといいよって情報がいっぱい出るけど、そもそもgemってmethodが無いって怒られる。

undefined method `gem' for main:Object (NoMethod Error)

このエラーメッセージでググるrailsの情報でrequire_gemじゃなくてgem使えって情報が出て、いや、そのgemが使えなくて困ってるんだから・・・・。

んがー、ってようやく見つけた。
http://haraita9283.blog98.fc2.com/blog-entry-285.html

# foo をインストールした場合、foo を require する前に require "rubygems" しておく。

おぉ、できた。

なんか、出力されない

うーん、なんでじゃろ?189行目で詰まってる。

  pid, stdin, stdout, stderr = Open4.popen4 "bogofilter #{bogoflag}"
#  stdin.puts body
  puts body

stdinって標準出力のなんかだとおもうんで、putsにしてやった。

でも、そうするとなんか機能してないよ!?

うーん。