-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
214 lines (162 loc) · 6.52 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
sf-0.6 -- spam filter for UNIX-like systems
Copyright (C) 2007 Masahiko Ito
These programs is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
These programs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
these programs; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
Mail suggestions and bug reports for these programs to
"Masahiko Ito" <[email protected]>
History
=======
・ 2006/10/10 Ver. 0.1 released (1st)
・ 2006/10/13 Ver. 0.2 released
- sf_check.shの処理効率化(sqlite3コマンド呼出回数の削減)。
- create table 一部項目の型をlong long intからintegerに修正。
・ 2006/10/19 Ver. 0.3 released
- READMEにnkfを利用している旨追記。
- READMEにfetchmailに関する記述追記。
- 一部の文字化けメールのスコアが常に0になっていたのを修正。
・ 2006/10/24 Ver. 0.4 released
- sf_check.sh内のselect命令を見直し。
- sf_add.sh, sf_del.sh, sf_check.sh 不正な単語に関して操作
する場合があったのを修正。
・ 2007/02/21 Ver. 0.5 released
- READMEのsf_del.shの説明間違いを修正。
- sf_add.sh, sf_del.sh, sh_check.sh 修正(uniq -c のカウント
値と内容のセパレータがバージョンによってTABであったりSPACE
であったりするのに対応)。
・2012/12/06 Ver. 0.6 released
- 小坂@岡山大学様によるGnusとの連係方法に関する情報を追加。
- テーブルに格納するデータの文字コードをutf-8に変更。
What's this ?
=============
クライアント側でのspam対策用スクリプト群です。
ベイズ理論を理解しづらいと感じたお馬鹿な私が、もっとシンプルな考え方でも効果が
見込めるのでは?と思い、自分なりの仮説に基づいてフィルタを実装してみたら、結構
いけてしまったという代物。
Contribution
============
o クライアント側でのspam対策用スクリプト群sfをGnusで使う方法
(http://film.rlss.okayama-u.ac.jp/~kgk/sf+/)
小坂@岡山大学様がsfとGnusを連係させるスクリプト等を開発されました。詳しくは、
sf+.tar.gz内の 00readme.txtを御覧ください。
小坂様ありがとうございました。(2007/02/27)
Preinstall
==========
sf-0.6は、以下のソフトウェアを利用しています。事前にインストールが必要です。
・ KAKASI - 漢字→かな(ローマ字)変換プログラム (http://kakasi.namazu.org/)
・ SQLite home page (http://www.sqlite.org/)
・ nkf Network Kanji Filter (http://sourceforge.jp/projects/nkf/)
・ GNU Textutils - Text utilities (http://www.gnu.org/software/textutils/textutils.html)
Install
=======
・ tar xvzf sf-0.6.tar.gz
・ cd sf-0.6
・ cp sf-*.sh /anywhere/bin/
・ mkdir ~/.sf
Algorithm
=========
非spam学習テーブル(以下whiteテーブル)は非spamメール中の「単語」と「出現回数」を
保持し、 spam学習テーブル(以下blackテーブル)はspamメール中の「単語」と「出現回
数」を保持します。
create table t_white (
term text primary key,
count integer
);
create table t_black (
term text primary key,
count integer
);
あるメールに関して検査を行う場合、まずそのメール本文を「単語(tango1~n)」に分解
し、それぞれの「出現回数(count1~n)」をカウントします。
「単語(tango1)」を検索キーにしてwhiteテーブルを検索し「whiteテーブル中の出現回
数」x「出現回数(count1)」/「whiteテーブル中の全単語の出現回数の総和」を求めます
(white_score)。
「単語(tango1)」を検索キーにしてblackテーブルを検索し「blackテーブル中の出現回
数」x「出現回数(count1)」/「blackテーブル中の全単語の出現回数の総和」を求めます
(black_score)。
(white_score / (white_score + black_score)) - 0.5 を求め、これを「単語(tango1)
」に対する「スコア」とする。「スコア」は-0.5~+0.5の値を取り、マイナス値はspam
傾向が高く、プラス値は非spam傾向が高い単語であることを意味する。
以下、同様に残りの「単語」についても「スコア」を求め、「単語(tango1~n)」の全「
スコア」を合計し、この合計値がマイナス値ならばspamと判断する。
How to use
==========
sf_init.sh
----------
$ sf_init.sh -h
Usage : sf_init.sh
Initialize database.
spamの判断に利用するデータベースを初期化します。システムを利用する一番最初に一
度だけ実行します。
sf_add.sh
---------
$ sf_add.sh -h
Usage : sf_add.sh [-w|--white|-b|--black] [-v|--vacuum] [file ...]
Add data to database.
-w, --white add data to white database.
-b, --black add data to black database.
-v, --vacuum vacuum after add.
データベースの学習(追加)を行います。日々やって来るspamのうち、正しくspamと判断
出来なかった物を-bオプションで学習させます。また、非spamのうち、誤って spamと判
断された物を-wオプションで学習させます。システムの利用前に、spam、非spam をそれ
ぞれ100メール程度学習させておけば、90%以上(?)の精度で振り分け出来ます。
sf_del.sh
---------
$ sf_del.sh -h
Usage : sf_del.sh [-w|--white|-b|--black] [-v|--vacuum] [file ...]
Del data from database.
-w, --white del data from white database.
-b, --black del data from black database.
-v, --vacuum vacuum after del.
データベースの学習(削除)を行います。学習ミスを取り消す場合に利用します。
sf_check.sh
-----------
$ sf_check.sh -h
Usage : sf_check.sh [-w|--white|-b|--black] [file ...]
Check file.
-w, --white check white?
-b, --black check black?
return 0 when check is true.
return 1 when check is false.
入力ファイル(またはstdin)の内容を検査し、検査スコア(実数値)をstdoutに出力後、検
査結果が真なら0、偽なら1を返します。検査スコアは、spamの場合マイナス値となり、
spamでない場合は0.0以上の値となります。無学習の場合の検査スコアは常に 0.0以上と
なります。
fetchmil, procmailとの連係
==========================
実際のspam振り分けに関してはfetchmail, procmailとの連係が良いと思います。
.fetchmailrc
------------
poll pop.anywhere.org
proto pop3
user POP_ACCOUNT_NAME
password POP_PASSWORD
is LOCAL_USERNAME
no keep
flush
no fetchall
mda "/usr/bin/procmail -f %F"
最後の「mda "/usr/bin/procmail -f %F"」が指定されていないと、fetchmailは受け取っ
たメッセージをlocalのsendmailに投げます。sendmailはマルチに処理を受け付けますの
で、一度に大量のメールをpopサーバから受けると、ロードアベレージが急激に増加して
しまいます。「mda "/usr/bin/procmail -f %F"」が指定されているとfetchmailはlocal
への配送のためにprocmail を直接呼び出すので、1通ずつ順番に処理されるためロードア
ベレージが極端に増加する事を避けることができます。
.procmailrc
-----------
:0 HB
* ? sf_check.sh -b
/home/ほげ/Mail/spam/.
sf_check.shによりspam(-b)である事を検査し、真であれば/home/ほげ/Mail/spam/にメ
ールを格納します。
BUGS
====
・ スクリプトに渡すデータに複数の文字コードが混在している場合は正しい判断が出
来ないかもしれません。