higuchi.com blog

The means justifies the ends

How I Leaned to Stop Worrying and Love the Spam [CRM114のインストール]

さて、驚異のスパム分別精度99.98%を誇る、新型ベイジアン=マルコフモデル搭載(笑)スパムフィルターThe CRM114 Discriminatorシーアールエムワンワンフォーを日本語環境で使う実験です。
実験に入る前に、このCRM114の名前の由来について。
The CRM114 Discriminator(CRM114弁別器)は、キューブリックの映画「博士の異常な愛情」に出てくる小道具の名前です。
「博士の異常な愛情」正しくは「博士の異常な愛情 または私は如何にして心配するのを止めて水爆を愛するようになったか(原題:Dr. Strangelove: or How I Learned to Stop Worrying and Love the Bomb)」は米ソ冷戦時代の核抑止政策をテーマにしたブラックコメディで、ピンクパンサーやチャンスなどでおなじみのピーター・セラーズの1人3役やパットン大戦車軍団のジョージ・C・スコットなどの名演が光る、20世紀を代表する(と私が思っている)名作中の名作です。
この映画の中に出てくるCRM114は、米軍の基地とソ連に向けて飛ぶ戦略爆撃機の間の通信を司る機械です。通信を振り分けて、正しい“コード”がついた正当な通信しか受け付けないというしくみになっているという設定で、ストーリーの後半で重要な役割を持ちます。興味がある方はDVDをどうぞ
で、その名前をいただくスパムフィルターCRM114を日本語化してみようと思い立ったいきさつは先日書いたとおり。今日はその実践編です。 CRM114をはじめとするベイジアンフィルターは、メールの中の単語の出現頻度を元にスパムかそうでないかの判断をします。そのためにプログラムがメールの文章を単語に切り分けるようにしてやらないといけません。
英語などでは単語の間にスペースがあるので、そういう言語圏で作られたこの手のプログラムはたいていスペースを目印に単語を切り分けて作業するという作り方になっています。ところが日本語などアジアの言葉は“分かち書き”しないのが普通なので、そういうプログラムを使うときはちょっと手を入れて、分析処理の前に分かち書き処理をするように改良しないと思ったような結果が得られません(余談ですが、実はドイツ語も似たような問題があるそうです。そういえばドイツ語は単語が分離したりくっついたりしますね)。
というわけで、今回試したQuick Hackは、実はメール解析エンジンにメールの文面を渡す前に、“ありもの”のツールで分かち書きをする処理を入れるだけ、というものです。
ありがたいことに、CRM114は汎用のフィルター作成専用言語+その言語を使って書いたスパムフィルターのスクリプトという構造になっていますので、こういう改造が簡単なのです。
分かち書きには、全文検索エンジンのnamazuなどでも使われているkakasiというツールを使います。また、メールで使われているテキストの文字コードをEUC-JPに統一して変換するために、これまた長年使われているnkfというツールを使います。

まず、CRM114のサイトから、最新のプログラムをダウンロードしてきて、サーバー上にインストールします。インストールの詳しい手順の英語のドキュメントも参照しながら作業してください。ざっとこんな手順です。

■CRM114本体をMakeする
  • CRM114のソースを展開する
  • 中にCRM114が使っている正規表現処理エンジンTREのソースが入っているので、まずそのディレクトリでconfigure(configureスクリプトに実行権限がついていないので注意)してmakeしてmake install
  • つぎにCRM114のディレクトリに戻ってMakefileを適宜書き換え(/usr/以下にインストールするようになっているので、お好みで/usr/local/に。特にFreeBSDなどBSD系では、ライブラリパスやインクルードパスの追加が必要。また、-lintlがccコマンドの行の最後に来るように($LIBS)の場所などを変えないとエラーが出るかも)てからmakeしてmake install
でインストールできます。
必要に応じてlibintl、libtext、libiconvなどのライブラリも揃えてください。

■自分のホームディレクトリにファイルを準備
スパムフィルタを使うために、自分のディレクトリにスパムフィルタプログラムそのものであるスクリプトファイル、「辞書」ファイル、設定ファイルなどを揃えます。
  • ソースファイルのディレクトリから、mailfilter.crm(スクリプト本体)、mailfilter.cf(スクリプトの設定ファイル)、*.mfpファイルをコピー
  • 同じディレクトリで
    /usr/bin/cssutil -r -b spam.css
    /usr/bin/cssutil -r -b nonspam.css
    を実行。スパムメールの中の単語を入れる辞書ファイル spam.css と、通常メールの辞書ファイル nonspam.css ができる
  • もしCRM114本体のインストール先を/usr/local/などに変えていたら、mailfilter.crmの1行目のプログラムのパスも合わせて書き換える。また、FreeBSDを使っている場合は同じく1行目の括弧から後ろを全部削除
さて、これでインストールはできました。procmailで、受信したメールをすべてmailfilter.crmを通すようにすれば、少なくとも英語スパムフィルターとしては動作するわけです。
あとは、日本語対応させるためにスクリプトをちょっと書き換えるだけです。
というところで夜も遅くなったので、続きはまた明日。nkfと、できればkakasiがサーバーに入っていないようでしたら用意しておいてください。

コメント

まだコメントはありません

コメントを書く

関連するかもしれない記事

私は如何にして心配するのをやめてスパムを愛するようになったか [CRM114の日本語対応]

さて、先日のインストール編に続いて、CRM114の日本語対応改造です。 CRM114のFAQには“BUT if you us...

この記事を読む »

Joiもすなるblog [Nucleus に日本語を通してみよう]

「今さら何を」と言われそうですが、Joi に触発されて、blog (Weblog)に興味を持ちはじめました。いわゆ...

この記事を読む »

iPhone ない人のためのガイガーカウンター測定ソフト [Geiger Robo]

iPhone ない人のためのガイガーカウンター測定ソフト [Geiger Robo]

自作ガイガーカウンターの計測データをグラフ化したり、インターネットで公開したりするためのソフ...

この記事を読む »

大は小を兼ねない [Photoshop のインストールがこける件]

Photoshop Elements 6.0 の Mac 版が出ました。Mac 用の Photoshop Elements はバージョン 4.0 が出たき...

この記事を読む »

Macユーザー限定 [サイボウズのスケジュールを iPhone のカレンダーに同期する方法]

今日日珍しく外部ツールとの連携がヒジョーに弱いサイボウズ。カレンダーの中身を携帯端末などに Sync ...

この記事を読む »

Raspberry Pi と外付けハードディスクで Time Capsule 互換機を作る

Raspberry Pi と外付けハードディスクで Time Capsule 互換機を作る

しばらく使ってなかった Raspberry Pi に、これまた使ってなかった USB 接続のハードディスクドライブを...

この記事を読む »

Windows 転送ツール

懐かしの Laplink [XP から Windows 8.1 への移行には Windows 転送ツールが使えない件]

ゴールデンウィークを迎えてご実家に帰省したら、サポート終了した Windows XP パソコンを新しい Win...

この記事を読む »

Chromiumのダッシュボード

がんばっていただきたい [Chromium OS をつついてみた]

ダッシュボード(仮UI)はWebアプリのブックマーク集連休前に Publickey の「[速報]グーグルが「Chrom...

この記事を読む »

Live.com のウェブマスターツールが無視できないらしい件 [NP_Lastmod Ver. 0.5]

某社で絶賛展開中の某ブログメディアでの実証実験の結果、Live.com の Webmaster Tools にきちんと Site...

この記事を読む »

もっとヘテロジニアス [Macに使える802.11g USB 無線LAN]

先日の記事の続きです。 上の記事は11Mbpsの古いUSB無線LANアダプタをMacで使う汎用ドライバの話でし...

この記事を読む »