本家ではNP_SpamBayesというベイジアンフィルタでspamを防ぐプラグインが話題になっているようです。先日リリースされたばかりなのですが、積極的にバージョンアップされています。
This plugin will add Spam bayesian filtering to your weblog.
ベイジアンフィルタは確率を利用して推論を行うためのアルゴリズムで、身近なところだとSpamAssassinやThunderbirdなどspam振り分けとしてはいろいろなところに搭載されています。非常に興味があるプラグインなのですが、現在のところ日本語のspamを認識することができません。
ベイジアンを使うには前処理として文章を分かち書き*1する必要があります。英語などのようにもともと単語の区切りがスペースによってわかる言語ならばよいのですが、日本語のように単語の区切りが一見してわからないような言語においては分かち書きをするためのツールをつかわなければなりません*2。
実際にソースでその部分を確認してみたのですが、連続したアルファベットの塊であって、長さが一定以上、一定以下であった場合に一つの単語として認識するようになっていましたので、jp版を作成するとすればこの部分を日本語分かち書き対応にしなければなりません。
このあたりのツールとしてはChasenとかKakasiとかMeCabなんかが有名ですけど、サーバの設定によらずにPHPから呼び出し可能な方法があればjp版を作ってみるのも面白いかも知れないですね。ちなみに分かち書きするコストは結構馬鹿にならないはずなんで、作ってみたけど重すぎて使えないという可能性も十分あるので、そのあたりは悩ましいところです。
スパムのほとんど(うちの場合全部)が英文ってこと考えると、オリジナルのまんまでも使えそうですね ^^;
あぁ、そういえば変なトラックバック(日本語)が来てたなぁ。trackback の方はまだ古いの使ってるので、送信元の記事に自分とこの url がなくても受け付けちゃうんですよね。
あー、確かにそうですね。。。。。。。
しばらくオリジナルのままで使ってみるっていうのも手ですねぇ。
メールのスパム除けにcrm114というベイジアンフィルタ+kakasiを使って、とてもうまく動いているので、私もこれ、興味あります。
分かち書きのコストですが、呼び出されるのはコメントやトラックバックのイベントが発生したときだけですから、そんなに気にすることはないんじゃないかという気がします。
サーバーの設定に依らないユニバーサルな呼び出し方法ってのはむずかしそうですけど、いちばん汎用性のある呼び出しはパイプ渡しかもしれないですね。
ご参考までに、DokuWikiの全文検索のインデクサーにMeCabを無理矢理くっつけたときのコード。
http://www.higuchi.com/doku...
樋口さんいらっしゃいませ。。
ポインタありがとうございます。いまは例のセキュリティ騒ぎでそちらの火消しに奔走している状況ですけど、そちらがひと段落したらNP_SpamBayes jpに挑戦したいと思っています。
# 自宅サーバー限定になってしまうかも知れないですけど。
NP_SpamBayes試してみましたが、ログがあまり頼りにならず。効いてるのか効いてないのかピンときません。いずれここが改良されたらじっくり使ってみたいです。いちおうしっかり効いてるみたいですが。
日本語対応については実際のところどうなのかなという気がしています。日本語トークン処理が必要という話はよく聞くのですが、実際にいろいろ試した実感としてはほとんど関係ないような。対応してないのに日本語スパムを正確に処理できるフィルターもありますし。
あっ。前にも同じようなコメント書きましたね。汗
「Outlook用のSpamBayesが日本語トークン処理してないわりに正確な判別ができている」ということを書きましたが、英文スパムではなく日本語スパムをちゃんと処理できてます。トークン処理してるはずのサンダーバードよりずっと精度高いですよ。
メールの場合は結構ヘッダが大きな情報を持ってるんで、本文が使えなくてもそれなりに動くんですけど、NP_SpamBayesは本当に本文しか見てないのでちょっと未知数かなと。。。。
とりあえず、日本語化については引き続き構想中ですんでしばしお待ちを。
なるほど、それはそうでした。2行しかないようなスパムメールでも正確に処理できるのは、そりゃそうですね。
http://japan.cnet.com/news/...
http://www.itmedia.co.jp/ne...
上記のAPIサービス、日本語処理対策に使えたりするのかな?と思いました。
ありがとうございます。
そう思って早速作ってみました。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。