2006年3月20日

[SpamAssassin-JP 108] Re:SpamAssassin-3.1.1日本語対応パッチ(案、その1)

** SpamAssassin メーリングリスト **
** 注意:このメールへの返信は SpamAssassin-jp へ行きます **
久保です。

# 今朝、このメールは見ていたのですが、名古屋出張中で時間がなく、レスが遅
# れました。

> SpamAssassin-3.1.1への日本語対応パッチ案その1を作ってみました。

> パッチは次の場所に置いてあります。
> http://www.emaillab.org/spamassassin/

早速第1版を作っていただけたのですね。ありがとうございます。

svn/cvsも必要になりますね。

> 内容は下記の通りです。Kakasi, MeCab両対応です。
> ご意見、人柱報告等お願いします。
> 特に久保さんには、パッチの内容に問題ないか確認をお願いします。
> 私見ですが、互換性に関してはall or nothing(オプションスイッチのオフ・オン)
> で良いのではないかと思っています。

早速ダウンロードしました。3月中は思うように進まないかもしれませんが、読
んでみて、試してみたいと思います。

> 本家にマージして貰いやすいように以下のポリシーで作成する。
>
> - 互換性のためデフォルトでは無効にする
> - 無効にした場合のオーバーヘッドを最小にする
> - 世界中の人が幸せになるものはコアなコードにマージする
> - 日本人だけが幸せになるものはプラグインにする

このポリシーは同感です。とくにSAはPerlでただでさえかなり重いところがある
ので、オーバーヘッド/パフォーマンスにも考慮することは重要だと思います。

> 久保さんのパッチからの変更点
>
> - normalizeはコンフィグ・オプション"normalize_encoding"を"1"に設定する
> ことにより有効になる。このとき、コンフィグファイルに記述されたパターン
> は全てUTF-8の文字として扱われ、過去(生ベタ書き)とのの互換性は無くなる。
> 無効の場合は過去との互換性は保たれている。
> 例) local.cfに以下の行を追加する。
> normalize_encoding 1

以前、松田さんと議論したことがあるのですが、JISとShift-JISのスパムで内容
のニュアンスが異なる場合、従来の使いにくいルール記述方法も役立つのではな
いか、という意見があるかもしれません。

従来のbodyなどのテストはそのまま残して、わかち書きしたテキストの処理のた
めにnbody (またはlbody)などのテストを新しく作る、という方法も検討する必
要があるかもしれないですね。でも、この改造はかなり大がかりになって、オー
バーヘッドも増えるかもしれません。

> - 分かち書きはプラグインで有効になるようにする。
> 後で宣言した方が有効になる。
> 例) v310.pre あるいは testplugin.cf に以下のどちらかを記述する。
> loadplugin Mail::SpamAssassin::Plugin::TokenizerMeCab
> loadplugin Mail::SpamAssassin::Plugin::TokenizerKakasi

これはいいですね。

実は、私のパッチを作る過程で、何回か試行錯誤して、今の姿、つまりわかち書
きを実行するだけの関数に切り出したという経緯があります。プラグインにする
ということは、さらにこれを徹底した、と言えるんじゃないかと思います。

ただ、日本語の場合はTokenizerMeCab/Kakasiでいいですが、これも組み込んだ
上で中国語だったら(将来だれかが作るかもしれない)中国語独自の処理プラグイ
ンも組み込めて、言語によりそれらが使い分けられる、という構造にしておくべ
きだと思います。まだ詳しく見ていないので、すでに考慮ずみだったら言わずも
がなのコメントかもしれません。

> - normalize時に漢字で終わり次の行が漢字で始まる行はunfoldingする。
> これによりrule判定時の単語の分断を防げる。

これって、MeCabやkakasiが自動的にそのようにハンドリングしてくれませんで
したっけ?

> - ベイズのトークナイズを行うときに分かち書きを行う。

ここが、いろいろと異論があるところかもしれません。

うまい実例が見当たらないのですが、bodyテストの方でもわかち書きしておかな
いと、単語の境界の解釈によって、解釈がずれてしまうことが出るんじゃないか
と思うのですが。

先日のプレゼンの例だと、「すもももももももものうち」という文章に対して、
かりに「もももも」がスパムを特徴づけるワードだったとしたら、わかち書きし
なければヒットしてしまい、わかち書きして「すもも も もも も もも の う
ち」と変換してあればヒットしなくなりますね。

> 気になる点
>
> - SAは初期化(コンフィグのロードなど)を行う前にメッセージのヘッダの解析を
> 行うため、そのままではヘッダのnormalizeが有効に働かない。
> そのため、SpamAssassin->parse()内でinit()を呼び出すようにしたが、これが
> 問題(副作用)がないか調べる。
> そもそも何でparse()では初期化していないのか疑問である。

これは、たしかspamassassin-dev MLでも少し話題になっていました。読み返し
て、何か参考になりそうだったらお知らせします。

> - ベイズのトークナイズ前に全角空白文字を空白文字に置換した方がよいか?

これはたしかに考慮点ですね。どっちがいいのでしょう?

> - 「UTF-8の文字が含まれているか」のパターンマッチの一部を「UTF-8のCJK文字
> が含まれているか」に一部書き換えてしまったが問題ないか?

UTF-8に詳しい方、ぜひコメントしてください。

> - 英文はいい加減に書いているので見直しが必要。

:-)

--
----------------------------------------------------------------------
久保 元治 (株)サードウェア
Motoharu Kubo 274-0815 千葉県船橋市西習志野3-39-8
mkubo@xxxxx URL: http://www.3ware.co.jp/
Phone: 047-496-3341 Fax: 047-496-3370
携帯: 090-6171-5545/090-8513-0246
★弊社からのメールはZ-Linuxメールフィルタで全数検査しています★
--
SpamAssassin メーリングリスト
http://mm.apache.jp/mailman/listinfo/spamassassin-jp

投稿者 xml-rpc : 2006年3月20日 21:28
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/41009
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。