nDiki : bsfilter
スポンサード リンク
Related term
2005年7月9日 (土)
■ bogofilter から bsfilter に乗り換え

spam メールは procmail で bogofilter (with nkf + KAKASI) しているのだが、以前からちょっと挙動が変である。 すり抜けてきた spam メールをあらためて、bogofilter で判定してみると spam メール判定になることがしばしば。
ということで、Mew を 4.2 にアップデートしたついでに spam フィルタを bsfilter にかえてみることにした。
sid のパッケージはちょっと古いので、tarball を持ってきて /usr/local の下に展開。
@ procmail
.procmailrc に以下を追加:
#------------------------ # bsfilter #------------------------ :0 HB: * ? /usr/local/bsfilter-1.0.7/bsfilter/bsfilter $HOME/Mail/newspam/.
@ Mew
それから Mew の方は /usr/local/bsfilter-1.0.7/mua/mew4/ の下の emacs.el と mew.el をロードするようにしておく。
- inbox に spam メールがきたら、Summary mode で 'ls'。
- (procmail の振り分けで)newspam に ham メールがきたら、Summary mode で 'lh'。
今回は収集済みの spam メールをまとめて登録することなく、新着のもののみポチポチ登録しているのだがそれでも十分振り分けてくれる。
使い始めの感蝕としては、 bogofilter より bsfilter の方が積極的に spam メール判定になっている感じだ。bigram による傾向なのかな?
- メールボックスを Gmail に集約 (2007-08-08)
- Gmail へのメールボックス移行で spam 誤判定と転送問題にぶつかる (2007-08-11)
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- Debian GNU/Linux sid 環境を新 HDD へ (2006-07-29)
- Clam AntiVirus + procmail でウイルス除去 (2004-12-11)
2006年7月29日 (土)
■ Debian GNU/Linux sid 環境を新 HDD へ

朝から ThinkPad X31 の HDD 新しく入れ替えて Debian GNU/Linux sid のインストールを開始。
@ Debian GNU/Linux のインストール
今日は sarge のネットワークインストール CD イメージからブートしてインストール。 今回はブートドライブにできる「ThinkPad USB ポータブルCD-ROMドライブ」があり、またこのイメージで起動して e1000 が認識できるので楽勝である。
(第1回目は USB FDD + PC カード NIC でインストール、第2回目 は HDD 上のインストーラから GRUB からの起動によるインストールだった)
@ 旧 HDD からのコピー
ヤバイ状態の旧 HDD を USB 外付け HDD ケースに詰めて
- /home 全部
- /usr/local で必要なもの
- 参照用に /etc の複製
- /var/www、/var/spool
を新しい HDD にコピー。
次に環境の復旧。 以下備忘録。
@ MADWIFI
以前作った Linux kernel 2.6.15 deb パッケージをインストールした後 module-assistant で madwifi をインストールするも、ビルドした GCC のバージョンが違ってロードできず。 kernel は GCC 4.0 の時にビルドしたもので、madwifi は現在のバージョンである GCC 4.1 によるビルドであることが問題。
まずは前にビルドした 2.6.15 のソースディレクトリでカーネルパッケージを GCC 4.1 で作りなおしてインストールし、あらためて module-assistant。
module-assistant prepare module-assistant auto-install madwifi
で /etc/network/interfaces を書き戻す。
@ SMTP サーバを Postfix に
ここずっと使っていた qmail をこの機会にやめることにした。 Postfix へ。
全体の設定はインストーラに従って設定。
個人設定は、
~/.qmail に
| preline /usr/bin/procmail
として procmail を使っていたので、~/.forward を作って同様に procmail に流すようにする。
"|IFS='' && exec /usr/bin/procmail -f- || exit 75 #naney"
~/.procmailrc は以前のまま。ClamAV と bsfilter でふるいにかけた後、Maildir へ。
@ bsfilter は deb のものに
以前入れた時は deb が古かったので /usr/local に自前でインストールした。 まずはこれを古い HDD から戻して動作確認後 deb のものに切り替え。
.mew.el の中も
(load "/usr/share/doc/bsfilter/examples/mua/mew4/mew.el")
に変更。
@ Samba
/etc/samba/smb.conf を書き戻す。smbpasswd でパスワード再設定。
@ X
とりあえずインストール時の設定で xorg.conf を作る。
Load "freetype"
をコメントアウトして、
Load "xtt"
に変更。
@ KDE
sid は現在 3.5.3 と 3.5.4 混在状態になっているため、依存関係の問題で簡単にはインストールできずてこずった。 kdebase-data と kdelibs-data の 3.5.3 を http://snapshot.debian.net/ からとってきて hold して 3.5.3 系 KDE として各種パッケージをインストール。
@ フレッシュリーダー
- libapache2-mod-suphp php5-cli をインストール
- /var/www/freshreader、/etc/apache2/sites-available/freshreader を戻す
- a2ensite freshreader
- /etc/init.d/apache2 reload
- /etc/hosts に freshreader を追加
@ cpufreqd
@ Skype
skype-beta-1.3.0.30-1_i386.deb をインストール。
@ cron
一般ユーザ naney の crontab ファイルを再登録。
@ Perl モジュール
足りないと気がついた時点で順次インストール。
@ autofs + smbfs (2006年8月3日)
/etc/auto.master、/etc/auto.misc を書き戻して /etc/init.d/autofs restart。
@ mt-daapd (2006年8月22日)
deb パッケージを公式サイトからダウンロードし、/etc/mt-daapd.conf を書き戻して /etc/init.d/mt-daapd restart
- 納品前日なのに /var が壊れた! HDDからのブートで Debian ... (2005-09-27)
- Debian Linux kernel 2.6.23 をビルドする。 (2007-12-23)
- Debian Linux kernel 2.6.26 にアップデート (2009-02-07)
- Linux ノート PCを iTunes サーバにしてみる (2006-01-21)
- CD-R ドライブが使えない (2006-07-27)
2007年8月8日 (水)
■ メールボックスを Gmail に集約

Gmail は2004年12月に招待してもらって登録していたのだが、アカウントは Google の各種サービス用として使っていたものの、メールボックスはほぼ全く使用していなかった。 なんだかんだいって抵抗感があった訳で。
しかし、
- ホスティングサービスで利用しているメインのメールボックスが1アカウント10MBで、数日 fetch できないと溢れてしまう。PHS を解約した今、帰省の時などは fetch できない状況になりヤバイ。
- パケ・ホーダイにしたのを機にモバイル Gmail で外出先でも仕事関連のメールをチェックできるようにしたい。
ということからメールボックス Gmail に集約してしまうことにした。
@ 移行作業
やった事は以下。
@ アカウントのパスワードを変更
pwgen で自動生成したパスワードを使っていたのだが、今後入力する機会が増えるので覚えられるものに変更。
@ メーラ (Mew) のバージョンアップ
普段使っている MUA である Mew のバージョンを 4 から 5 にバージョンアップ (Debian sid の Debian パッケージが上がった時に、ホールドしたままだった)。
もれなく k-/ が Namazu から Hyper Estraier になっていた。
@ Gmail に普段使っているメールアドレスを登録
「Gmail から直接」および「Gmail の SMTP サーバ経由」で普段使っているメールアドレスを使って送信できるようにアカウントを登録。
Web の設定画面で追加するとメールで確認コードが送られてくるので、それを使って有効化する。
@ Gmail から POP3 でメールをローカルに取れるように設定
Gmail 側で POP を有効にした後、fetchmail で fetch できるようにする。
defaults
no mimedecode
pass8bits
poll pop.gmail.com
protocol pop3
user xxx@gmail.com
password xxx
ssl
fetchall
SSL を使用して fetch できるようしておく。
設定を始めるまでは「POP3 で Gmail アカウント使うのどうよ」と思っていたけれど、SSL 経由なのでちょっと安心した。
POP 後 Gmail 側ではアーカイブに移動するようしておく。
@ Mew から Gmail の SMTP サーバ経由でメールを送れるようにする
今まで SMTP over SSH でホスティングサービス経由等で送っていたものを、Gmail に TARTTLS を使って送れるように設定する。
mew-config-alist の中で
("default"
("user" . "naney")
("mail-domain" . "naney.org")
("smtp-server" . "smtp.gmail.com")
("smtp-user" . "xxx@gmail.com")
("smtp-ssl" . t))
送信メールアドレスは user と mail-domain で設定。Gmail のアカウント名は smtp-user で設定。 smtp-ssl も t にしておく。
その他メールアドレス毎に経路を変えて送ったりしていたのだが全部同様の設定にして Gmail 経由にする。
@ Mew から自分宛のコピーを Dcc から Fcc に変更
今まで Dcc で自分宛にコピーを送って管理していたのだが、Gmail では自分が SMTP 経由で送信したメールは POP できないらしい。 げっ。
ということで Fcc を
(setq mew-fcc "+sent")
から
(setq mew-fcc "+sent,+inbox")
に変更して、sent/ 以外に inbox/ にも複製を作るようにして対処。
@ 各メールボックスから Gmail へ転送設定
普段使っている各メールアドレスのメールボックスから、全て Gmail へ転送するように設定。 たまっていた分は今まで通りの方法で fetch してクリアしておく。
@ Google ツールバーの設定を変更
Gmail カスタムボタンを表示するように変更。 ツールバーから Gmail にアクセスできるようにしておく。
@ Google Desktop (Linux 版)の設定を変更
Gmail アカウントを登録。 Google デスクトップで Gmail 上のメールを検索できるようにしておく。
@ iモードから、モバイル Gmailへアクセスしてみる
試しに使ってみる。
モバイル Gmail から送られるメールの From: は Gmail でデフォルト設定したもので固定らしい。 ちょっと融通が効かない。
ま、プライベートのメールはiモードメールで送ってしまっても良いので、Gmail のデフォルトのメールアドレスを仕事用のに設定しておくことで対応しよう。
これで大体設定完了。
@ 移行したことによるメリット
メリットは以下。
- メールボックスの溢れの心配がなくなる。
- Gmail spam 機能が使える。- ローカルで bsfilter 使っているけれども、それよりも強力 (多分)。
- Web ブラウザからメール送受信ができる。- 自分の端末以外でパスワードを入力するのが怖いのと、自分の端末があるなら Mew から送受信してしまうからサブで。
- iモードからメールをチェックできる。
Gmail で言うところのスレッドについては、ちょっと慣れが必要そうだな。
@ 移行したことによるデメリット
- メールがローカルまで落ちてくるのが遅くなる。- 各メールボックスからの転送分のタイムラグがある。さらに Gmail では受信してもすぐ POP できるわけではないようだ。なので、Web ブラウザ上で受信を確認していてもそれに対してローカルの Mew で引用返信がすぐできなくなってしまった。
- リモートサーバ上にメールを置いておくことに対する不安感がある。
- iモードからメールをチェックできる。見なくてもいい時に読んでしまう可能性が。
なにはともあれ、一気に移行してしまった。 細かい所で違和感がまだあるけれども、いずれ慣れるだろう。 きっとその時は便利に感じるに違いない。
ようやくこれで本当の Gmail ユーザだ。
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイ... (2006-08-08)
- Evernote 使用開始 (2009-03-03)
- ケータイ用にプライベート Wiki を設置 (2008-01-07)
- 今日のさえずり - 入り口に盛り塩? (2010-02-15)
- Google Buzz がきたのであわてて Gmail を2つに分けた (2010-02-11)
2007年8月11日 (土)
■ Gmail へのメールボックス移行で spam 誤判定と転送問題にぶつかる

全てのメールボックスを Gmail に集約してから3日目。
いろいろと気がついた点等をメモ。
@ spam 誤判定が多い
今まで使っていた bogofilter や bsfilter では比較的安全側にふってあって、spam メールが ham メールと判定されることはあっても(結構ある)、ham メールが spam メールと判定されることはほとんどなかった。
しかし Gmail はかなり過激に spam メールと判定してくれる。 気をつけないとメールを見逃がすので、今のところ定期的「迷惑メール」をチェックする必要がある。
面倒だけれどもしょうがない。ある程度学習したら落ちつくのか?
@ うまくメールが転送されてこない?
何かぐっと届くメールが減った感じがしたので確認したら、今まで使っていたメールボックスに、転送に失敗したのか80通強ほどメールが溜っていた。
送り側が悪いのか Gmail 側が悪いのかわからないけれども、これは困る。 メーリングリストやメールマガジン系が転送できていない傾向が強いが、かといって全てがそうなわけでもない。うーん。
「パスワードを登録する」のと「POP3 で平文パスワードが流れるようになる」のがかなり嫌なんだけれども、しょうがないので転送をやめて Gmail 側から POP することにした。
今まで取れていなかったメールもとりあえず取りこぼさないようになりそう。
この設定でまたしばらく様子見。
- メールボックスを Gmail に集約 (2007-08-08)
- Google AdSense (2004-07-03)
- bogofilter から bsfilter に乗り換え (2005-07-09)
- Linux 母艦ノート PC を使わずに仕事ができるかチャレンジ (2007-08-20)
- 今日のさえずり - ガッツフィーリング (2009-02-28)
2007年12月29日 (土)
■ Twitter ベイジアンフィルタプロキシ

Twitter で following が増えてくるにつれて、タイムラインに目を通すのが大変になってきた(という程きちんと見ている訳ではないが)。 さっとタイムラインをなめて面白そうな情報をピックアップしたい時は、「おはよう」とか「風呂入った」とか「トイレ」とかは除外して読みたい(そういう書き込み自体は嫌いじゃないのだが、人生はあまりにも短い)。
Twit や P3:PeraPeraPrv では NG ワード指定ができて、それらを含むステータスは表示しないようにできるのだが、Twitter の書き込みは揺らぎが激しすぎて指定しきれないという弱点がる。
ということでベイジアンフィルタでフィルタリングしてみることにした。
自前で Twitter クライアントを作る気はないので、proxy の形でさっと実装してみた。
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Proxy;
use HTTP::Proxy::BodyFilter::complete;
my $proxy = HTTP::Proxy->new(port => 8088);
$proxy->push_filter(response => HTTP::Proxy::BodyFilter::complete->new,
mime => 'application/xml');
$proxy->push_filter(response => Bsfilter->new,
mime => 'application/xml');
$proxy->start;
{
package Bsfilter;
use File::Temp qw/tempfile/;
use XML::XPath;
use base qw(HTTP::Proxy::BodyFilter);
sub filter {
my ($self, $dataref, $message, $protocol, $buffer) = @_;
return unless defined($$dataref) && $$dataref ne '';
eval {
my $xml = XML::XPath->new(xml => $$dataref);
my @nodes = $xml->findnodes('/statuses/status/text/text()');
return unless @nodes;
for my $node (@nodes) {
my $text = $node->getNodeValue;
if (is_NG($text)) {
$node->setNodeValue("[NG] $text");
}
}
$$dataref = qq(<?xml version="1.0" encoding="UTF-8"?>\n);
$$dataref .= $xml->get_context->toString;
utf8::encode($$dataref);
};
if ($@) {
warn $@;
}
}
sub will_modify { 1 }
sub is_NG {
my ($text) = @_;
my ($fh, $filename) = tempfile();
utf8::encode($text);
print $fh $text;
close($fh);
my $result
= system(
"bsfilter --homedir ~/.twitter-bsfilter --ignore-header --auto-update $filename"
);
unlink($filename);
return !$result;
}
}
@ HTTP proxy の作成
Perl で HTTP proxy を作ろうとして真っ先に思い浮かんだのは POE だけれど、ちょっとヘビーなので今回は HTTP::Proxy をチョイス。 もともとフィルタリング HTTP proxy を作ることを念頭に置いた Perl モジュールなので今回の目的にぴったり。
1つはまった点といえば、filter の呼び出しがレスポンス全てを取得してからではなく一部分ずつの呼び出しになるところ。その仕様に気がつくのにちょっと時間がかかってしまった。 例えば XML 形式のレスポンスをフィルタしようとしても、普通に HTTP::Proxy を使うと XML の一部ずつがフィルタに渡されるため、XML のパースがうまくいかない。
これについては HTTP::Proxy::BodyFilter::complete を使うことで、まとめてフィルタに渡せるようになった。
@ レスポンスの処理
Twitter のタイムライン取得については P3:PeraPeraPrv が XML 形式で取得しているので、そのタイプのレスポンスをフィルタするようにした。
XML::XPath でステータス部分を抜き出して NG 判定し、NG であれば先頭に [NG] を追加する。 これで Twitter クライアント側で [NG] を NG ワード指定すれば、表示されないようにすることができる。
@ bsfilter による NG 判定
NG 判定は普段メールの spam フィルタとして使っている bsfilter を使った。 単純に system 関数で呼び出して結果を取得するだけ。
今回は対象がメールではないので --ignore-header を指定。また自動的に学習するように --auto-update を指定。 それと普段メールのフィルタリングに使っているのとは bsfilter のデータベースを別にしたいので、--homedir も指定しておく。
@ NG と非 NG の学習。
NG ワードを twitter-NG.txt に、非 NG ワードを twitter-clean.txt に書いて以下のコマンドを実行。
bsfilter --add-clean --ignore-header --homedir ~/.twitter-bsfilter twitter-clean.txt bsfilter --add-spam --ignore-header --homedir ~/.twitter-bsfilter twitter-NG.txt bsfilter --update --homedir ~/.twitter-bsfilter
自分の環境 (Debian GNU/Linux sid)では、UTF-8 で書いておいて問題なかった。
@ フィルタリングしてみる
あとは先の proxy を起動し、P3:PeraPeraPrv でプロキシとして localhost:8088 を指定すれば OK。
タイムラインを取得するたびに bsfilter が動いて NG なステータスには [NG] が挿入される。
@ フィルタリングの精度
これについては、まだまだチューンの必要ありかな。
- 事前の学習データが少ない。
- --auto-update していることもあり、最初に NG 判定が多いとそちら側に強化されすぎる。
- 毎回 bsfilter を呼んでいるため、同じステータスが何度も学習される。
まだ使える精度まで上がってないけれど、教師データを増やせばそれなりにいけるかもしれない。
proxy の枠組ができたので、(@~は抜いてから bsfilter に渡すとか、前後の文脈も含めるとか)いろいろ試して遊べそうではある。 別に bsfilter にこだわらず、正規表現による判定などをしてもよいし。
この辺り P3 は Java で書かれているので、プラグインを書いて拡張できるよう将来になると面白いなと思ってみたり。
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- Debian をアップデートしたら Java プログラムが通信できなくなった (2010-02-06)
- 今日のさえずり - 5:30 起床でもまだ時間が足りない (2009-09-12)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- 今日のさえずり - Twitter 日本語表示みた (2008-04-23)
2008年1月1日 (火)
■ 今日のさえずり - 「○○ったー」の「たー」って品詞は何だ

- 09:17 福茶を飲む。[mb]
- 13:34 届いた年賀状チェックした。宛名間違い「善正」はよくあって許容範囲だが、「喜生」は初めてだ。
- 19:50 Twitter ベイジアンフィルタプロキシで使っている bsfilter を --jtokenizer block にしてみた。
- 22:20 「○○ったー」の「たー」って品詞は何だ?
- 23:56 「エコ湯~ゆ」出した。
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- 今日のさえずり - Twitterご利用明細書きた。1年分請求額 12,3... (2009-12-14)
- 今日のさえずり - 「見え窓」はこの時の満足のためだけに使う (2007-12-29)
- 今日のさえずり - リサ(とガスパールのリサ)って直立不動するのか (2009-12-12)
- 今日のさえずり - 電柱にいつの間にか「うんこ」って書かれていた。治安悪化。 (2009-12-31)
2009年1月18日 (日)
■ bsfilter のトークンと Twitter

bsfilter を使った Twitter 発言のフィルタリングのため、bsfilter の仕様を確認していたところ、トークン扱いにする文字種が以外に少ないことに気がついた。 日本語については漢字とカタカナしか見ていない。
うーん、これだと Twitter の発言のトークンとしてはちょっと物足りないな。 変更するにはソースをいじる必要がありそう。 メール処理を前提にした bsfilter ではなく、汎用のベイジアンフィルタを使うようにする方がよさそうだ。
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- MAILPIA による Twitter リプライチェック (2008-11-18)
- Google Buzz がきたのであわてて Gmail を2つに分けた (2010-02-11)
- 携帯電話(iモード)から Twitter を更新する (2007-04-07)
- Twitter を使い始めて1年 (2008-04-06)
2009年11月23日 (月)
■ /home を書き戻して ThinkPad X200 へ乗り換え完了

昨日からの作業は以下。
ロストすると一番痛いのはメール。 現行の設定を引き継ぐのに必要な Debian パッケージ (postfix、fetchmail、procmail、mew、bsfilter、clamav など) をインストール。
それからいきなり X Window System が起動しないように gdm をアンインストール。 デスクトップは KDE を使っているので必要そうなパッケージを変わりにインストール。
その後 ThinkPad X31 でいつも通りに pdumpfs を実行して外付け HDD に /home・/etc・/var のスナップショットを保存。で ThinkPad X200 につなぎかえて cp -a で /home をコピー。
~/.kde/ は前回途中で KDE のバージョンが大きく上がったこともあって、移行的な設定も残っていそうなので今回は破棄して心機一転とした。
それと、こちら過去のものをそのまま使いたかったのだがなんか挙動が変だったので ~/.mozilla/ も削除して(リネームして)作り直し。ブックマークはとりあえずエクスポートして移した。 ScrapBook で保存したページも後で移行しなければな。
これで /home の移行完了。あとは同期するのも面倒なので ThinkPad X31 は退役として ThinkPad X200 を母艦とすることにしよう。
明日から ThinkPad X200 持ち歩き。
- Debian GNU/Linux sid 環境を新 HDD へ (2006-07-29)
- 今日のさえずり - ピカチュウと写真撮ってもらえる列に並んでる (2009-11-24)
- 今日のさえずり - ミニパトに男性警官が乗っているとガッカリする (2009-11-26)
- 今日のさえずり - 入り口に盛り塩? (2010-02-15)
- 納品前日なのに /var が壊れた! HDDからのブートで Debian ... (2005-09-27)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.028258s / load averages: 0.28, 0.25, 0.18
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)




twitter.com/Naney の follower になってください。