Bayesian filter for MT + MeCab

ベイジアンフィルターを使って、コメントやトラックバックのスパムをチェックするBayesian filter for MTはそのままでは英単語にしか対応していません。そこでMeCabを使って日本語にも対応させました。

ベイジアンフィルターを使って、コメントやトラックバックのスパムをチェックするBayesian filter for MTはそのままでは英単語にしか対応していません(なので、日本語のスパムに対しては無力)。LunaTearさんの所のMT用ベイズ系フィルタではKakasiをつかって日本語対応されてますが、MeCabを使って対応させる方法を書いておきます。

まず、 MeCabをインストールします。私はサーバーのroot権限を持っていなかったので、MeCabをデフォルト以外の場所にインストールしてます。MeCabの辞書の文字コードは、--with-charsetパラメーターを使ってMovableTypeのパブリッシュの文字コードと合わせておきます。

  • ./configure --prefix=/path/to/somewhere/mecab --exec-prefix=/path/to/somewhere/mecab --with-charset=utf8
  • make
  • make install

次にMecabのperlバインディングをインストールします。MeCabをデフォルトの場所以外にインストールした場合はMakefile.PLのなかのmecab-configのパスを書き換える必要があります(たぶん)。私は次のように書き換えました。

use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'CC' => `/path/to/somewhere/mecab/bin/mecab-config --cxx`,
'LD' => `/path/to/somewhere/mecab/bin/mecab-config --cxx`,
'NAME' => 'MeCab',
'VERSION_FROM' => 'MeCab.pm', # finds $VERSION
'INC' => `/path/to/somewhere/mecab/bin/mecab-config --cflags`,
'LIBS' => `/path/to/somewhere/mecab/bin/mecab-config --libs`,
'OBJECT' => 'MeCab_wrap.o'
);

その後、以下のようにしてコンパイルします。

  • perl Makefile.PL
  • make

root権限がある場合はその後にsudo make installと行えばいいのですが、権限が無い場合はblibフォルダの下からMeCab.soとMeCab.pmを探し出してきて、MovableTypeをインストールしたフォルダの中のextlibにコピーしてMecabのインストール完了です。

最後にベイジアンフィルターでMecabを使うように書き換えます。MT用ベイズ系フィルタを参考にMovableTypeをインストールしたフォルダの中のlib/MT/Bayesian.pmを次のように書き換えます。

12行目あたりに
use MeCab;
を追加。

16行目あたりに
my @mecabArg = ($0, "-Owakati");
my $mecab = new MeCab::Tagger(@mecabArg);

を追加。

40行目あたりを
my $max_token_length = 15;

my $max_token_length = 30;
に変更。

112行目あたりを
foreach $token (split /[^-¥$A-Za-z0-9¥']+/,$message) {

$message = $mecab->parse($message);
foreach $token (split /[¥s]+/,$message) {

に変更。

これで準備は完了です。あとは普段mt.cgiとしているところをmt-bayesian.cgiにしてアクセスすると普段のMovableTypeの画面にManage CommentsとManage Pingsが追加されているので、それらを使ってスパムとそうでないものを学習させていくことでスパム対策が出来るようになります。詳しくは閑話休題::Blog: ベイジアンフィルタ for MovableTypeなどを見てください。

One thought on “Bayesian filter for MT + MeCab”

  1. SPAM

    Bayesian filter for MT は、英単語にしか効果がないらしいので、うちもMeCab に対応させてみました。まだ日本語 SPAM はきたことがないのですが、HAM リストが充実するでしょう。きっと。 ただ、若干遅い、サーバのシェルアカウントを持っていない場合インストールできな…

Leave a Reply

Your email address will not be published. Required fields are marked *