Linux My Tips ちょっとしたヒントとメモ
I enjoy Linux Linux 関連ページの目次にもどる。
plamo4.03をインストールしたマシン
00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] System Controller (rev 12) 00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 [IGD4-1P] AGP Bridge 00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40) 00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C/VT8235 PIPC Bus Master IDE (rev 06) 00:07.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 50) 00:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev 02) 00:08.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 02) 00:09.0 Ethernet controller: Digital Equipment Corporation DECchip 21142/43 (rev 41) 00:0a.0 SCSI storage controller: LSI Logic / Symbios Logic 53c875 (rev 03) 01:05.0 VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 85)
mew4
plamo 4.03_01.iso(8/17版)をインストールして、 mew4 にいれかえてみました。 このページを眺めていたら、 Mew4FAQ
スパムフィルタ †
* 取得、あるいはスキャン時に、メッセージに 'o' や 'D' マークを付ける
ことが可能になりました。(mew-inbox-action-alist)
* pick のような感じでコマンドを呼び出して、スパムに '*' マークを付け
ることができます。
* IMAP サーバ内でスパムを削除/リファイルし、必要なメッセージだけを
スキャンできるようになりました。('mew-imap-spam-field')
* 現在のメッセージをスパム、あるいは非スパム(ハム)として学習させる
ことができます。("ls" と "lh")
|
bsfilter
bsfilter
bsfilter / bayesian spam filter / ベイジアン スパム フィルタ
bsfilter with mew
bsfilter with mew
bsfilter のインストール
必要なもの
bsfilter-1.0.9.tgz
ruby-1.8.2.tar.gz
(1)bsfilter
jeanne@chie:~/tools/bsfilter-1.0.9$ ls
COPYING bsfilter/ htdocs/ mda/ mua/
$ cd ./bsfilter
jeanne@chie:~/tools/bsfilter-1.0.9/bsfilter$ ls
bsfilter* bsfilter.exe* bsfilter.exr bsfilterw.exe*
bsfilter をパスのあるディレクトリにコピー
# cp bsfilter /usr/bin
ここにあるemacs.el と mew.el のなかみを必要なファイルに書き加える。
./bsfilter-1.0.9/mua/mew4$ ls
emacs.el mew.el
* mua/mew4/emacs.elを~/.emacs.elに追加する。
* mua/mew4/mew.elを~/.mew.elに追加する。
.mew.el
;bsfilter
(setq mew-pop-proxy-server "localhost")
(setq mew-pop-proxy-port "10110")
(setq mew-scan-fields (delete mew-spam: mew-scan-fields))
(setq mew-scan-fields (delete "Body" mew-scan-fields))
(setq mew-spam: "X-Spam-Flag:")
(setq mew-scan-fields (append mew-scan-fields (list mew-spam: "Body")))
(setq mew-inbox-action-alist
'(("X-Spam-Flag:" mew-bsfilter)))
; put "D"
(defun mew-spam-bsfilter (val)
(let ((case-fold-search t))
(if (string-match "yes" val) ?D)))
; put "o +sapm" at inc
;(defun mew-spam-bsfilter (val)
; (let ((case-fold-search t))
; (if (string-match "yes" val) "+trash")))
;(if (string-match "yes" val) "+spam")))
(setq mew-inbox-action-alist
'(("X-Spam-Flag:" mew-spam-bsfilter)))
;(setq mew-inbox-action-alist
; '(("info@*:" mew-spam-bsfilter)))
; for "ls" (learn-spam)
(setq mew-spam-prog "bsfilter")
(setq mew-spam-prog-args '("-C" "-s" "-u"))
; for "lh" (learn-ham)
(setq mew-ham-prog "bsfilter")
(setq mew-ham-prog-args '("-c" "-S" "-u"))
; for "bm" (mark-spam)
(define-key mew-summary-mode-map "bm" 'mew-summary-bsfilter-mark-region)
(defun mew-summary-bsfilter-mark-region (&optional arg)
"study/judge the region and put the '*' mark onto spams.
need to re-learn if judgment of bsfilter is wrong"
(interactive "P")
(mew-pickable
(let ((func 'mew-summary-pick-with-cmd)
(mew-inherit-grep-cmd "bsfilter -a --list-spam"))
(mew-summary-pick-body func t nil 'nopattern))))
; show X-Spam-Flag and X-Spam-Probability in message buffer
(setq mew-field-spec
(reverse (append (list (car (reverse mew-field-spec)))
'(("^X-Spam-Probability:$" t)
("^X-Spam-Flag:$" t))
(cdr (reverse mew-field-spec)))))
|
(2)bsfilter の使い方
mewがメッセージを取得する際、既にMTA, POP proxy等によりX-Spam-Flagヘッダが付いている場合には、spamに自動的に"D"マークが付く。
summaryモードで以下が利用できる。
lh
learn-ham。現在のメッセージをcleanとして学習する。
ls
learn-spam。現在のメッセージをspamとして学習する。
bm
リージョン内のメイルを学習、判定。spamには"*"マークが付く。
サマリーモードで、該当メールに ls と入力してやると、
ミニバッファに Laening as spam.... というメッセージを出して、
「学習」する。
(3)bsfilter の起動
$ bsfilter --pop --auto-update --insert-flag --insert-probability --pop-server mbox.kyoto-inet.or.jp --pop-port 110 --pop-proxy-port 10110 &
確認
395 pts/0 S 0:00 ruby /usr/bin/bsfilter --pop --auto-update --insert-flag --insert-probability --pop-server mbox.kyoto-inet.or.jp --pop-port 110 --pop-proxy-port 10110
ホームディレクトリに、
bsfilter というファイルを作成し、実行許可をつける。
-rwxr--r-- 1 jeanne users 182 9月 16日 10:26 bsfilter*
-------------
/usr/bin/bsfilter --pop --auto-update --insert-flag --insert-probability --pop-server mbox.kyoto-inet.or.jp --pop-port 110 --pop-proxy-port 10110 --homedir /home/jeanne/.bsfilter
-------------
~/.bash_login ファイルに次の記述を追加。
/home/jeanne/bsfilter &
これでローカルユーザ jeanne でログインした時に
bsfilter が自動的に起動します。
bsfilter に、clean なメールと spam メールについて学習してもらう
(コマンドからもいけますが、
mew のサマリーモードで ls と入力すると学習する)
クリーンメール
$ bsfilter --add-clean ~/Mail/inbox/*
$ bsfilter --add-clean ~/Mail/メールフォルダー/*
spam メール
$ bsfilter --add-spam ~/Mail/trash/*
最後に
$ bsfilter --update
一旦学習が終わったらお試し
$ bsfilter ~/Mail/inbox/1 (番号は必要なものを)
こんな感じで該当のメールが spam かどうかをbsfilter が判断する
jeanne@chie:~$ bsfilter ~/Mail/inbox/1
combined probability /home/jeanne/Mail/inbox/1 1 0.000000
jeanne@chie:~/Mail/inbox$ bsfilter ~/Mail/inbox/81
combined probability /home/jeanne/Mail/inbox/81 1 0.500000
(5)効果!!
spam と判断されたものは、D マーク記号がつきます。
いま横行している info@ の spam はランダムなドメイン名になっているようで、
新しいものはなかなかひっかからないですね。
ここでひっかからなかったメールは ls で spam 学習をさせておきます。
mew で受け取り時に、spam は自動的に D 記号が付され、
あとは x を入力すれば、一括で trash box に移動します。
参考
bsfilteの設定
bookview
/contrib/Text
bookview-3.2-i386-P1.tgz
ndtpd-3.1.5-i386-P1.tgz
eb-4.0-i386-P1.tgz
辞書類は、
/usr/share/eb/appendix/ 以下におく
chujiten-2.3.tar.gz など
ndtpd を手動で起動するには、
# /usr/sbin/ndtpd
設定にエラーがないかどうかを調べるためには、
$ /usr/sbin/ndtpcheck
kill や restartには、
/usr/sbin/ndtpcontrol
きちんと起動するなら、
起動時に ndtp が起動するように、
/etc/inetd.conf に次の記述を加えます。
ndtp stream tcp nowait root /usr/sbin/ndtpd ndtpd --inetd
ndtpd.conf を作る
/usr/etc/ndtpd.conf.sample
ndtpd.conf.sample を ndtpd.conf として変更する。
/usr/etc/ndtpd.conf
######################################################################
# Configuration file for NDTPD and ebHTTPD.
# (Copy this file to `ndtpd.conf', and edit it.)
######################################################################
### Port number `ndtpd' binds.
### (default: ndtp)
# ndtp-port ndtp
### Port number `ebhttpd' binds.
### (default: http)
# http-port http
### Owner of the server process.
### (default: none)
#user ndtpuser
### Group of the server process.
### (default: none)
#group ndtpgrp
### How many clients can be connected to the server at the same time.
### (default: 1)
# max-clients 1
### Which hosts can or cannot connect to the server.
### (default: none)
hosts 127.0.0.1
hosts ::1
hosts !?
hosts chie.minerva.com
### Timeout seconds until the server disconnects an idle connection.
### (default: 900)
# timeout 900
### Path to a working directory.
### Please create the directory and make it be writable for the server
### processes before executing the server.
### (default: /usr/var/ndtpd)
# work-path /usr/var/ndtpd
### How many hit entries the server tries to find at a search.
### (default: 50)
# max-hits 50
### The maximum size of text the server may send as a response to
### a client.
### (default: 32768)
# max-text-size 32768
### Syslog facility
### (default: daemon)
syslog-facility local0
###
### Book entry
###
begin book
name chujiten
title 研究社 英和・和英中辞典
path /application/dict
appendix-path /usr/share/eb/appendix/chujiten-2.3
max-clients 2
hosts 127.0.0.1
hosts chie.minerva.com
alias-eiwa chujiten
alias-waei chujiten
end
begin book
name genius
title ジーニアス英和辞典
path /application/dict/genius
appendix-path /usr/share/eb/appendix/genius-1.0
max-clients 2
hosts 127.0.0.1
hosts chie.minerva.com
end
begin book
name readers
title 研究社 リーダーズ英和辞典
path /application/dict/readers
appendix-path /usr/share/eb/appendix/readers2-2.0
max-clients 2
hosts 127.0.0.1
hosts chie.minerva.com
end
begin book
name kojien
title 広辞苑 第四版 電子ブック版
path /application/dict/koujien
appendix-path /usr/share/eb/appendix/kojien4-2.2
max-clients 2
hosts 127.0.0.1
hosts chie.minerva.com
end
### Aliases.
### (default: none)
# alias-eiwa chujiten
# alias-waei chujiten
# alias-kojien iwakoku
#end
### Add a book group directive (lines between `begin book' and `end'),
### if you want to read another CD-ROM book. A book group directive
### is required for each book.