|
SPAM filtering with bogofilter: msg#00125emacs.gnus.semi.japanese
ようやっと,長いこと懸案だった spam フィルタリングの設定を見直しました. 参考までに,私の行った設定を報告します. 私は,procmail で (1) 私のアドレスに直接届くメール (2) メーリングリストやエイリアス経由で届くメール を別々の maildir 形式のメールボックスに振り分けておき,直接届いたメー ルだけを対象に biff を鳴らすという小細工をしています.これは,急ぎのメー ルにすぐ反応できるようにするためです. spam は急ぎのメールではありませんから,後者のメールボックスに配送して 欲しい(= 余計な biff を鳴らさないで欲しい).というわけで,procmail で も bogofilter を呼び出して振り分けることにしました.そうすると,Gnus でも更にもう一度 bogofilter を呼び出すのは無駄なので,Gnus は bogofilter によって付与された X-Bogosity へッダを見て振り分けることに します. また,通常のグループに spam が残っている状態は嫌いなので,spam と判定 されたメールは即座に spam 用のグループに移動させることにします. spam.el の基本的なデザインでは,グループを抜ける度に ham/spam のデータ ベースの更新を行っているようです.この方法は分かり易くて良いのですが, 頻繁にグループに入ったり抜けたりする人にとっては,グループの出入りに余 計な時間がかかることになって,いらいらさせられる原因になります[*].そ こで,ham/spam データベースの更新は emacs とは無関係(= ユーザーの入出 力とも無関係)のタイミングで行い,誤判定された記事を再登録する操作だけ を Gnus から制御することにします. このような方針で設定する手順は以下の通りです. 最初は,この方針のための ~/.procmailrc のサンプルです. MAILDIR=$HOME/spool :0 fw | bogofilter -u -e -p :0 * ^X-Bogosity: Yes, other/ :0 * ^TO_username@example\.net inbox/ :0 other/ これで,直接届いたメールだけが ~/spool/inbox/ 以下に貯まり,spam を含 む不要不急のメールは ~/spool/other/ 以下に貯まります.また,届いたメー ルが bogofilter によって振り分けられると同時に,そのメールに含まれてい る単語も spam または ham の単語として登録(-u)されます. 次に,spam.el を使えるようにするための設定を ~/.gnus に書きます. ;; spam.el を使えるようにする (spam-initialize) ;; spam を貯めるグループの指定 (setq spam-split-group "junk") ;; X-Bogosity: へッダを参照して,ham/spam を振り分ける (setq spam-use-bogofilter-headers t) ;; 「未承諾広告」を表題に含むメールは spam とする (setq spam-use-regex-headers t spam-regex-headers-spam '("^Subject:.*未承諾広告")) ;; (1) junk グループは spam のみを含む ;; (2) 普通のメールグループは ham のみを含む (setq gnus-spam-newsgroup-contents '(("\\`nnml:junk\\'" gnus-group-spam-classification-spam) ("\\`nnml:" gnus-group-spam-classification-ham))) ;; 誤判定されたメールのみを登録対象とする. ;; (1) spam を貯めているグループを抜けるとき,見つかった ham を ;; bogofilter に登録する. ;; (2) 普通のグループを抜けるとき,見つかった spam を bogofilter ;; に登録する. (setq gnus-spam-process-newsgroups '(("\\`nnml:junk\\'" ((ham spam-use-bogofilter))) ("\\`nnml:" ((spam spam-use-bogofilter))))) ;; 誤判定されたメールのキーワードを,bogofilter のデータベースから ;; 削除しながら,spam/ham の登録を行う. (setq spam-bogofilter-spam-switch "-Ns" spam-bogofilter-ham-switch "-Sn") ;; ham なのに spam と誤判定されていたメールは respool する (setq gnus-ham-process-destinations '(("\\`nnml:junk\\'" respool))) ;; spam なのに ham と誤判定されていたメールは junk に移動する (setq gnus-spam-process-destinations '(("\\`nnml:junk\\'" nil) ("\\`nnml:" "nnml:junk"))) ここまで設定して, (setq nnmail-split-fancy '(| (: spam-split) ("x-ml-name" "semi-gnus-ja" "semi-gnus") "inbox")) のように書くと,spam は junk に分類され,それ以外のグループには ham だ けが分類されるようになります. spam であるにも関わらず ham と誤判定されたメールを見つけた場合は,M-d で spam マークをつけます.そうすると,そのグループから抜けたときに junk グループに送り込まれ,同時にキーワードの再学習が行われます. ham であるにも関わらず spam と誤判定されたメールを見つけた場合は,d な どで既読マークをつけます.そうすると,junk グループから抜けたときに, そのメールを適切なグループに respooling すると同時に,キーワードの再学 習が行われます. [*] この問題を避けるために, (gnus-registry-initialize) (setq spam-log-to-registry t) という指定を ~/.gnus に書き, (setq gnus-spam-process-newsgroups '(("\\`nnml:" ((ham spam-use-bogofilter) (spam spam-use-bogofilter))))) という普通の設定を試してみたのですが,私の手元では効果が見られませんで した.具体的には,過去に一旦読んだメールをもう一度読んだ場合,そのグルー プから抜けるときに,その一旦読んだ(= 学習済のはずの)メールが再び学習対 象となってしまって, Registering 1 articles with classification ham, check spam-use-bogofilter というメッセージが現れました.ただ,これは設定を試行錯誤していた時だっ たので,何か別の間違いが原因だった可能性もあります. -- 土屋 雅稔 ( TSUCHIYA Masatoshi ) |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Cut Lbs Promptly: 00125, Dorothea |
|---|---|
| Next by Date: | university degrees to the highest bidder :): 00125, Earline Mcdonough |
| Previous by Thread: | Cut Lbs Promptlyi: 00125, Dorothea |
| Next by Thread: | Re: SPAM filtering with bogofilter: 00125, Hiroshi Fujishima |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |