spamassassin-3.1.3-normalize-test4.patch (2006-06-06) ---- test3からの変更点 - バグの修正 -- Message.pmにおいて言語情報を取得できないときに警告が出ていたのを修正した。 -- MeCab-0.90rc10以降ではエラーが出ていた件を修正した。 - Charset.pmの処理コードを整理した。 特にUTF-8における言語判定処理は速度が少し向上した。 今後、考慮すべき点 - ベイズの学習上、分かち書き処理後にひらがなやカタカナ1文字は除去した方が よいのではないか? - Encode::Detectモジュールはみんなコンパイルとインストールが出来ているのか? CPANを見ると、失敗している人の方が多いようであるが。 ---- spamassassin-3.1.2-normalize-test3.patch (2006-05-28) test2からの変更点 - バグの修正 test1の「normalize時に漢字で終わり次の行が漢字で始まる行はunfoldingする。」 がtest2において機能していなかったのを修正した。 Node.pmにおいてinvisibleなテキストの処理でエラーが発生していたのを修正した。 - 分かち書きの処理を1行ごとに行っていたのをボディ一括で行うようにした。 処理速度がわずかながら向上するはず。 - 分かち書き処理の前に全角空白文字を空白文字に置換するようにした。 - 文字コード変換の処理をMail/SpamAssassin/Utils.pmから Mail/SpamAssassin/Util/Charset.pmに移した。 - 全般的に処理コードを整理した。 - パッチを3分割し、プラグインの設定ファイルは別ファイルにした。 文字符号化方式や言語の判定処理 spamassassin-3.1.2-charset-util-test3.patch 日本語対応パッチ本体 spamassassin-3.1.2-normalize-charset-test3.patch kakasiとMeCabの分かち書きプラグイン spamassassin-3.1.2-tokenizer-plugins-test3.patch tokenizer.pre プラグインの設定ファイル 今後、考慮すべき点 - ベイズの学習上、分かち書き処理後にひらがなやカタカナ1文字は除去した方が よいのではないか? - Encode::Detectモジュールはみんなコンパイルとインストールが出来ているのか? CPANを見ると、失敗している人の方が多いようであるが。 - MeCab-0.90rc10以降では次のようなエラーが出て、分かち書きが失敗する。 TypeError in method 'Tagger_parse', argument 2 of type 'char const *' どうしてか? まだ、深く追いかけていないが、mecab-perlのMeCab_wrap.cxxが吐き出した エラーであるところまではわかった。 ---- spamassassin-3.1.1-normalize-test2.patch (2006-04-24) test1からの変更点 - ルールnbodyを追加した。 例) nbody NBODY_DEAI /出会い/ describe NBODY_DEAI deai score NBODY_DEAI 1.0 - ヘッダのテストにおいて":utf8"を付けると、normalizeしたヘッダとのルールの 比較を行うようにした。 例) header SUBJECT_MISHODAKU_UTF8 Subject:utf8 =~ /未承諾広告/ describe SUBJECT_MISHODAKU_UTF8 Subject contains mishodaku score SUBJECT_MISHODAKU_UTF8 1.0 - normalizeのコンフィグ・スイッチを"normalize_charset"に変更した。 normalize_charsetの有無にかかわらず、従来のルールは互換性を保っている。 normalize_charsetが有効になることにより、新ルールnbodyとテストオプション :utf8が有効になるだけである。 例) normalize_charset 1 - 分かち書きプラグインを言語によって使い分けられるようにした。 - 分かち書きプラグインのパスを変更した。 後で宣言した方が有効になる。 例) v310.pre あるいは testplugin.cf に以下のどちらかを記述する。 loadplugin Mail::SpamAssassin::Plugin::Tokenizer::Kakasi loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab ---- spamassassin-3.1.1-normalize-test1.patch (2006-03-20) 本家にマージして貰いやすいように以下のポリシーで作成する。 - 互換性のためデフォルトでは無効にする - 無効にした場合のオーバーヘッドを最小にする - 世界中の人が幸せになるものはコアなコードにマージする - 日本人だけが幸せになるものはプラグインにする 久保さんのパッチからの変更点 - normalizeはコンフィグ・オプション"normalize_encoding"を"1"に設定する ことにより有効になる。このとき、コンフィグファイルに記述されたパターン は全てUTF-8の文字として扱われ、過去(生ベタ書き)とのの互換性は無くなる。 無効の場合は過去との互換性は保たれている。 例) local.cfに以下の行を追加する。 normalize_encoding 1 - 分かち書きはプラグインで有効になるようにする。 後で宣言した方が有効になる。 例) v310.pre あるいは testplugin.cf に以下のどちらかを記述する。 loadplugin Mail::SpamAssassin::Plugin::TokenizerMeCab loadplugin Mail::SpamAssassin::Plugin::TokenizerKakasi - normalize時に漢字で終わり次の行が漢字で始まる行はunfoldingする。 これによりrule判定時の単語の分断を防げる。 - ベイズのトークナイズを行うときに分かち書きを行う。 気になる点 - SAは初期化(コンフィグのロードなど)を行う前にメッセージのヘッダの解析を 行うため、そのままではヘッダのnormalizeが有効に働かない。 そのため、SpamAssassin->parse()内でinit()を呼び出すようにしたが、これが 問題(副作用)がないか調べる。 そもそも何でparse()では初期化していないのか疑問である。 - ベイズのトークナイズ前に全角空白文字を空白文字に置換した方がよいか? - 「UTF-8の文字が含まれているか」のパターンマッチの一部を「UTF-8のCJK文字 が含まれているか」に一部書き換えてしまったが問題ないか? - 英文はいい加減に書いているので見直しが必要。