Feml: Bayesian Spam Filter

概要: Femlの目的、特徴

ダウンロード

feml-0.4.0.tar.bz2

インストール、設定

  1. 準備: ruby-1.9.1以降が必要。1.8.Xは不可。
  2. 準備: 日本語の単語切り出し (分かち書き) のため、MeCab-0.96 (和布蕪) およびそのrubyバインディングが必要 (なぜかmecab-ruby-0.97は正常に動作しないので0.96を使っている)。
  3. 準備: 文字コード変換のため、libiconvが必要。
  4. feml.rb/usr/local/binなど適当なディレクトリーに置く。
  5. 必要に応じ、feml.rbの先頭部分にあるハッシュAmConfの値を書き換える。

開発に用いている環境: FreeBSD-7.1、sendmail-8.14.3、ruby-1.9.1、mecab-0.96、mecab-ruby-0.96、mecab-ipadic-2.7.0、libiconv-1.12。

実行 (1): spam判定、隔離

"| exec /usr/local/bin/feml.rb -u tac || exit 75 ## tac@example.co.jp"

  1. 例のように、feml.rbの呼び出しを、ホーム・ディレクトリーの.forwardに記述する。-uにはユーザー名を指定する。
  2. .forwardにはコンマ (,) 区切りで複数の呼び出しを記述できるので、procmailなどを並べて呼び出し、転送やバックアップ保存をしてもよい。但し、このprocmailがメールを/var/mail/<user>に出力するようになっていると、feml.rbが出力したものと重複してしまうことになる。
  3. この段階ではまだspam判定のための学習をしていないので、すべてspamではないと判断される。届いたメールは/var/mail/<user>に追記され、POPで接続するなどの方法で読むことができる。
  4. 届いたメールは${HOME}/Feml/backup以下にも保存されている。さらに、spamではない (clean) と判定したので、${HOME}/Feml/clean以下にも保存される。ファイル名から受信日時が分かる。ファイル名末尾の数字はプロセス番号で、1秒以内に2通以上届いても重複しないようにするために付けてある。
  5. ${HOME}/Feml/conf/feml_store.pstoreというファイルができている。これは字句データベースで、字句ごとのspam確率を記録する。

実行 (2): 学習

$ feml.rb --add-spam-sub-clean *.txt

  1. spamがcleanと判定されてしまった場合、--add-spam-sub-cleanオプション付きでfeml.rbを呼び出し、字句データベースを更新する。
  2. hourly.localに例示したようなスクリプトを、cronにより定期的に起動するようにしておくと便利。${HOME}/Feml/cleanに保存されているメールのうち、実際にはspamであるものを${HOME}/Feml/addspamに移動すればよい。あるいは、メール・リーダー上でspamメールをまとめて選択し、Unix mbox形式で${HOME}/Feml/addspam以下にエクスポートしてもよい (使い始めてしばらくするとこの方法が便利になる)。

定期処理: hourly.local

例として示したhourly.localでは次のような処理をしている。

ホワイト・リスト

例: from_white_list.txt

## from_white_list.txt
/@(ja|us)\.example\.com$/
@example.co.jp
info@japan.example.com

例: received_white_list.txt

## received_white_list.txt
from mail.example.co.jp (localhost [127.0.0.1])
from localhost (localhost)
from localhost (localhost [127.0.0.1])

ブラック・リスト

ログ・ファイル

開発の経緯


feml.rb

spam判定、隔離

feml.rb [ -f | --spam-filter ] [ -u <user> | --user <user>]

学習

feml.rb [ -s | --add-spam-sub-clean ] files...

feml.rb [ -c | --add-clean-sub-spam ] files...

その他

feml.rb [ -e | --export-token-db ] > token_db.txt

feml.rb [ -i | --import-token-db ] < token_db.txt

feml.rb [ -v | --version ]


履歴


Copyright © 2009 KOYAMA Hiro <tac@amris.co.jp>

SourceForge.JP