SpamBayes を Zope で使う
梅雨時の虫のように時々コメントスパムが大量に発生します。 以前から思案して居た SpamBayes を利用するフィルタリングを実装してみました。 この二週間ほど 象歩BBS で実際に使用してかなり効果ありと思えたので Zope プロダクト JSpamFilter-0.1.3 として公開します。 簡単に言えば SpamBayes の wrapper プロダクトです。
インストールは通常の Zope プロダクトと同様に JSpamFilter-0.1.3.tar.gz を解凍し、 $INSTANCE/Products/ 配下にコピーするだけ。 (もちろん SpamBayes がインストールされてることが条件)
試すには、まず ZMI (管理画面) で JSpamFilter のオブジェクトを作成します。 それを開いて、たとえばスパムを登録するには [Train] タグを選択します。 {名前、アドレス、記事} を入力し [Spam] ボタンをクリックします。 スパムじゃないものを登録するには [Good] ボタンをクリックします。
さて、コメントのスパム度を評価するには [Test] タグを選択します。 適当に {名前、アドレス、記事} を入力し [Get score] ボタンをクリックします。 画面の下の方に "スパム確率値" が表示されます。 Spam と Good をたかだか数個登録するだけで、結構まともな数値を表示するようです。
Zope の中から JSpamFilter を呼び出すには
PythonScript を使ってコメント登録するには以下のようにしてメソッドを呼び出します。
context.SpamDB.trainAsSpam(Comment, Name, Addr) # スパム登録 context.SpamDB.trainAsGood(Comment, Name, Addr) # 非スパム登録
上記では JSpamFilter のオブジェクトを SpamDB としています。 そしてスパム確率値を得るのは以下のコードです。0.0〜1.0の値を返します。
context.SpamDB.prob(Comment, Name, Addr)
対応するソースコードは JSpamFilter.pyです。 Zope ベースの掲示板やブログの類で、たぶん使えると思います。