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)
pkg-message腟 iオ∽浦mecab386c.if ${ARCH} == i386 && defined(WITH_MECAB)<br>巨date Date: 20041106<br>Name: <br>Mail: tota@rtfm.jp<br>Last-Modified: 1100013342<br>Visible: true<br><br>