====== cPanel 共用サーバーに CRM114 をインストールする ======
[[wpjp>cPanel]] を利用している共用サーバー環境に、[[http://crm114.sourceforge.net/|CRM114]] による日本語対応スパムフィルターをインストールする方法です。
===== 必要なプログラムを準備する =====
CRM114 プログラム本体と、日本語対応するために必要な外部プログラムを準備します。
==== CRM114 本体 ====
スパムフィルター(本当は、汎用のプログラマブルな統計的言語処理フィルター)の CRM114 ですが、C言語で書かれたソースコードで提供されているので、動作させたいコンピューターの上でコンパイルしてバイナリープログラムを作らないと使えません。cPanel ホスティング環境ではCコンパイラが使えないようになっているので、これをどうにかするのが第一の関門。
[[http://crm114.sourceforge.net/wiki/doku.php?id=download|CRM114 のダウンロードページ]]を見ると、ありがたいことにコンパイル済みのバイナリーイメージ、それも静的リンクを使ってコンパイルしてあるので、サーバーにあるライブラリに依存せずに動くやつが公開されていますので、これを使います。
上のダウンロードページで "Binary progs only" と書かれているところにあるファイルのうち、static と注釈が付いているのがそれなのですが、このうち2008年3月の BlameSteveJobs というバージョン以降のものは正規表現ライブラリなどの仕様が大幅に変わっているようで、日本語対応がうまく動いているかどうか確認できなかったため、大幅変更直前の BlameSentansoken というバージョンを使いました(CRM114 の作者の [[http://www.merl.com/people/yerazunis/|Bill Yerazunis]] は MIT の近所にある三菱電機の研究所にお勤めなんだそうですが、このバージョン、先端総研が何かやらかしたんでしょうか……)。
[[http://crm114.sourceforge.net/tarballs/|tarball のインデックスページ]]から、http://crm114.sourceforge.net/tarballs/crm114-20080326-BlameSentansoken.i386.tar.gz
をダウンロードして展開(あるいはサーバー上のシェルで wget して tar xvfz)します。
場所はどこでもいいのですが、ここでは自分の home ディレクトリの下に bin/crm114 というディレクトリを作りました。
==== 日本語対応のためのプログラム ====
CRM114 と組み合わせて使う、日本語メールのいろんな文字コードエンコーディングを変換するプログラムには Ruby の中に標準で組み込まれている nkf を使います。また、日本語テキストを分かち書きプログラムには、工藤拓さんが作ったピュア JavaScript の分かち書きソフト [[http://www.chasen.org/~taku/software/TinySegmenter/|TinySegmenter]] をもとにして Ruby で書かれた [[http://ultraist.hatenablog.com/entry/20120603/1338675881|BimyouSegmenter]] をつかわせてもらいます。BimyouSegmenter には最初から nkf モジュールを使った文字コード変換が入っているので、これ一本で用が済みます。
[[https://github.com/nagadomi/bimyou_segmenter|BimyouSegmenter の GitHub]] からプログラムを zip でダウンロード。
bin/bimyou_segmenter という Ruby ファイルが本体なので、これを先ほどの home の下の bin ディレクトリにコピー。また、lib/ ディレクトリ以下の内容を、そっくりそのまま home の下に lib ディレクトリを作ってコピーします。
ディレクトリの内容はこんな感じになります。
~
+/bin
bimyou_segmenter
+/crm114
...
+lib
bimyou_segmenter.rb
+/bimyou_segmenter
aozora_model.rb
version.rb
bin/bimyou_segmenter の中に、ライブラリを呼び出す
require 'bimyou_segmenter'
という行があるので、
require '/home/username/lib/bimyou_segmenter'
# この例では、/home/username/ が自分のホームディレクトリ
というように、ライブラリのパスを、上でコピーした先の lib ディレクトリの下へのフルパスに書き換えます。
できあがったら、動作確認してみましょう。
[~]# bin/bimyou_segmenter ← プログラムを起動
上野発の夜行列車降りたときから ← 分かち書きしたい文章をなにか入力
上野
発の
夜行
列車
降り
た
とき
から
EOS ← 分かち書きされて出力される
^D ← Ctrl-D で入力終了
[~]#
===== CRM114 を使う環境を整える =====
必要なプログラムが準備できたので、環境の設定と、日本語対応のための改造を行います。
==== 作業用ディレクトリにファイルを揃える ====
メールが送られてきたときに CRM114 を使ってスパムかどうかの判定をするための作業用ディレクトリを作ります。
ここでは、home の下に .crm114 というディレクトリを作りました。
その中に、先ほど CRM114 のプログラムを展開したディレクトリから以下のファイルをコピーしてきます。
mailfilter.crm ← CRM114プログラム上で実行するスパムフィルターのスクリプト本体
mailfilter.cf ← 上記スクリプトの設定ファイル
rewrites.mfp ← 自分のメールアドレス、名前、メールサーバーなどを登録しておくファイル
priolist.mfp ← ドメイン指定で無条件受け容れや無条件拒否するための設定ファイル
whitelist.mfp ← 無条件で受け容れるメールアドレスを記述しておく、いわゆるホワイトリスト
==== 環境設定 ====
==== 日本語対応のための改造 ====
==== スペクトラ・ファイルを作成する ====
==== 動作テスト ====
==== トレーニング ====
===== cPanel/Exim のフィルタと CRM114 を組み合わせる =====
==== CRM114 の改造 ====
==== フィルタの設定 ====
#!/bin/sh
cat - | /home/osamuhig/bin/crm114/crm114 -u /home/osamuhig/.crm114 mailfilter.crm 2>/dev/null | /usr/sbin/sendmail -t
===== 育てながら運用 =====
==== スパム判定をトレーニングする ====
http://www.avtechpulse.com/opensource/fix-spam-classification.txt