今年の春ごろから、ものすごい量の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:56bogofilterの元になっている論文、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:48Emacs Lispで書かれていてMewで使えるBayesian filter も見つかりました:
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#spamfilter.el
これもよさそうですが、前にも書いたように、Summaryバッファに大量のSPAMが並ぶのを見ること自体が欝陶しいので…。
サイン・インを確認しました、 さん。コメントしてください。 (サイン・アウト)
(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)