SpamBayes (スパムベイズ) 日本語版
[更新日:
2007年03月19日
]
SpamBayes はベイズ理論を応用した高性能なスパムフィルタです。
運用方法は下記の三通りあります。
今回は procmail のフィルタ (sb_filter) として使います。
詳細は
http://spambayes.sourceforge.net/
を参照してください。
結果は
この一年の集計
にまとめてみました。
sb_server
POP3 proxy として使います。
プロバイダの POP3 サーバと自分の MUA の間にプロキシとして挟むだけです。
$ /usr/bin/sb_server.py で起動した後、web ブラウザから
http://localhost:8880 に入ります。
Status and Configuration 設定欄の
Configuration page.
をクリックし設定します。
メールを表示する部分だけ
日本語化
日本語化(3)
しました。
まず試してみるには一番容易です。
sb_filter
procmail からフィルタとして呼ばれる形式です。
すでに IMAP システムを構築してる場合、
~/procmailrc の設定にフィルタ定義を追加するだけです。
訓練は cron でシェルスクリプトを起動させます。
今回はこの方式を採用します。
トークン抽出部分を
日本語化(2)
しました。
Imapfilter
IMAP フォルダ上のメールをフィルタします。
訓練も IMAP フォルダが対象です。
訓練や振り分けが web ブラウザからビジュアルに操作できます。
ただし、まだα版と書いてあります。
完成すれば運用では一番便利かもしれません。
1. 日本語パッケージ
spambayes-1.0.4 を 日本語化するためのソースとパッチを
ここ
に置きます。
spambayes-1.0.4.tar.gz -- オリジナル
spambayes-1.0.4.jp.tgz -- 日本語版 (ソースとパッチを含む)
spambayes.spec -- RPM 用スペックファイル
SplitterForU.py -- 日本語トークン分割モジュール
spambayes-1.0.4.Dibbler-iso2022jp.patch
spambayes-1.0.4.ImapUI-RFC2060.patch
spambayes-1.0.4.ProxyUI-iso2022jp.patch
spambayes-1.0.4.PyMeldLite-iso2022jp.patch
spambayes-1.0.4.classifier.patch
spambayes-1.0.4.tokenizer-iso2022jp.patch
2. 新規データベース作成
sb_filter.py コマンドで、データベースをつくります。
~/.hammiedb というファイルができます。
$ su -l courier
$ /usr/bin/sb_filter.py -n
3. 訓練用フォルダを作成する
Sylpheed を操作し訓練用フォルダを作ります。
ham と spam はデータベースの訓練用です。
unsure と Spam は SpamBayes フィルタ出力用です。
--- Courier(IMAP4)
+-- INBOX
+-- Trash
+-- Bayes
+-- ham
+-- spam
+-- unsure
+-- Spam
IMAP サーバ側の Maildir の中に
.Bayes.* ディレクトリが出来ているはずです。
$ ls -lao ~/Maildir
drwx------ 9 courier ./
drwx------ 3 courier ../
drwx------ 6 courier .Bayes.ham/
drwx------ 6 courier .Bayes.spam/
drwx------ 6 courier .Bayes.unsure/
drwx------ 6 courier .Spam/
drwx------ 6 courier .Trash/
drwx------ 2 courier courierimapkeywords/
-rw-r--r-- 1 courier courierimapuiddb
drwx------ 2 courier cur/
drwx------ 2 courier new/
drwx------ 2 courier tmp/
IMAP サーバ側で maildirmake
コマンドを使って作成することもできます。
$ su -l courier
$ cd ~/Maildir
$ /usr/sbin/maildirmake .Bayes.ham
$ /usr/sbin/maildirmake .Bayes.spam
$ /usr/sbin/maildirmake .Bayes.unsure
$ /usr/sbin/maildirmake .Spam
4. データベースを「訓練」するスクリプト
次にエディタで ~/.spambayesrc を作ります。
[Storage]
persistent_use_database = True
persistent_storage_file = ~/.hammiedb
Sylpheed を操作し、
.Bayes.ham には正常なメールを、
.Bays.spam にはスパムメールをいれます。
訓練には sb_mboxtrain.py コマンドを使用します。
$ /usr/bin/sb_mboxtrain.py -n -g ~/Maildir/.Bayes.ham/ -s ~/Maildir/.Bayes.spam/
これは適当な名前のシェルスクリプトにして置いたほうが便利でしょう。
5. ProcMail にフィルタを追加する
~/.procmailrc にフィルタを追加します。
(SPAM と UNSURE の定義で、最後の '/' を忘れないように)
PATH=/bin:/usr/bin:/usr/local/bin # 環境変数の設定
MAILDIR=$HOME/Maildir # メールディレクトリへのパス
DEFAULT=$MAILDIR/ # 下記配送条件にマッチしなかった時の配送先
LOCKFILE=$MAILDIR/.lockmail # ロックファイルのパス
LOGFILE=$MAILDIR/procmaillog # ログの保存先
### ここから SpamBayes 用に追加 ###
### ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ###
SPAM=$MAILDIR/.Spam/ # スパムメールの保存先
UNSURE=$MAILDIR/.Bayes.unsure/ # 判別できないメールの保存先
FILTER=/usr/bin/sb_filter.py # SpamBayes フィルタコマンド
:0 fw:hamlock
| $FILTER
:0
* ^X-Spambayes-Classification: spam
$SPAM
:0
* ^X-Spambayes-Classification: unsure
$UNSURE
### ↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ###
### ここまで SpamBayes 用に追加 ###
# ここから先は個別の振り分けルールを書く
ここまで設定すれば、次に fetchmail (と procmail) が実行された時、
spam と判定されたメールは .Spam フォルダに入れられます。
判定できなかったメールは .Bayes.unsure フォルダに入ります。
もし .Bayes.unsure にメールが配信されたら、
訓練用フォルダ .Bayes.ham または .Bayes.spam
に移動します。
また .Spam の中に必要なメールが紛れ込んでいたら、
.Bayes.ham に移動します。
移動はリモートからメーラを使ってもおこなえます。
後は先程の訓練用コマンドを実行するか、
次の自動実行にまかせます。
5. トレーニングを自動実行する
crontab コマンドでエディタを開き。作成します。
$ su -l courier
$ crontab -e
下記は毎日 08:12, 20:12 に起動するように設定したものです。
12 8,20 * * * /usr/bin/sb_mboxtrain.py -n -g ~/Maildir/.Bayes.ham/ -s ~/Maildir/.Bayes.spam/
|