SpamAssassin日本語対応パッチ

最新版はSpamAssassin 3.3.2に対するパッチです。

概要

オリジナルのSpamAssassinの3.2.0以降ではnormalize_charsetオプションを有効にすることにより、日本語等のマルチバイトの文字をUTF-8に正規化してから、ルールの評価を行うことができることが意図されています。
しかし、現時点(SpamAssassin 3.3.2)では、実はこの設定オプションは十分には機能していません。
そのため、この日本語対応パッチでは日本語等のマルチバイト文字の言語を正しく扱うことができるようにしています。

なお、このパッチは日本SpamAssassinユーザ会(http://spamassassin.jp/)により開発が行われています。

日本語パッチを当てていない物との違い

ISO-2022-JPの文字をバイト文字で記述するルールはnormalize_charsetオプションを有効にすると使えなくなります。

パッチの配布元

次のサイトから日本語対応パッチをダウンロードできます。

以下のパッチ等をダウンロードできます。

  • 説明ファイル: spamassassin-3.3.2-ja-1.txt
  • 日本語対応パッチ(総合パッチ): spamassassin-3.3.2-ja-1.patch
  • 分かち書きプラグインの設定ファイル: tokenizer.pre

※バージョンにより、ファイル名は少し異なります。

パッチの内容

このパッチが以下のことを行っています。

  • normalize_charsetオプションの改良: UTF-8の文字が文字落ちするバグの修正と判定方法の改良
  • 文字エンコーディングや言語の判定に関するユーティリティモジュールの追加
  • report_charsetオプションの改良
  • ベイジアンフィルタのUTF-8対応: UTF-8の文字が文字落ちするバグの修正
  • ベイジアンフィルタの日本語対応: 日本語のトークナイザーの追加

このパッチが提供する機能は次のものです。

  • テストのUTF-8対応: ヘッダテストやボディテストでパターンをUTF-8の文字エンコーディングで記述できる。
  • ベイズフィルタの日本語対応: ベイズフィルタで日本語の文書を正しく学習・判定できるようになる。

ルールの記述例

header   SUBJ_MISHODAKU  Subject =~ /(未|末)承諾/
body     DEAI            /出(会|逢)/

このパッチの制限事項は次の通りです。

  • sa-compileはUTF-8の文字が含まれているとコンパイルの対象外になります。これはSpamAssassinの仕様です。
  • パターンにおいてUTF-8の文字のブラケット表現(文字クラス)を使用することができません。つまり”/[あーお]+/”のようなパターンを使うことができません。

使い方

1. 設定ファイルlcoal.cfに次の行を記述します。

normalize_charset 1

2. tokenizer.pre(別配布)をlocal.cfと同じディレクトリにコピーして次の行のコメントを解除してSimpleJAプラグインを有効にします。

loadplugin Mail::SpamAssassin::Plugin::Tokenizer::SimpleJA

SimpleJAは文字種(漢字、ひらがな、カタカナ、英数字)により分かち書きを行うプラグインです。

精度の高い分かち書きを行う場合にはMeCabプラグインを使ってください。MeCabプラグインを使う場合は次の行のコメントを解除して有効にします。

loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab

3. UTF-8対応のエディタで設定ファイルlocal.cf,user_prefs等を編集して、headerテストと”body”ルールにおいて日本語でパターンを記述します。記述したら、このファイルを文字エンコーディングをUTF-8に指定して保存してください。

ルールの記述例:

header   SUBJ_MISHODAKU  Subject =~ /(未|末)承諾/
describe SUBJ_MISHODAKU  Subject: mishodaku
score    SUBJ_MISHODAKU  2.5

body     DEAI            /出(会|逢)/
describe DEAI            'deai'
score    DEAI            0.5

4. “spamassassin –lint”を実行して、ワーニングが出ていないかを確認します。

5. 以上で準備が整いましたのでspamd等のデーモンを利用している人はデーモンを再起動してください。