ベイジアンスパムフィルタというと、メールの中の語句を分析してスパムかそうでないかを判断するものです。 SpamAssassin にも実装されている考え方で、それなりに学習させてやるとスパムの判定精度も少し高くなったりします。SpamAssassinに入っているものはいまいち覚えが悪くて、『これはスパムなんだよ~~』と一生懸命覚えさせようとしても覚えてくれないことがあったりします。
ところで、Mozilla Thunderbird にも同じようなスパム除け機能が組み込まれていまして、POP3 で受け取るメールに対してスパムかどうかを判定することができます。わたしゃてっきり「あんまり使い物にならない」と思っていたのですが、ところがどっこい、Thunderbirdのものは受信した個々のメールについてスパムかどうかをきっちり学習させつづけていると、最近ではSpamAssassinをすり抜けた日本語スパムもちゃんとスパムと判定するようになってきたのですねー。そして普通のメールをスパムと判定することもほとんどありません。これは使えそうです。
とはいえ、Thunderbirdで取ってきてスパム判定してからケータイにメールを転送なんてアホなことはできませんから(笑)、スパム判定は自宅サーバで行う必要があります。ということで前置きが長くなりましたが bsfilter を導入してみました。
いつもの如く ports/mail/bsfilter にて make install だけでインストール完了。コマンドラインで使うものなのでインストールした事による弊害はありませんから気楽に使えます。bsfilter は SpamAssassin と違って、入れただけではスパムフィルタとして何の役にも立ちません。まず手元のメールを使って学習させる必要があります。手順は下記のとおり
% bsfilter --list-spam ~/Mail/inbox/*とし、表示されたファイルについて非スパムメールであれば学習させるという手順を取ってみました。さらにMHの場合はよくやりとりするメールアドレスに対して
% bsfilter -c `pick +inbox -from 'hogehoge@foo.bar'`などとすると安全確実です。
このように学習させた結果、なんと「学習に使ったメールに対してはスパム判定率100%」という驚異の判定率に達しました。『元ネタなのに当たり前やん』と言われそうですが、SpamAssassinでは当たり前ではなかったのです(^^;)。
SpamAssassinと違って「間違ってスパムと判定する」事がありそうですから、しばらくはスパム判定だけさせて振分けには使わないように設定してみましょう。.procmailrc に
:0 fwとでも書いておけば、スパムと判定した場合はヘッダに追加されると共にサブジェクトにも[SPAM]と入りますから誤判定が起きた時にも判りやすいです。しばらく様子を見て成績が良ければ .procmail で振り分けるなり SpamAssassin で加点するなりすれば現在よりも快適な環境になるはずです。
| /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability --mark-spam-subject --header-prefix bsSpam
□ 関連記事