トップ «前の日記(2004-11-05(金)) 最新 次の日記(2004-11-07(日))» 編集

とた日記


2004-11-06(土) 晴 安静時心拍数 50 [長年日記]

_ bsfilter の導入

今更ながらやっと重い腰をあげて bsfilter を使ってみようと思いました。まずは mail/bsfilter を眺めてみました。japanese/ruby-chasen が復活していたようなので

diff -urN bsfilter.orig/Makefile bsfilter/Makefile
--- bsfilter.orig/Makefile      Wed Aug 25 19:47:11 2004
+++ bsfilter/Makefile   Sat Nov  6 15:55:18 2004
@@ -21,6 +21,7 @@
 USE_RUBY=      yes
 
 OPTIONS=       MECAB "Use japanese/mecab" off \
+               CHASEN "Use japanese/chasen" off \
                KAKASI "Use japanese/kakasi" off
 
 .include 
@@ -28,6 +29,9 @@
 .if defined(WITH_MECAB)
 RUN_DEPENDS+=  ${RUBY_SITEARCHLIBDIR}/MeCab.so:${PORTSDIR}/japanese/ruby-mecab
 .endif
+.if defined(WITH_CHASEN)
+RUN_DEPENDS+=  ${RUBY_SITEARCHLIBDIR}/chasen.so:${PORTSDIR}/japanese/ruby-chasen
+.endif
 .if defined(WITH_KAKASI)
 RUN_DEPENDS+=  ${RUBY_SITEARCHLIBDIR}/kakasi.so:${PORTSDIR}/japanese/ruby-kakasi
 .endif
@@ -43,5 +47,8 @@
        @${CP} -r ${WRKSRC}/${DIR} ${EXAMPLESDIR}/${DIR}
 .endfor
 .endif
+
+post-install:
+       @${CAT} ${PKGMESSAGE}
 
 .include 
diff -urN bsfilter.orig/files/bsfilter.conf.sample bsfilter/files/bsfilter.conf.sample
--- bsfilter.orig/files/bsfilter.conf.sample    Sat Aug 21 18:05:08 2004
+++ bsfilter/files/bsfilter.conf.sample Sat Nov  6 16:27:48 2004
@@ -1,4 +1,5 @@
 ## example of bsfilter.conf
+#jtokenizer chasen # 'make WITH_CHASEN=yes install'
 #jtokenizer kakasi # 'make WITH_KAKASI=yes install'
 #jtokenizer MeCab # 'make WITH_MECAB=yes install'
 spam-cutoff 0.6
diff -urN bsfilter.orig/pkg-message bsfilter/pkg-message
--- bsfilter.orig/pkg-message   Wed Mar 31 18:04:03 2004
+++ bsfilter/pkg-message        Sat Nov  6 17:46:29 2004
@@ -1,12 +1,12 @@
 Before actually using it, it is necessary to prepare a word database.
 
 1.The word contained in clean mail is counted.
-% bsfilter --add-clean ~/Maildir/.cur/*
+% bsfilter --add-clean ~/Maildir/cur/*
  or
 % cd ~/Maildir/cur/ ; ls | xargs bsfilter -c
 
 2.The word in spam is counted.
-% bsfilter --add-spam ~/Maildir/.spam/*
+% bsfilter --add-spam ~/Maildir/.spam/cur/*
  or
 % cd ~/Maildir/.spam/cur/ ; ls | xargs bsfilter -s
 

としてみましたが無責任にも MeCab を使ってみようと思います。まずは設定ファイルを

> mkdir ~/.bsfilter
> cp /usr/local/share/examples/bsfilter/bsfilter.conf.sample ~/.bsfilter/bsfilter.conf

とコピーして

> diff -u /usr/local/share/examples/bsfilter/bsfilter.conf.sample ~/.bsfilter/bsfilter.conf
--- /usr/local/share/examples/bsfilter/bsfilter.conf.sample     Sat Nov  6 16:43:39 2004
+++ /home/tota/.bsfilter/bsfilter.conf  Sat Nov  6 16:48:37 2004
@@ -1,7 +1,7 @@
 ## example of bsfilter.conf
 #jtokenizer chasen # 'make WITH_CHASEN=yes install'
 #jtokenizer kakasi # 'make WITH_KAKASI=yes install'
-#jtokenizer MeCab # 'make WITH_MECAB=yes install'
+jtokenizer MeCab
 spam-cutoff 0.6
 db gdbm
 

jtokenizer MeCabを有効にします。次に clean mail と spam mail を学習させます。私の場合は既に Maildir 形式の Courier-IMAP で動いていて spam mail は手動でせこせこと spam ディレクトリに移動していました。まずは clean mail の学習

> bsfilter --add-clean ~/Maildir/cur/*

次に spam mail の学習

> bsfilter --add-spam ~/Maildir/.spam/cur/*
/usr/local/bin/bsfilter: Argument list too long.

うへぇ、spam mail の数が多過ぎたようです。

> cd ~/Maildir/.spam/cur/ ; ls | xargs bsfilter -s

として回避しました。そして更新

> bsfilter --update

IMAP で便利に使えるようなので

--- /home/tota/.bsfilter/bsfilter.conf.orig     Sat Nov  6 17:08:50 2004
+++ /home/tota/.bsfilter/bsfilter.conf  Sat Nov  6 21:16:10 2004
@@ -7,10 +7,10 @@
 
 ## IMAP
 ## (bsfilter --imap --imap-fetch-unflagged --insert-flag --insert-probability -
-imap-folder-spam inbox.spam inbox)
-#imap-server server.example.com
+imap-server localhost
 #imap-auth login
-#imap-user alibaba
-#imap-password open_sesame
+imap-user tota
+imap-password HOGEHOGE
 
 ## POP Proxy
 ## (bsfilter --pop --auto-update)

と設定しておいてから

> bsfilter --imap --imap-fetch-unflagged --insert-flag --insert-probability --imap-folder-spam inbox.spam inbox.FreeBSD-users-jp

などとすれば、既に受信しているメールに対して spam 判定をし、もし spam mail ならば inbox.spam に移動します。新規に受信する時の処理は .procmailrc の最初に

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$HOME/procmaillog
LOCKFILE=$HOME/.lockmail
 
:0 fw
| /usr/local/bin/bsfilter --pipe --insert-flag --insert-probability
 
:0
* ^X-Spam-Probability: *(1|0\.[89])
.spam/
 
:0
* ^X-Spam-Probability: *0\.[567]
.spam-maybe/

といったようにしておくと inbox.spam に spam mail が溜まっていきます。誤判定の場合は再学習が必要になります。clean mail なのに inbox.spam に移動してしまったメールを inbox.spam2clean に、spam mail なのにそのままになっているメールを inbox.clean2spam にそれぞれ手動で移動させてから

#!/bin/sh
 
/usr/local/bin/bsfilter -u -C -s --imap --imap-folder-spam inbox.spam inbox.clean2spam
/usr/local/bin/bsfilter -u -c -S --imap --imap-folder-clean inbox inbox.spam2clean

のようなスクリプトを走らせれば良いようです。

_ portupgrade www/firefox graphics/gd security/openssl databases/postgresql7 devel/sdl12

firefox-1.0.r1,1            <  needs updating (port has 1.0.r2,1)
gd-2.0.28,1                 <  needs updating (port has 2.0.33,1)
openssl-0.9.7e              <  needs updating (port has 0.9.7e_1)
postgresql-7.4.5            <  needs updating (port has 7.4.6)
sdl-1.2.7_2,1               <  needs updating (port has 1.2.7_3,1)
! japanese/samba (ja-samba-2.2.10.j1.0) (unknown build error)
! www/mozilla (mozilla-1.7.2_2,2)       (unknown build error)
! java/eclipse (eclipse-3.0_1)  (missing header)
本日のツッコミ(全1件) [ツッコミを入れる]
_ otsune (2004-11-09(火) 23:54)

pkg-message腟iオ∽浦mecab386c.if ${ARCH} == i386 && defined(WITH_MECAB)<br>巨dateDate: 20041106<br>Name: <br>Mail: tota@rtfm.jp<br>Last-Modified: 1100013342<br>Visible: true<br><br>> <br><br>japanese/p5-MeCab <br>.if ${OSVERSION} < 500000<br>BROKEN= "Does not compile"<br>.endif<br>5-STABLE ${OSVERSION} < 500000 obsolete <br>Date: 20041106<br>Name: TrackBack<br>Mail: <br>Last-Modified: 1186005413<br>Visible: false<br><br>http://cialisii.flyfolder.ru<br>Cialis.<br>Cialis.<br>Link buy cialis cheap. Cialis in las vegas. Cheap cialis. Cialis.