最近 spam が多いので設定してみた。
以下環境は Momonga Linux 3(STABLE_3) だが、 Linux なら大体似たようなもんだと思う。
$ rpm -ql bsfilter ... /usr/share/config-sample/bsfilter/mua/mew4 /usr/share/config-sample/bsfilter/mua/mew4/emacs.el /usr/share/config-sample/bsfilter/mua/mew4/mew.el
おお素晴らしい。と思いきやこれは動かなかった。
Symbol's value as variable is void: mew-summary-mode-map
たぶん、mew version4 用だから。
因みに STABLE_3 の Mew と Emacs 環境は以下。
$ rpm -q mew-emacs mew-emacs-5.2-1m $ rpm -q emacs emacs-22.0.50-0.20060313.4m $
仕方なくほかの方法を探す。
bsfilter のマニュアル通り。
1. cleanなメール中の単語を数える。
$ bsfilter --add-clean ~/Mail/inbox/*
2. spam中の単語を数える。
$ bsfilter --add-spam ~/Mail/spam/*
ファイルが多くてシェルが怒る場合は以下の例を参照。
$ for i in {1..9} ; do bsfilter --add-clean ~/Mail/inbox/${i}???? ; done
3. 単語ごとにclean/spamな確率を求める。
$ bsfilter --update
実行前に C-u O を 実行してpack しておいたほうがいいかも。
作成したデータベースは ~/.bsfilter/ 以下に置かれる。
http://reed1200.at.infoseek.co.jp/mew/#bsfilter ここにある、mew-absfilter.el を使うことにする。使う理由は後述。
これを持ってきて、load-path の通っているところ (mew と同じディレクトリなど)に置けばいい。
その後、 ~/.mew.el などの設定ファイルに以下を追記する。
(require 'mew-absfilter) (mew-absfilter-mode 1)
bsfilter は --pop という option を付けると pop proxy として動く。 そこで、
$ bsfilter --pop --auto-update --insert-flag \ --insert-probability --pop-server メールサーバ名 \ --pop-port 110 --pop-proxuy-port 10110
このように起動して、mew からは port 10110 から取得する方法がある。 AA で書くとこんな感じ。
user - Mew(inc) -> (localhost:10110)-bsfilter-(localhost:110) - pop server
しかしちょっと試しただけで気づいた欠点。
そこで、bsfilter の起動は mew-absfilter.el が自動で行う方法を選択した。
mew-absfilter.el は 以下の流れで動く。 (ただし、popの場合しか試してない)
ここまで終わったら、メールを読む。
キーバインド。
Mew の suumary mode において、 "bx" と実行することで spam メールが +spam (スパムを集めるディレクトリ) に移動する。
spam ではないメールが間違えて spam と判定された場合は、 マークを消す "u" の代わりに、"bc"(mew-absfilter-lean-clean) を実行する。
逆に spam 判定から漏れた場合は、 "bs"(mew-absfilter-lean-spam) を実行して spam 認定する。
他のキーバインドは mew-absfilter.el の以下のコードを参照。(試してないので)
(defvar mew-absfilter-map (let ((map (make-sparse-keymap))) (define-key map "c" 'mew-absfilter-learn-clean) (define-key map "s" 'mew-absfilter-learn-spam) (define-key map "C" 'mew-absfilter-mark-learn-clean) (define-key map "S" 'mew-absfilter-mark-learn-spam) (define-key map "b" 'mew-absfilter-check-spam) (define-key map "x" 'mew-absfilter-summary-exec-spam) (define-key map "D" 'mew-absfilter-clean-spam-folder) map)) (define-key mew-summary-mode-map "b" mew-absfilter-map) ;; (define-key mew-summary-mode-map ;; [remap mew-summary-learn-spam] 'mew-absfilter-learn-spam) ;; (define-key mew-summary-mode-map ;; [remap mew-summary-learn-ham] 'mew-absfilter-learn-clean)
超快適。充分な spam 判別精度。 bsfilter と mew-absfilter.el の作者の方々に感謝。