2007-03/05 Mon

_ Mew5 + bsfilter

最近 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
$

仕方なくほかの方法を探す。

Tags: Mo

_ bsfilter の準備

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/ 以下に置かれる。

Tags: Mo

_ mew-absfilter.el

http://reed1200.at.infoseek.co.jp/mew/#bsfilter ここにある、mew-absfilter.el を使うことにする。使う理由は後述。

これを持ってきて、load-path の通っているところ (mew と同じディレクトリなど)に置けばいい。

その後、 ~/.mew.el などの設定ファイルに以下を追記する。

(require 'mew-absfilter)
(mew-absfilter-mode 1)
Tags: Mo

_ bsfilter (寄り道)

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

しかしちょっと試しただけで気づいた欠点。

  1. bsfilter を事前に起動させておく必要がある。メンドイ。
  2. mew で case を使って複数のメールサーバからメールを受信している場合、メールサーバ毎に daemon 起動の必要がある。
  3. 上記 proxy を使うために、case 毎に設定変更が必要となる。メールサーバの設定をn個設定していると、n箇所の設定変更が必要。
  4. port 10110(これは例だが)は 1 つしか使えないので、ポートを手動調整して管理しないといけない。(たとえば10110, 10111, 10112 ...)
  5. pop 以外の方法を使いたい場合に使えなくなり、全く別の設定をする必要が出る。一から覚えなおしになる可能性大。

そこで、bsfilter の起動は mew-absfilter.el が自動で行う方法を選択した。

Tags: Mo

_ mew-absfilter.el (続)

mew-absfilter.el は 以下の流れで動く。 (ただし、popの場合しか試してない)

  1. Mew で inc を発動。
  2. メール取得後、mew-absfilter.el が bsfilter を kick して spam 判定を実行。
  3. spam と判定されれると、サマリー行の頭に ";"(セミコロン)がつく。

ここまで終わったら、メールを読む。

キーバインド。

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 の作者の方々に感謝。

Tags: Mo

«前の日記(2007-02/28 Wed) 最新 次の日記(2007-04/01 Sun)»