POPFileの最新版(cvsバージョン)を動かしてみる

本家のフォーラムを見ていると、POPFileの新バージョン(0.21.0)リリースが近いようだ。ロードマップでは1/30(January 30, 2003と書いてあるけど、おそらく2004の間違いでしょう)となっているから遅れ気味なのだろうけど、現在はインストーラの動作テスト中のようなので、近いうちにリリースされそうな感じだ。
リリースされる前に、どんな感じになるのか試してみようと思い、CVSから最新のソースコードを入手して動かしてみた。動作環境は、Mac OS X 10.3.2で、すでに0.20.1をインストールしている環境だ。0.20.1のインストールについては、id:amatubu:20031124を参照するか、id:amatubu:20031213#p3からインストールパッケージを入手してください。
もし以下の手順を試される場合は、CVSで公開されているバージョンは正式にリリースされたものではないので不具合などがある可能性があること、また、私が試した時点とこれを読まれた方が試してみる時点では、CVSに登録されているソースコードが変更されている可能性があるということを承知した上で行ってください。
それから、以下の手順はMac OS X 10.3.x(Panther)にXcodeをインストールした環境でしか有効ではありません。

  • 旧バージョン(0.20.1)との違い

旧バージョンと大きく違うところは、「使用しているデータベースシステムが変更になった」というところ。0.20.1では、Berkeley DBというデータベースシステムを使っていたが、0.21.0では、DBD-SQLiteというデータベースシステムと、DBIというデータベースに接続するためのインタフェースを使うように変更されている。ということで、まず、これらをインストールする必要がある。

  • DBIの入手とインストール

CPANからDBIを入手する。これを書いている時点でのバージョンは1.40。ダウンロードしたらどこかに展開して、Terminalで該当するフォルダに移動し、いつものようにperl Makefile.PL、make、sudo make installでインストールする。
(先にDBIをインストールしておかないと、DBD-SQLiteのインストールに失敗するようなので、順番に注意)

  • DBD-SQLiteの入手とインストール

同じくCPANからDBD-SQLiteを入手する。これを書いている時点でのバージョンは0.31。これもDBIと同じく、perl Makefile.PL、make、sudo make installの手順でインストールは完了だ。
ここまでで下準備は完了と。

(2004/2/23追記:MailParse.pmのリビジョンが1.187以降の場合、これら以外にHTML::Tagsetというモジュールも必要。詳しくは、id:amatubu:20040223#p2を参照)

  • CVSから最新のソースを入手する

手順はPOPFileのCVSのページに書いてあるとおりで、ソースをダウンロードするための適当なフォルダを作って(popfile-cvsとか、今POPFileを動かしているのとは別のフォルダにすること!)、Terminalでそのフォルダに移動し、

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/popfile login

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/popfile co modulename

とするだけ。今回は、POPFileの本体を入手したいので、modulenameのところは、「engine」と入力する。ログインの時にはパスワードを要求されるので、そのまま return を押すだけ。
すると、いろいろとメッセージが表示されて、POPFileの最新のソースを入手することができる。

  • 旧バージョン(0.20.1)からコーパスPOPFileが学習したデータ)や設定ファイルをコピーする

これで最新バージョンを動かすための準備が整ったのだけど、前のバージョンから設定やら学習した内容やらをコピーしないのはもったいない。データベースシステムは変更になったけれど、これもちゃんと変換してくれる。一度変換されたものは元には戻せないので、必ず「コピー」してから作業を行うこと!
コピーするのは、corpusフォルダ(POPFileが学習したデータが入っている)とpopfile.cfg(設定ファイル)ファイル。受信したメッセージの履歴はmessagesフォルダに入っているので、これはお好みで。
コピーする際に、少し注意すべきことがある。まず、popfile.cfg。今回のバージョンから、pop3(メールの受信)とhttp(ユーザインタフェース)だけでなく、nntp(ニュースグループ)、smtp(メール送信)用のプロキシが起動するようになっているので、そのポートを適宜設定する。管理者権限で動かす場合はなにもしなくても特に問題にはならないのだけど、うちのようにユーザ権限で動かしたい場合は、

nntp_port 30119
smtp_port 30025

といった行を追加する(ポートは1024以上であればなんでもいい)。また、0.20.1を動かしたまま新しいバージョンをテストしたい場合は、pop3_portとhttp_portも別の数字に変更する。うちでは3xxxxに統一した(0.20.1では2xxxxを使っていたので)。
次に、corpusフォルダ。通常は何の問題もなくコンバートできるのだろうけど、うちではすんなりとはいかなかった。その理由は、さらに古いバージョン(0.19.x)のコーパスの残骸が残っていたため。そのために、(おそらく)0.19.xのデータベースを0.21.0のデータベースにコンバートしようとしてしまったようだ。0.19.xまでのデータは、corpusフォルダのそれぞれのバケツ名のフォルダの中に「table」というファイルに保存されているから、もしこれが残っていたら削除しておく。(どうも、マグネット専用で使っているバケツ(だから当然学習している単語もない)があって、そのバケツの古いデータベースが残っていたようだ。同じような使い方をしている人は、要注意かも?)

  • POPFileを起動する(初回起動時には自動的にコーパスのコンバートが行われる)

さて、ここまできたら、POPFileの新バージョンを動かすことができる。Terminalで、perl popfile.plとするだけだ。
古いコーパスのデータをコピーしていれば、ここで自動的にコンバートされる。コンバート作業には、かなり時間がかかるようなので、しばらく待つ(iBook Dual USB 500MHz、Mac OS X、コンバート対象バケツ2個、単語数48,400、14,057、固有単語数11,155、5,272で、7分くらいかかった)。

POPFile Engine loading

Loading...
{core: config logger mq}
{classifier: bayes wordmangle}
{interface: html xmlrpc}
{proxy: nntp pop3 smtp}

POPFile Engine starting

Initializing...
{proxy: nntp smtp pop3}
{interface: xmlrpc html}
{classifier: wordmangle bayes}
{core: mq config logger}

Starting...
{proxy: nntp smtp pop3}
{interface: html}
{classifier: wordmangle

というところで止まるので、辛抱強く待つ。
コンバートが完了すると、POPFileが動き出す。corpusフォルダを見てバケツのフォルダの中身がすべて空になっていればうまくいっているはず。0.21では、コーパスの内容はすべて「popfile.db」に保存されることになる。
コーパスのコンバートと同様に、設定ファイル(popfile.cfg)も新しいバージョンにあわせて修正される。

  • 何が変わったのか?

ひとつは、先に書いたように、データベースが変更になった。まだあまり体感できていないのだけど、これによって動作速度が向上するようだ。信頼性も向上するのかも(うろ覚え)。
あとは、これも上に少し書いたけど、nntpとsmtpのプロキシが新たに追加された。nntpは、ニュースグループのメッセージについてもPOPFileでフィルタすることができるようになったということだと思うけど、smtpはなんだろう。自分が送るメールもフィルタされる?? 詳しく調べてないのでわかりません(ぉぃ)。
ほかにも、細かい部分が一部変更されている。例えば、X-Text-ClassificationやX-POPFile-Linkの各ヘッダをつけるかどうかを、バケツごとに選べるようになった。spamのバケツだけヘッダを追加、とかいうことができるようになったわけ。あまりメールの内容を変更してほしくないっていう場合には便利かもしれない。個人的には、全体でオン・オフできるだけでも十分だったけど。

  • それ以外になにか?

これも上に書いたけど、旧バージョンとポートを別にしておけば、同時に動かしてテストすることもできる。
0.20.1の時にあった、日本語環境でメールの分類がうまくいかないバグに体するパッチはマージされているようだ。だから、今回はとく日本語パッチを別に適用する必要はないはず。日本語メールの処理も今のところ特に問題ないようだ。
私が本家フォーラムに報告した件名が消えてしまったりする件については解決されていなかった。これはうちでは結構致命的なので、すでにパッチをあてた。(追記:日本時間2/21に修正されました。詳しくは、id:amatubu:20040221)
旧バージョンはcorpusフォルダとpopfile.cfgをバックアップすればよかったけど、新バージョンでは(たぶん)popfile.dbとpopfile.cfgをバックアップすることになるのだと思う。
動作速度が速くなったか……については入れたばかりなので不明。しばらくこのままでテストしてみようと思う。