bogofilter のチューニング -- 日本語処理等
(MacOSX & Cygwin on Windows)

  1. まえがき
  2. 日本語処理
  3. procmail との連携
  4. Wanderlust での運用
  5. Links
  6. DB の構築
  7. 判定基準の設定

関連するページはこちら、

メール関係全体はこちら

MacOSX & Cygwin on Windows のソフトの事

Emacs 関係はこちら


1. まえがき

Emacs に関する、homepage を公開してから急激に Spam が増えたので、2004年の春から、bogofilter を使い出しました。これまで、

等に悩まされながら、それでも色々トライしてました。

最近、やっと充分満足できる状態になったので、私の設定を紹介します。

このページの設定も、Mac OSX と、Window (Cygwin) で、共通で使っています。


2. 日本語処理

2.1. 何故事前処理が必要なの?

2.1.1. 日本語コード

日本語を表現する文字コードには、euc-jp, shift-jis, iso-2022-jp, unicode 等が有ります。

本来は、RFC的に正しくないメールは捨ててしまえば良いのですが、bogofilter の、データベースは、spam メールの単語を登録する必要があるため、何とか、文字コードを推定して、単語を取り出す必要があるのです。

2.1.2. 分かち書き

英語などは、空白が単語を分けます。なので、bogofilter は、空白を頼りに単語を見つけ出して、登録&判別すれば良い訳です。

ところが、日本語は、単語を明確にわける記号が有りません。このままでは、bogofilter は文章ごと登録する事になって、正しい判定を期待する事が出来なくなります。

日本語には、「分かち書き」という、文章を単語に分割する作業が有ります。

そこで、kakasi や、mecab 等と言う、分かち書きも出来るプログラムの登場となるわけです。1

2.2. bogofilter の unicode 対応

bogofilter も最近の物は、wordlist.db を、unicode 化したようです。試しに、日本語メール(まともな)を、生で、流してみたところ、それなりに、まともな DB を作るようです。でも、

どうせ、外で分かち書きする必要があるのなら、日本語コードの変換も一緒にやった方がよさそうです。

2.3. 単純に nkf + kakasi で処理

次のような、「変換+分かち書き」処理が、よく紹介されています。

nkf -m -e | kakasi -w

最初は、私もこれを使わせて頂いてました。でも、DBを作った最初は、調子良いのだけれど、半年くらいすると、段々誤判別が増えてきて、1年くらいで使い物にならなくなります。其の度に、DBを再構築してました。

何回目かに、業を煮やして、DBの中を覗いて見て判った事は、(推定ですが)

2.4. メールの構造を解析して、ブロック毎に処理

2.4.1. 方針

と云う事で、どうやら、

必要が有りそうです。

自分で作るのは大変そうだな。と、思っていたら、東京工科大の冨永先生が作っておられました。

2.4.2. prepare.rb (by 冨永先生)

prepare.rb は、上記の機能を次の様にして実現しています。

rubymail
nkf
kakasi

2.4.3. nkf と、mecab の、ruby ファンクションを使う

色々トライしていて、prepare.rb を改造して、bogofilter-nihongo.rb を作りました。機能は、次の様になっています。インストールや構造等はこちら

rubymail
nkf-ruby
mecab-ruby
bogofilter-nihongo.rb 自身では

2.4.4. bogofilter-nihongo.rb の使い方

~/Mail/spam/1 と言うメールファイルを、DB に spam として登録したい場合、

bash$ cat ~/Mail/spam/1 | bogofilter-nihongo.rb -s --unicode=no -k 10 -v

~/Mail/good/1 と言うメールファイルを、DB に no spam として登録したい場合、

bash$ cat ~/Mail/good/1 | bogofilter-nihongo.rb -n --unicode=no -k 10 -v

~/Mail/inbox/1 と言うメールファイルが、spam か否か見たい場合<BR>

bash$ cat ~/Mail/inbox/1 | bogofilter-nihongo.rb --unicode=no --spam-cutoff 0.9 -k 10 -v
とする。

3. procmail との連携

こちらに、procmail レシピを紹介しています。

4. Wanderlust での運用

.wl の設定は、此方

上に紹介した、私のレシピでは、

MOSTLYと、UNSUREと判定されたメールは、手動でチェック再配信します。

先ずは、以下のようにして、夫々マークを付けます。

Spam の場合
カーソルを合わせ
M-x wl-summary-spam ("k m" にバインドされてます)

Non Spam の場合
M-x wl-summary-refile ("o" にバインドされてます)
+(配信先フォルダー)
最後に
M-x wl-summary-exec ("x" にバインドされてます)
すれば、夫々 ham, spam に登録された上で、各フォルダーに配達されます。

続きはこちら


1. mecab は、形態素解析エンジンで、分かち書きは、その機能のひとつです。