2003年10月06日

bogofilterインストール記

今年の春ごろから、ものすごい量のSPAMメールが毎日届くようになって、メールを読むのも書くのも最近は億劫になってしまっていたんですが、SPAMメールを除去するフィルタの一つ、bogofilter というのを使ってみることにしました。

* 環境

自宅兼持ち歩き用に使用しているマシンはWindows XP (+ Cygwin)で、メールの読み書きには Meadow + Mew を使っています。このような環境にbogofilterを導入する場合、

1. Mewによる自前のメール取得をやめて、fetchmail, procmailでメールを取得。procmailの振り分け指定で bogofilter を使う。(これが常道?)
2. Mewの C-u ? コマンドによる一括マーク、| コマンドによるフィルタ実行で、bogofilterを呼び出すようにする。(参考Naney's Diary)

の2通りがあるようです。

2のほうがMewユーザーにとっては自然に思いますが、大量のSPAMメールはSummaryで見るのもウンザリなので、1の方法を中心に、2をとりまぜるような使い方を考えてみました。

まず、fetchmail + procmail + bogofilter で、SPAMメールを ~/Mail/newspam に集めることにします。inboxに残っているSPAMメールや、誤ってnewspamに行ってしまったメールを移動したり、1件ずつbogofilterに学習させたりするのにはMewのコマンドを使うことにします。newspam にたまったメールは
時間のあるときに一括してbogofilterにSPAMとして学習させた後、削除します。

* Cygwin 版 fetchmal, procmailをインストール

fetchmailとprocmailは、最新のCygwinではバイナリインストールできるので、これと、あとでbogofilterのインストールに必要となる libdb-4.1 を cygwin の setup.exe で入れておきます。

* gsl-1.4をインストール

bogofilter に必要となる、GSL - GNU Scientific Library 1.4 を、

./configure
make
make install

でインストール。かなり時間がかかりました。

* bogofilter をインストール

SourceForge.net: bogofilter から、bogofilter-0.15.6 をダウンロード、展開して、

./configure
make
make install

でインストール。

* kakasiをインストール

日本語分かち書き変換のためにkakasiをインストール。これも

./configure
make
make install

だけ。

* nkf の入手

(どこかでバイナリを入手したか、自分でソースからコンパイルしたか、忘れてしまいました)

* ~/.fetchmailrc, ~/.procmailrcを書く。

fetchmailの設定ファイル、~/.fetchmailrc は次のとおり。

defaults proto pop3 mda "/usr/bin/procmail"
poll xxxx.xxxx.xx.com user "*****" password "****"

procmailの設定ファイル、~/.procmailrc は次のとおり。

PATH=/bin:/usr/bin
MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/inbox/.
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$HOME/.lockmail
:0 HB
* ? nkf -m -e | kakasi -w | bogofilter
newspam/.
:0:
inbox/.

*.emacsに若干の追加

Meadowのなかから M-x fetchmail で fetchmail を実行できるように、.emacs に

(defun fetchmail ()
(interactive)
(shell-command "fetchmail&"))

を追加しました。

また、上記のNaney's Diary さんを参考に、いくつか設定を加え、シェルスクリプトを用意しました。

*bogofilterにSPAMメールを学習させる

400通ぐらいのSPAMメールをbogofilterに学習させました。

cd ~/Mail/trash
find . -type f -exec sh -c 'cat {} | nkf -m -e | kakasi -w | bogofilter -s' ';'

また、SPAMでないメールもbogofilterに学習させます。

cd ~/Mail/inbox
find . -type f -exec sh -c 'cat {} | nkf -m -e | kakasi -w | bogofilter -n' ';'

*利用

** fetchmailする

Meadowで M-x fetchmail して、fetchmail を実行します。

** Mewでinbox, newspamを確認。

C-u M-x mew でMewを起動します。

inboxにSPAMメールが残っていたら、oコマンドでnewspamに移動します。

newspamに誤ってSPAMでないメールが振り分けられていたら、Summaryモードでそのメールの上で、 | bogogood を実行します。それから、o コマンドで適当なフォルダに移動します。

** newspamのメールをSPAMとして登録し、削除。

ざっとこんな感じです。procmailのログをもとに未読管理するEmacs Lispプログラム (prom) も併用するといいかもしれません (まだ使いこなせていませんが)。

とりあえずこれで、毎回メールをチェックするたびに大量のSPAMメールを見る必要がなくなりそうです。

Posted by Hiroyuki KUROSAKI at 2003年10月06日 01:56 このエントリーを含むはてなブックマーク
この記事の TrackBack URL:
http://noir.s7.xrea.com/mt/mt-tb.cgi/61
スパムフィルタその後
Excerpt: 仕事先のものも含めて、一日あたり500件近いスパムを受信する日々が続いている。...
Weblog: Kuro-san: 更新日誌
Tracked: 2004年03月06日 23:09
Comments

bogofilterの元になっている論文、Paul Graham, "A Plan for Spam" と "Better Bayesian Filtering" の和訳を発見。

http://www.shiro.dreamhost.com/scheme/index-j.html

Posted by: noir on 2003年10月12日 12:48

Emacs Lispで書かれていてMewで使えるBayesian filter も見つかりました:
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#spamfilter.el
これもよさそうですが、前にも書いたように、Summaryバッファに大量のSPAMが並ぶのを見ること自体が欝陶しいので…。

Posted by: noir on 2003年10月12日 13:00
Post a comment

サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?