+@node Filtering Spam Using spam.el
+@subsection spam.el \e$B$r;H$C$?\e(B spam \e$B$N_I2a\e(B
+@cindex spam filtering
+@cindex spam.el
+
+@code{spam.el} \e$B$N??$NL\E*$O\e(B spam \e$B8!=P$H_I2a$N$?$a$N41@)%;%s%?!<\e(B
+\e$B$r\e(B gnus \e$B$NCf$K;}$D$3$H$G$9!#$=$N$?$a$K\e(B @code{spam.el} \e$B$OFs$D$N$3$H$r9T$J\e(B
+\e$B$$$^$9\e(B: \e$BF~$C$F$/$k%a!<%k$r_I2a$7!"\e(Bspam \e$B$^$?$O\e(B ham \e$B$H$7$FCN$i$l$k%a!<%k$r\e(B
+\e$BJ,@O$9$k$3$H$G$9!#\e(B@emph{Ham} \e$B$O\e(B @code{spam.el} \e$B$N$$$?$k=j$G\e(B spam \e$B$G$O$J\e(B
+\e$B$$%a%C%;!<%8$r<($9$?$a$K;H$&L>A0$G$9!#\e(B
+
+\e$B$G$O\e(B @code{spam.el} \e$B$r\e(B load \e$B$9$k$H2?$,5/$-$k$G$7$g$&$+\e(B? \e$BBh0l$K!"0J2<$N\e(B
+\e$B%-!<%\!<%IL?Na$,;H$($k$h$&$K$J$j$^$9\e(B:
+
+@table @kbd
+@item M-d
+@itemx M s x
+@itemx S x
+@kindex M-d
+@kindex S x
+@kindex M s x
+@findex gnus-summary-mark-as-spam
+@code{gnus-summary-mark-as-spam}\e$B!#\e(B
+
+\e$B8=:_$N5-;v$K\e(B spam \e$B$H$7$F0u$rIU$1!"$=$l$r\e(B @samp{H} \e$B0u$GI=<($7$^$9!#\e(B
+Spam \e$B5-;v$r8+$?$H$-$O$$$D$G$b!"%0%k!<%W$rH4$1$kA0$KI,$:\e(B @kbd{M-d} \e$B$G$=$N\e(B
+\e$B35N,9T$K0u$rIU$1$k$h$&$K$7$F2<$5$$!#$3$l$O\e(B @emph{spam} \e$B%0%k!<%W$NL$FI5-\e(B
+\e$B;v$KBP$7$F$O<+F0E*$K9T$J$o$l$^$9!#\e(B
+
+@item M s t
+@itemx S t
+@kindex M s t
+@kindex S t
+@findex spam-bogofilter-score
+@code{spam-bogofilter-score}\e$B!#\e(B
+
+\e$B$3$N%3%^%s%I$,$A$c$s$HF/$/$?$a$K$O\e(B bogofilter \e$B$N=hM}$rM-8z$K$7$J$1$l$P$J\e(B
+\e$B$j$^$;$s!#\e(B
+
+@xref{Bogofilter}\e$B!#\e(B
+
+@end table
+
+\e$B$^$?!"\e(B@code{spam.el} \e$B$r\e(B load \e$B$9$k$H!"$=$NJQ?t72$r%+%9%?%^%$%:$9$k$3$H$,\e(B
+\e$B$G$-$k$h$&$K$J$j$^$9!#\e(B@samp{spam} \e$BJQ?t%0%k!<%W$K$D$$\e(B
+\e$B$F\e(B @code{customize-group} \e$B$r;n$7$F$_$F2<$5$$!#\e(B
+
+Ham \e$B%W%m%;%C%5!<$H\e(B spam \e$B%W%m%;%C%5!<$N35G0$OHs>o$K=EMW$G$9!#$"$k%0%k!<%W\e(B
+\e$B$N\e(B ham \e$B%W%m%;%C%5!<$H\e(B spam \e$B%W%m%;%C%5!<$O!"\e(B@code{spam-process} \e$B%0%k!<%W\e(B
+\e$B%Q%i%a!<%?$+\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$G@_Dj$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#8e$GF1MM$N%a!<%k$r\e(B spam \e$B$G$O$J$$$H2r<a$G$-$k$h$&$K$9$k$?$a$K!"\e(B
+ham \e$B%W%m%;%C%5!<$OHs\e(B spam (@emph{ham}) \e$B$G$"$k$3$H$,$o$+$C$F$$$k%a!<%k$r\e(B
+\e$B<u$1<h$C$F!"2?$i$+$NJ}K!$G=hM}$7$^$9!#\e(BSpam \e$B%W%m%;%C%5!<$O!"8e$GF1MM\e(B
+\e$B$N\e(B spam \e$B$,8!=P$5$l$k$h$&$K!"\e(Bspam \e$B$G$"$k$3$H$,$o$+$C$F$$$k%a!<%k$r<u$1<h$C\e(B
+\e$B$F=hM}$7$^$9!#\e(B
+
+gnus \e$B$O$"$J$?$,<u$1<h$C$?\e(B spam \e$B$+$i3X$S$^$9!#$"$J$?$O0l$D0J>e$N\e(B spam \e$B%0\e(B
+\e$B%k!<%W$K\e(B spam \e$B5-;v$r=8$a$F!"JQ?t\e(B @code{spam-junk-mailgroups} \e$B$rE,@Z$K@_\e(B
+\e$BDj$b$7$/$O%+%9%?%^%$%:$7$J$1$l$P$J$j$^$;$s!#$^$?!"\e(Bspam \e$B$r4^$a$k%0%k!<%W\e(B
+\e$B$r!"$=$N%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B @code{spam-contents} \e$B$r\e(B @code{gnus-group-spam-classification-spam} \e$B$K\e(B
+\e$B@_Dj$9$k$+!"$^$?$O$=$l$KBP1~$9$kJQ\e(B
+\e$B?t\e(B @code{gnus-spam-newsgroup-contents} \e$B$r%+%9%?%^%$%:$9$k$3$H$K$h$C$F@k\e(B
+\e$B8@$9$k$3$H$,$G$-$^$9!#\e(B@code{spam-contents} \e$B%0%k!<%W%Q%i%a!<%?\e(B
+\e$B$H\e(B @code{gnus-spam-newsgroup-contents} \e$BJQ?t$O!"$=$l$i$N<oJL\e(B
+\e$B$r\e(B @code{gnus-group-spam-classification-ham} \e$B$K@_Dj$9$k$3$H$K$h$C$F!"\e(B
+@emph{ham} \e$B%0%k!<%W$G$"$k$3$H$r@k8@$9$k$?$a$K;H$&$3$H$b$G$-$^$9!#%0%k!<\e(B
+\e$B%W$,\e(B @code{spam-junk-mailgroups}, @code{spam-contents} \e$B$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-newsgroup-contents} \e$B$G$"$k$3$H$r<($9J,N`$,9T$J$o$l$F\e(B
+\e$B$$$J$$$H!"$=$l$i$O\e(B @emph{\e$BL$J,N`\e(B} \e$B$G$"$k$H2r<a$5$l$^$9!#$9$Y$F$N%0%k!<%W\e(B
+\e$B$O%G%#%U%)%k%H$G$OL$J,N`$G$9!#\e(B
+
+Spam \e$B%0%k!<%W$G$O!"%G%#%U%)%k%H$G$9$Y$F$N%a%C%;!<%8$,\e(B spam \e$B$G$"$k$H2r<a\e(B
+\e$B$5$l$^$9\e(B: \e$B$=$N%0%k!<%W$KF~$k$H!"$=$l$i$K\e(B @samp{H} \e$B0u$,IU$-$^$9!#;~!9$3$l\e(B
+\e$B$i$N%a%C%;!<%8$rD4$Y$F$_$F!"$d$C$Q$j\e(B spam \e$B$G$O$J$+$C$?$9$Y$F$N5-;v$+$i\e(B
+@samp{H} \e$B0u$r>C$5$J$1$l$P$J$j$^$;$s!#\e(B@samp{H} \e$B0u$r>C$9$K$O\e(B @kbd{M-u} \e$B$G\e(B
+\e$B$=$N5-;v$r!VL$FI!W$K$9$k$+!"$"$k$$$O\e(B @kbd{d} \e$B$G\e(B spam \e$B$G$O$J$$$b$N$H$7$F\e(B
+\e$BFI$s$@$3$H$r@k8@$9$l$PNI$$$G$7$g$&!#%0%k!<%W$rH4$1$k$H$-!"$9$Y$F$N\e(B spam
+\e$B0u\e(B (@samp{H}) \e$B$,IU$$$?5-;v$O\e(B spam \e$B%W%m%;%C%5!<$KAw$i$l!"$=$l$i$r\e(B spam \e$B$N\e(B
+\e$BI8K\$H$7$F3X=,$7$^$9!#\e(B
+
+\e$B%a%C%;!<%8$OB>$N$$$m$$$m$JJ}K!$K$h$C$F$b>C5n$5$l$k$+$b$7$l$^$;$s$7!"\e(B
+@code{spam-ham-marks} \e$B$,8e=R$N$h$&$K>e=q$-$5$l$J$1$l$P!"Dc$$%9%3%"$N$?$a\e(B
+\e$B$N\e(B @samp{Y} \e$B0u$HF1MM!"%G%#%U%)%k%H$N4{FI$+L@<(E*$J>C5n$N$?$a\e(B
+\e$B$N\e(B @samp{R} \e$B$H\e(B @samp{r} \e$B0u!"<+F0$^$?$OL@<(E*$J:o=|$N$?$a\e(B
+\e$B$N\e(B @samp{X} \e$B$H\e(B @samp{K} \e$B0u!"$=$l$i$9$Y$F$,\e(B spam \e$B$H$OL54X78$G$"$k$H2r<a$5\e(B
+\e$B$l$^$9!#$3$N2>Dj$O!"K\J*$N\e(B spam \e$B$r8!=P$9$k$?$a$K>C5n\e(B (kill) \e$B%U%!%$%k$+%9\e(B
+\e$B%3%"%U%!%$%k$rFCJL$K;H$C$F$$$k>l9g$O4V0c$C$F$$$k$+$b$7$l$^$;$s!#$=$&$G$"\e(B
+\e$B$l$P\e(B @code{spam-ham-marks} \e$BJQ?t$rD4@0$9$k$Y$-$G$9!#\e(B
+
+@defvar spam-ham-marks
+\e$B$3$NJQ?t$r\e(B ham \e$B$G$"$k$H2r<a$7$?$$0u$N%j%9%H$K@_Dj$9$k$3$H$,$G$-$^$9!#%G%#\e(B
+\e$B%U%)%k%H$G$O!">C5n\e(B (deleted)\e$B!"4{FI\e(B (read)\e$B!":o=|\e(B (killed)\e$B!"\e(Bkill \e$B%U%!%$%k\e(B
+\e$B$K$"$k$b$N\e(B (kill-filed) \e$B$*$h$SDc$$%9%3%"\e(B (low-score) \e$B0u$N%j%9%H$G$9!#\e(B
+@end defvar
+
+@defvar spam-spam-marks
+\e$B$3$NJQ?t$r\e(B spam \e$B$G$"$k$H2r<a$7$?$$0u$N%j%9%H$K@_Dj$9$k$3$H$,$G$-$^$9!#%G%#\e(B
+\e$B%U%)%k%H$G$O\e(B spam \e$B0u$@$1$r;}$D%j%9%H$G$9!#\e(B
+@end defvar
+
+\e$B%0%k!<%W$rH4$1$k$H$-$K\e(B (\e$B$=$N%0%k!<%W$,\e(B @emph{\e$B2?\e(B} \e$B$G$"$C$F$b\e(B)\e$B!"$=\e(B
+\e$B$N\e(B @code{spam-contents} \e$B$NJ,N`$K$+$+$o$i$:!"\e(Bspam \e$B0u$,IU$$$F$$$k$9$Y$F$N\e(B
+\e$B5-;v$O\e(B spam \e$B%W%m%;%C%5!<$KAw$i$l!"$=$l$i$r\e(B spam \e$B$NI8K\$H$7$F3X=,$7$^$9!#\e(B
+\e$B0U?^E*$K$?$/$5$s$N>C5n$r9T$J$&$H!"$?$^$K$=$l$O8+$F$$$J$$\e(B @samp{K} \e$B0u$,IU\e(B
+\e$B$$$?5-;v$G=*$o$k$+$b$7$l$^$;$s!#$=$7$F$=$l$i$O6vA3$K\e(B spam \e$B$r4^$s$G$$$k$+\e(B
+\e$B$b$7$l$^$;$s!#:G$bNI$$$N$O!"K\Ev$N\e(B spam \e$B$K\e(B @samp{H} \e$B$,IU$$$F$$$F!"B>$K2?\e(B
+\e$B$bL5$$$3$H$r3N$+$a$k$3$H$G$9!#\e(B
+
+@emph{Spam} \e$B%0%k!<%W$rH4$1$k$H$-$K!"\e(Bspam \e$B0u$,IU$$$F$$$k$9$Y$F$N5-;v\e(B
+\e$B$K$O\e(B spam \e$B%W%m%;%C%5!<$G=hM}$7$?8e$G4|8B@Z$l>C5n$N0u$,IU$1$i$l$^$9!#$3$l\e(B
+\e$B$O\e(B @emph{\e$BL$J,N`\e(B} \e$B$^$?$O\e(B @emph{ham} \e$B%0%k!<%W$KBP$7$F$O9T$J$o$l$^$;$s!#$5\e(B
+\e$B$i$K\e(B spam \e$B%0%k!<%W$K$"$k$I$N\e(B @strong{ham} \e$B5-;v$b!"\e(B
+@code{ham-process-destination} \e$B%0%k!<%W%Q%i%a!<%?\e(B
+\e$B$+\e(B @code{gnus-ham-process-destinations} \e$BJQ?t$N$I$A$i$+$G7h$a$i$l$F$$$k>l\e(B
+\e$B=j$K0\$5$l$^$9!#>l=j$H$$$&$N$O%0%k!<%WL>$N$3$H$G$9!#\e(B
+@code{ham-process-destination} \e$B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bspam \e$B5-;v\e(B
+\e$B$OC1$K4|8B@Z$l>C5n$5$l$^$9!#\e(B
+
+@emph{Ham} \e$B%0%k!<%W$rH4$1$k$H$-$K!"\e(Bham \e$B0u$,IU$$$F$$$k$9$Y$F$N5-;v\e(B
+\e$B$O\e(B ham \e$B%W%m%;%C%5!<$KAw$i$l!"$=$l$i$r\e(B spam \e$B$G$O$J$$I8K\$H$7$F3X=,$7$^$9!#\e(B
+
+@emph{Ham} \e$B$^$?$O\e(B @emph{\e$BL$J,N`\e(B} \e$B%0%k!<%W$rH4$1$k$H$-$K!"$9$Y$F\e(B
+\e$B$N\e(B @strong{spam} \e$B5-;v$O!"\e(B@code{spam-process-destination} \e$B%0%k!<%W%Q%i%a!<\e(B
+\e$B%?$+\e(B @code{gnus-spam-process-destinations} \e$BJQ?t$N$I$A$i$+$G7h$a$i$l$F$$\e(B
+\e$B$k>l=j$K0\$5$l$^$9!#>l=j$H$$$&$N$O%0%k!<%WL>$N$3$H$G$9!#\e(B
+@code{spam-process-destination} \e$B%Q%i%a!<%?$,@_Dj$5$l$F$$$J$$$H!"\e(Bspam \e$B5-\e(B
+\e$B;v$OC1$K4|8B@Z$l>C5n$5$l$^$9!#\e(B
+
+\e$BF~$C$F$/$k%a!<%k$r_I2a$9$kL\E*$G\e(B @code{spam.el} \e$B$r;H$&$K$O!"FC5iJ,3d%j%9\e(B
+\e$B%H\e(B @code{nnmail-split-fancy} \e$B$^$?$O\e(B @code{nnimap-split-fancy} \e$B$K0J2<$rDI\e(B
+\e$B2C$7$J$1$l$P$J$j$^$;$s\e(B:
+
+@example
+(: spam-split)
+@end example
+
+\e$BFC5iJ,3d$O!"%a!<%k$N<h$j9~$_$K\e(B nnmail \e$B$+\e(B nnimap \e$B$N$I$A$i$N%P%C%/%(%s%I$r\e(B
+\e$B;H$C$F$$$k$+$K1~$8$F!"\e(B@code{nnmail-split-fancy} \e$B$^$?\e(B
+\e$B$O\e(B @code{nnimap-split-fancy} \e$B$+$i8F$P$l$k$3$H$KCm0U$7$F2<$5$$!#\e(B
+
+@code{spam-split} \e$B4X?t$OF~$C$F$/$k%a!<%k$r=hM}$7!"\e(Bspam \e$B$H;W$o$l$k%a!<%k\e(B
+\e$B$rJQ?t\e(B @code{spam-split-group} \e$B$GM?$($i$l$kL>A0$N%0%k!<%W$KAw$j$^$9!#%G%#\e(B
+\e$B%U%)%k%H$G$O$=$N%0%k!<%WL>$O\e(B @samp{spam} \e$B$G$9$,!"%+%9%?%^%$%:$9$k$3$H$O\e(B
+\e$B2DG=$G$9!#\e(B
+
+@emph{TODO: \e$B8=>u\e(B spam.el \e$B$O5-;v$r%P%C%/%(%s%I$KEjF~$9$k$3$H$@$1$r%5%]!<\e(B
+\e$B%H$7$^$9!#5-;v$,$b$O$d\e(B spam \e$B$^$?$O\e(B ham \e$B$G$O$J$$$H\e(B spam.el \e$B$KEA$($kJ}K!$O\e(B
+\e$B$"$j$^$;$s!#\e(B}
+
+@emph{TODO: spam.el \e$B$O$9$Y$F$NE}7W%G!<%?%Y!<%9$r71N}$9$k$?$a$N0lDjITJQ$N\e(B
+\e$BJ}K!$rDs6!$9$kI,MW$,$"$j$^$9!#$$$/$D$+$O$=$N5!G=$r<+A0$G;}$C$F$$$^$9$,!"\e(B
+\e$B$=$&$G$J$$$b$N$b$"$j$^$9!#\e(B}
+
+\e$B0J2<$O\e(B @code{spam-split} \e$B$NF0:n$r@)8f$9$k$?$a$K;H$&$3$H$,$G$-$k3F<o$NJ}\e(B
+\e$BK!$H!"$=$l$i$KBP1~$9$k\e(B spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$G$9\e(B:
+
+@menu
+* Blacklists and Whitelists::
+* BBDB Whitelists::
+* Blackholes::
+* Bogofilter::
+* ifile spam filtering::
+* spam-stat filtering::
+* Extending spam.el::
+@end menu
+
+@node Blacklists and Whitelists
+@subsubsection \e$B%V%i%C%/%j%9%H$H%[%o%$%H%j%9%H\e(B
+@cindex spam filtering
+@cindex whitelists, spam filtering
+@cindex blacklists, spam filtering
+@cindex spam.el
+
+@defvar spam-use-blacklist
+\e$BF~$C$F$/$k%a!<%k$rJ,3d$9$k$H$-$K%V%i%C%/%j%9%H$r;H$$$?$$>l9g$O!"$3$NJQ?t\e(B
+\e$B$r\e(B t \e$B$K@_Dj$7$F2<$5$$!#Aw?.<T$,%V%i%C%/%j%9%H$K:\$C$F$$$k%a%C%;!<%8\e(B
+\e$B$O\e(B @code{spam-split-group} \e$B$KAw$i$l$^$9!#$3$l$OL@<(E*$J_I2a4o$G!"Aw?.<T\e(B
+\e$B$,\e(B spammer \e$B$G$"$k$3$H$,Dj5A$5$l$F$$$k%a!<%k$KBP$7$F$@$1F0:n$7$^$9!#\e(B
+@end defvar
+
+@defvar spam-use-whitelist
+\e$BF~$C$F$/$k%a!<%k$rJ,3d$9$k$H$-$K%[%o%$%H%j%9%H$r;H$$$?$$>l9g$O!"$3$NJQ?t\e(B
+\e$B$r\e(B t \e$B$K@_Dj$7$F2<$5$$!#Aw?.<T$,%[%o%$%H%j%9%H$K:\$C$F$$$J$$%a%C%;!<%8\e(B
+\e$B$O\e(B @code{spam-split-group} \e$B$KAw$i$l$^$9!#$3$l$O0EL[$N_I2a4o$G!"B>$NJ}K!\e(B
+\e$B$GEA$($i$l$J$+$C$?$J$i$P!"$9$Y$F$N?M$r\e(B spammer \e$B$G$"$k$H8+$J$7$^$9!#Cm0U\e(B
+\e$B$7$F;H$C$F2<$5$$!#\e(B
+@end defvar
+
+@defvar gnus-group-spam-exit-processor-blacklist
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bspam \e$B0u$,IU$$\e(B
+\e$B$?5-;v$NAw?.<T$,%V%i%C%/%j%9%H$KDI2C$5$l$^$9!#\e(B
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-whitelist
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bham \e$B0u$,IU$$\e(B
+\e$B$?\e(B @emph{ham} \e$B%0%k!<%W$N5-;v$NAw?.<T$,%[%o%$%H%j%9%H$KDI2C$5$l$^$9!#$3\e(B
+\e$B$N\e(B ham \e$B%W%m%;%C%5!<$O\e(B @emph{spam} \e$B$+\e(B @emph{\e$BL$J,N`\e(B} \e$B%0%k!<%W$K$O8z2L$r5Z\e(B
+\e$B$\$5$J$$$3$H$KCm0U$7$F2<$5$$!#\e(B
+@end defvar
+
+\e$B%V%i%C%/%j%9%H$O!"$"$J$?$,\e(B spam \e$B$NAw?.<T$@$H9M$($k%"%I%l%9$K9gCW$9$k@55,\e(B
+\e$BI=8=$N%j%9%H$G$9!#Nc$($P\e(B @samp{vmadmin.com} \e$B$NC/$+$i$G$bMh$k%a!<%k$rAK;_\e(B
+\e$B$9$k$K$O!"$"$J$?$N%V%i%C%/%j%9%H$K\e(B @samp{vmadmin.com} \e$B$rF~$l$F2<$5$$!#6u\e(B
+\e$B$N%V%i%C%/%j%9%H$G;O$a$^$7$g$&!#%V%i%C%/%j%9%H$N3F9`L\$O\e(B Emacs \e$B$N@55,I=\e(B
+\e$B8=%7%s%?%C%/%9$r;H$$$^$9!#\e(B
+
+\e$B5U$K!"%[%o%$%H%j%9%H$O2?$N%"%I%l%9$,@5Ev$@$H9M$($i$l$k$+$r9p$2$^$9!#%[%o\e(B
+\e$B%$%H%j%9%H$KL5$$$9$Y$F$N%"%I%l%9$O\e(B spammers \e$B$@$H8+$J$5$l$^$9!#%[%o%$%H%j\e(B
+\e$B%9%H$,Hs>o$K9-$$HO0O$rM-8z$HG'$a$k$+$^$?$O42MF$G$J$$$H!"$?$V$s$3$N%*%W%7%g\e(B
+\e$B%s$O$[$H$s$I$N\e(B gnus \e$B$N%f!<%6!<$K$H$C$FM-1W$G$O$"$j$^$;$s!#\e(B
+@ref{BBDB Whitelists} \e$B$b8+$F2<$5$$!#%[%o%$%H%j%9%H$N3F9`L\$O\e(B Emacs \e$B$N@5\e(B
+\e$B5,I=8=%7%s%?%C%/%9$r;H$$$^$9!#\e(B
+
+\e$B%V%i%C%/%j%9%H$H%[%o%$%H%j%9%H$N%U%!%$%k$N=j:_$O!"\e(B
+@code{spam-directory} \e$BJQ?t\e(B (\e$B%G%#%U%)%k%H$O\e(B @file{~/News/spam}) \e$B$^$?\e(B
+\e$B$OD>@\\e(B @code{spam-whitelist} \e$B$H\e(B @code{spam-blacklist} \e$BJQ?t$G%+%9%?%^%$%:\e(B
+\e$B$9$k$3$H$,$G$-$^$9!#%[%o%$%H%j%9%H$H%V%i%C%/%j%9%H$N%U%!%$%k$O!"%G%#%U%)\e(B
+\e$B%k%H$G$O\e(B @code{spam-directory} \e$B$N%G%#%l%/%H%j$K$"$j!"$=$l$>\e(B
+\e$B$l\e(B @file{whitelist} \e$B$H\e(B @file{blacklist} \e$B$H$$$&L>A0$,IU$1$i$l$^$9!#\e(B
+
+@node BBDB Whitelists
+@subsubsection BBDB \e$B%[%o%$%H%j%9%H\e(B
+@cindex spam filtering
+@cindex BBDB whitelists, spam filtering
+@cindex BBDB, spam filtering
+@cindex spam.el
+
+@defvar spam-use-BBDB
+
+@code{spam-use-whitelist} (@pxref{Blacklists and Whitelists}) \e$B$K;w$F$$$^\e(B
+\e$B$9$,!"%[%o%$%H%j%9%H$N%"%I%l%9$N8;$H$7$F!"@55,I=8=$G$O$J$$\e(B BBDB \e$B$r;H$$$^\e(B
+\e$B$9!#\e(B@code{spam-use-BBDB} \e$B$r$A$c$s$HF0:n$5$;$k$K$O\e(B BBDB \e$B$r\e(B load \e$B$7$J$1$l\e(B
+\e$B$P$J$j$^$;$s!#\e(BBBDB \e$B$K$"$k%"%I%l%9$@$1$,5v$5$l!"B>$O$9$Y$F\e(B spam \e$B$H$7$FJ,\e(B
+\e$BN`$5$l$^$9!#\e(B
+
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-BBDB
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bham \e$B0u$,IU$$\e(B
+\e$B$?\e(B @emph{ham} \e$B%0%k!<%W$N5-;v$NAw?.<T$,\e(B BBDB \e$B$KDI2C$5$l$^$9!#$3$N\e(B ham \e$B%W\e(B
+\e$B%m%;%C%5!<$O\e(B @emph{spam} \e$B$+\e(B @emph{\e$BL$J,N`\e(B} \e$B%0%k!<%W$K$O8z2L$r5Z$\$5$J$$$3\e(B
+\e$B$H$KCm0U$7$F2<$5$$!#\e(B
+@end defvar
+
+@node Blackholes
+@subsubsection \e$B%V%i%C%/%[!<%k\e(B
+@cindex spam filtering
+@cindex blackholes, spam filtering
+@cindex spam.el
+
+@defvar spam-use-blackholes
+
+\e$B$3$N%*%W%7%g%s$O%G%#%U%)%k%H$GL58z$K$J$C$F$$$^$9!#$3$N%*%W%7%g%s$r%;%C%H\e(B
+\e$B$9$k$H!"\e(Bgnus \e$B$K%V%i%C%/%[!<%k7?$NJ,;6\e(B spam \e$B=hM}%7%9%F%`\e(B (\e$BNc$($P\e(B DCC) \e$B$r\e(B
+\e$BD4$Y$5$;$k$3$H$,$G$-$^$9!#JQ?t\e(B @code{spam-blackhole-servers} \e$B$O!"\e(Bgnus \e$B$,\e(B
+\e$B0U8+$r5a$a$k%V%i%C%/%[!<%k!&%5!<%P!<$N%j%9%H$r;}$A$^$9!#8=:_$N%j%9%H$O$+\e(B
+\e$B$J$j9-HO0O$KEO$C$F$$$^$9$,!"$b$7;~BeCY$l$J%5!<%P!<$r4^$s$G$$$?$i;d$?$A$K\e(B
+\e$BCN$i$;$k$?$a$K!"3NG'$7$F2<$5$$!#\e(B
+
+\e$B%V%i%C%/%[!<%k!&%A%'%C%/$O\e(B @code{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#$7$+\e(B
+\e$B$7\e(B @code{spam-use-dig} \e$B$r\e(B nil \e$B$K@_Dj$9$l$P!"$h$jNI$$@-G=$N$?$a\e(B
+\e$B$K\e(B @code{dns.el} \e$B$rBe$o$j$K;H$&$3$H$r\e(B @code{spam.el} \e$B$K;X<($9$k$3$H$,$G\e(B
+\e$B$-$^$9!#8=>u$G$O\e(B @code{spam-use-dig} \e$B$r\e(B nil \e$B$K@_Dj$9$k$3$H$O!"$$$/?M$+$N\e(B
+\e$B%f!<%6!<$,;H$($J$$$+$b$7$l$J$$$N$G!"$=$l$,2DG=$J@-G=2~A1$G$"$k$K$b$+$+$o\e(B
+\e$B$i$:?d>)$5$l$^$;$s!#$7$+$7!"$=$l$,F0$/$+$I$&$+$r3N$+$a$k$3$H$O$G$-$^$9!#\e(B
+
+@end defvar
+
+@defvar spam-blackhole-servers
+
+\e$B%V%i%C%/%[!<%k!&%A%'%C%/$N$?$a$K0U8+$r5a$a$k%5!<%P!<$N%j%9%H$G$9!#\e(B
+
+@end defvar
+
+@defvar spam-use-dig
+
+@code{dns.el} \e$B%Q%C%1!<%8$NBe$o$j$K\e(B @code{dig.el} \e$B%Q%C%1!<%8$r;H$$$^$9!#\e(B
+\e$B%G%#%U%)%k%H$N@_Dj$G$"$k\e(B t \e$B$,?d>)$5$l$^$9!#\e(B
+
+@end defvar
+
+\e$B%V%i%C%/%[!<%k!&%A%'%C%/$OF~$C$FMh$k%a!<%k$KBP$7$F$@$19T$J$o$l$^$9!#%V%i%C\e(B
+\e$B%/%[!<%k$K\e(B spam \e$B$^$?$O\e(B ham \e$B%W%m%;%C%5!<$O$"$j$^$;$s!#\e(B
+
+@node Bogofilter
+@subsubsection Bogofilter
+@cindex spam filtering
+@cindex bogofilter, spam filtering
+@cindex spam.el
+
+@defvar spam-use-bogofilter
+
+Eric Raymond \e$B$N?WB.$J\e(B Bogofilter \e$B$r\e(B @code{spam-split} \e$B$K;HMQ$7$?$$>l9g$O!"\e(B
+\e$B$3$NJQ?t$r%;%C%H$7$F$/$@$5$$!#$3$l$O!"%P!<%8%g%s\e(B 0.4 \e$B$N%m!<%+%k$K%Q%C%A\e(B
+\e$B$,Ev$?$C$?%3%T!<$G%F%9%H$5$l$^$7$?!#\e(B@code{spam.el} \e$B$K$"$k%$%s%9%H!<%k$K\e(B
+\e$B4X$9$k%3%a%s%H$rFI$s$G3N$+$a$F2<$5$$!#\e(B
+
+Spam \e$B5-;v$@$1$N\e(B @samp{H} \e$B0u$r4XO"IU$1$k:G>.$N@$OC$K$h$C$F!"\e(BBogofilter \e$B%H\e(B
+\e$B%l!<%K%s%0$O$9$Y$F$+$J$j<+F0E*$K$J$j$^$9!#3F%+%F%4%j!<$N\e(B spam \e$B$+$=$&$G$J\e(B
+\e$B$$?tI4\e(B (a few hundreds) \e$B$N5-;v$rF~<j$9$k$^$G!"$3$l$r$d$i$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#%7%'%k%3%^%s%I\e(B @command{head -1 ~/.bogofilter/*} \e$B$ON>J}$N5-;v$N7W?t\e(B
+\e$B$rI=<($7$^$9!#35N,%b!<%I$K$*$1$k%G%P%C%0$N$?$a$N!"$"$k$$$O9%4q?4$N$?$a$N\e(B
+\e$B%3%^%s%I\e(B @kbd{S t} \e$B$O!"\e(BBogofilter \e$B$,8=:_$N5-;v$N\e(B @emph{spamicity} (\e$BLuCm\e(B:
+spam \e$BEY\e(B?) \e$B%9%3%"\e(B (0.0\e$B!A\e(B1.0) \e$B$r!"%9%3%"$K:G$bCx$7$/4sM?$9$k5-;v$N8l$H$$$C\e(B
+\e$B$7$g$K!"B>$N%P%C%U%!$KI=<($9$k$3$H$rB%$7$^$9!#\e(B
+
+Path \e$B$K\e(B @code{bogofilter} \e$B$N<B9T%U%!%$%k$,L5$$>l9g!"\e(BBogofilter \e$B$N=hM}$O\e(B
+\e$B<h$j>C$5$l$^$9!#\e(B
+
+@end defvar
+
+@defvar gnus-group-spam-exit-processor-bogofilter
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bspam \e$B0u$,IU$$\e(B
+\e$B$?5-;v$,\e(B bogofilter \e$B$N\e(B spam \e$B%G!<%?%Y!<%9$K2C$($i$l!"\e(Bham \e$B0u$,IU$$$?5-;v\e(B
+\e$B$,\e(B bogofilter \e$B$N\e(B ham \e$B%G!<%?%Y!<%9$K2C$($i$l$^$9!#\e(B
+@strong{Bogofilter \e$B$N\e(B spam \e$B%W%m%;%C%5!<$O!"$5$i$K\e(B ham \e$B=hM}$b9T$J$&$?$@0l\e(B
+\e$B$D$N\e(B spam \e$B%W%m%;%C%5!<$G$"$k$3$H$KCm0U$7$F2<$5$$!#\e(B}
+@end defvar
+
+@node ifile spam filtering
+@subsubsection ifile \e$B$K$h$k\e(B spam \e$B$N_I2a\e(B
+@cindex spam filtering
+@cindex ifile, spam filtering
+@cindex spam.el
+
+@defvar spam-use-ifile
+
+Bogofilter \e$B$K;w$?E}7WJ,@O4o$G$"$k\e(B ifile \e$B$r\e(B @code{spam-split} \e$B$K;H$$$?$$\e(B
+\e$B>l9g$O!"$3$NJQ?t$rM-8z$K$7$F2<$5$$!#\e(B
+
+@end defvar
+
+@defvar spam-ifile-all-categories
+
+@code{spam-use-ifile} \e$B$K!"C1$J$k\e(B smap/\e$BHs\e(B-spam \e$B$G$O$J$/$F\e(B ifile \e$B$N$9$Y$F\e(B
+\e$B$N%+%F%4%j!<$rM?$($F$b$i$$$?$$$J$i$P!"$3$NJQ?t$rM-8z$K$7$F2<$5$$!#$3$l$r\e(B
+\e$B;H$&>l9g$O!"$=$NJ88%$K=q$+$l$F$$$k$h$&$K\e(B ifile \e$B$r71N}$7$F$*$+$J$1$l$P$J\e(B
+\e$B$j$^$;$s!#\e(B
+
+@end defvar
+
+@defvar spam-ifile-spam-category
+
+ifile \e$B$K4X$9$k8B$j!"$3$l$O\e(B spam \e$B%a%C%;!<%8$N%+%F%4%j!<$G$9!#<B:]$K;H$o$l\e(B
+\e$B$kJ8;zNs$OL54X78$G$9$,!"$?$V$s$"$J$?$O\e(B @samp{spam} \e$B$NCM$r;D$7$F$*$-$?$$\e(B
+\e$B$G$7$g$&!#\e(B
+@end defvar
+
+@defvar spam-ifile-database-path
+
+\e$B$3$l$O\e(B ifile \e$B%G!<%?%Y!<%9$N%U%!%$%kL>$G$9!#%G%#%U%)%k%H$G$ODj5A$5$l$F$$\e(B
+\e$B$J$$$N$G!"\e(Bifile \e$B$O$=$l<+?H$N%G%#%U%)%k%H$N%G!<%?%Y!<%9L>$r;H$$$^$9!#\e(B
+
+@end defvar
+
+ifile \e$B$N%a!<%kJ,N`4o$O!"0U?^$HL\E*$NE@$G\e(B Bogofilter \e$B$K;w$F$$$^$9!#\e(B
+Spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<!"$=$l$K\e(B spam-\e$BJ,3d\e(B (spam-split) \e$B$K\e(B ifile \e$B$,;H\e(B
+\e$B$o$l$k$Y$-$G$"$k$3$H$r<($9\e(B @code{spam-use-ifile} \e$BJQ?t$rDs6!$7$^$9!#$3$N\e(B
+\e$B5!G=$r8!::$9$k$?$a$K\e(B ifile \e$B$N%P!<%8%g%s\e(B 1.2.1 \e$B$,;H$o$l$^$7$?!#\e(B
+
+@node spam-stat spam filtering
+@subsubsection spam-\e$BE}7W\e(B (spam-stat) \e$B$K$h$k\e(B spam \e$B$N_I2a\e(B
+@cindex spam filtering
+@cindex spam-stat, spam filtering
+@cindex spam-stat.el
+@cindex spam.el
+
+@xref{Filtering Spam Using Statistics (spam-stat.el)}.
+
+@defvar spam-use-stat
+
+Emacs Lisp \e$B$K$h$kE}7WJ,@O4o$G$"$k\e(B spam-stat.el \e$B$r\e(B @code{spam-split} \e$B$K;H\e(B
+\e$B$o$;$?$$$J$i$P!"$3$NJQ?t$rM-8z$K$7$F2<$5$$!#\e(B
+
+@end defvar
+
+@defvar gnus-group-spam-exit-processor-stat
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bspam \e$B0u$,IU$$\e(B
+\e$B$?5-;v$,\e(B spam \e$B5-;vMQ$N\e(B spam-stat \e$B%G!<%?%Y!<%9$KDI2C$5$l$^$9!#\e(B
+@end defvar
+
+@defvar gnus-group-ham-exit-processor-stat
+\e$B$3$N%7%s%\%k$r!"%0%k!<%W%Q%i%a!<%?$N%+%9%?%^%$%:$K$h$C$F%0%k!<%W\e(B
+\e$B$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($k$+!"$^$?\e(B
+\e$B$O\e(B @code{gnus-spam-process-newsgroups} \e$BJQ?t$K2C$($F2<$5$$!#$3$N%7%s%\%k\e(B
+\e$B$,%0%k!<%W$N\e(B @code{spam-process} \e$B%Q%i%a!<%?$K2C$($i$l$k$H!"\e(Bham \e$B0u$,IU$$\e(B
+\e$B$?\e(B @emph{ham} \e$B%0%k!<%W$N5-;v$,Hs\e(B-spam \e$B5-;vMQ$N\e(B spam-stat \e$B%G!<%?%Y!<%9$K\e(B
+\e$BDI2C$5$l$^$9!#$3$N\e(B ham \e$B%W%m%;%C%5!<$O\e(B @emph{spam} \e$B$+\e(B @emph{\e$BL$J,N`\e(B} \e$B%0%k!<\e(B
+\e$B%W$K$O8z2L$r5Z$\$5$J$$$3$H$KCm0U$7$F2<$5$$!#\e(B
+@end defvar
+
+\e$B$3$l$O\e(B spam.el \e$B$,\e(B spam-stat.el \e$B$HF/$-9g$&$3$H$r2DG=$K$7$^$9!#\e(B
+spam-stat.el \e$B$O\e(B (Lisp \e$B$@$1$N\e(B) spam \e$BFbIt%G!<%?%Y!<%9$rDs6!$7$^$9$,!"$=$l\e(B
+\e$B$O\e(B ifile \e$B$d\e(B Bogofilter \e$B$H0c$C$F30It%W%m%0%i%`$rI,MW$H$7$^$;$s!#\e(B
+Spam \e$B$H\e(B ham \e$B$N%W%m%;%C%5!<$H\e(B @code{spam-split} \e$B$N$?$a\e(B
+\e$B$N\e(B @code{spam-use-stat} \e$BJQ?t$,Ds6!$5$l$^$9!#\e(B
+
+@node Extending spam.el
+@subsubsection spam.el \e$B$N3HD%\e(B
+@cindex spam filtering
+@cindex spam.el, extending
+@cindex extending spam.el
+
+\e$B?7$7$$%P%C%/%(%s%I\e(B blackbox \e$B$rDI2C$7$?$$$"$J$?$O!"F~$C$F$/$k%a!<%k$r_I2a\e(B
+\e$B$9$k$?$a$K0J2<$rMQ0U$7$F2<$5$$\e(B:
+
+@enumerate
+
+@item
+\e$B%3!<%I\e(B
+
+@example
+(defvar spam-use-blackbox nil
+ "Blackbox \e$B$r;H$&$H$-$O\e(B t \e$B$K$9$k!#\e(B")
+@end example
+
+@code{spam-list-of-checks} \e$B$K\e(B
+@example
+ (spam-use-blackbox . spam-check-blackbox)
+@end example
+\e$B$rDI2C!#\e(B
+
+@item
+\e$B4X?t\e(B
+
+@code{spam-check-blackbox} \e$B4X?t$r=q$$$F2<$5$$!#$=$l\e(B
+\e$B$O\e(B @samp{nil} \e$B$+\e(B @code{spam-split-group} \e$B$rJV$5$J$1$l$P$J$j$^$;$s!#$"$J\e(B
+\e$B$?$K$G$-$k$3$H$NNc$O!"4{B8$N\e(B @code{spam-check-*} \e$B4X?t$r;2>H$7$F$/$@$5$$!#\e(B
+@end enumerate
+
+Spam \e$B$H\e(B ham \e$B%a%C%;!<%8$r=hM}$9$k$K$O!"0J2<$rMQ0U$7$F2<$5$$\e(B:
+
+@enumerate
+
+@item
+\e$B%3!<%I\e(B
+
+Spam \e$B$^$?$O\e(B ham \e$B$N%W%m%;%C%5!<$rMQ0U$9$kI,MW$O$"$j$^$;$s!#\e(B
+Blackbox \e$B$,\e(B spam \e$B$^$?$O\e(B ham \e$B$N=hM}$r%5%]!<%H$9$k>l9g$@$1!"$=$l$i$rMQ0U$7\e(B
+\e$B$F2<$5$$!#\e(B
+
+@example
+(defvar gnus-group-spam-exit-processor-blackbox "blackbox"
+ "\e$B35N,$r=P$k$H$-$K8F$P$l$k\e(B blackbox \e$B$N\e(B spam \e$B%W%m%;%C%5!<!#\e(B
+Spam \e$B%0%k!<%W$@$1$KE,MQ$5$l$k!#\e(B")
+
+(defvar gnus-group-ham-exit-processor-blackbox "blackbox"
+ "\e$B35N,$r=P$k$H$-$K8F$P$l$k\e(B blackbox \e$B$N\e(B ham \e$B%W%m%;%C%5!<!#\e(B
+Spam \e$B$G$O$J$$\e(B (\e$BL$J,N`$^$?$O\e(B ham) \e$B%0%k!<%W$@$1$KE,MQ$5$l$k!#\e(B")
+
+@end example
+
+@item
+\e$B4X?t\e(B
+
+@example
+(defun spam-blackbox-register-spam-routine ()
+ (spam-generic-register-routine
+ ;; spam \e$BMQ$N4X?t\e(B
+ (lambda (article)
+ (let ((from (spam-fetch-field-from-fast article)))
+ (when (stringp from)
+ (blackbox-do-something-with-this-spammer from))))
+ ;; ham \e$BMQ$N4X?t\e(B
+ nil))
+
+(defun spam-blackbox-register-ham-routine ()
+ (spam-generic-register-routine
+ ;; spam \e$BMQ$N4X?t\e(B
+ nil
+ ;; ham \e$BMQ$N4X?t\e(B
+ (lambda (article)
+ (let ((from (spam-fetch-field-from-fast article)))
+ (when (stringp from)
+ (blackbox-do-something-with-this-ham-sender from))))))
+@end example
+
+\e$B4X?t\e(B @code{blackbox-do-something-with-this-ham-sender} \e$B$*$h\e(B
+\e$B$S\e(B @code{blackbox-do-something-with-this-spammer} \e$B$r=q$$$F2<$5$$!#%a%C%;!<\e(B
+\e$B%8$NAw?.<T$r<h$j=P$9$h$j$bJ#;($J%3!<%I$rDI2C$9$k$3$H$O2DG=$G$9$,!"%a%C%;!<\e(B
+\e$B%8A4BN$N<h$j9~$_$O!"\e(B@code{spam-fetch-field-from-fast} \e$B$GAw?.<T$r<h$j=P\e(B
+\e$B$9\e(B (\e$B%a%C%;!<%8$NAw?.<T$O\e(B gnus \e$B$K$h$C$F5-21$5$l$F$$$k\e(B) \e$B$h$j$bCx$7$/D9$/$+\e(B
+\e$B$+$k$3$H$r3P$($F$*$$$F2<$5$$!#\e(B
+
+@end enumerate
+
+@node Filtering Spam Using Statistics (spam-stat.el)
+@subsection Spam \e$B$N_I2a$KE}7W$r;H$&\e(B (spam-stat.el)
+@cindex Paul Graham
+@cindex Graham, Paul
+@cindex naive Bayesian spam filtering
+@cindex Bayesian spam filtering, naive
+@cindex spam filtering, naive Bayesian
+
+Paul Graham \e$B$O!"E}7W$r;H$C$?\e(B spam \e$B$N_I2a$K4X$9$kM%$l$?%(%C%;%$$r=q$-$^$7\e(B
+\e$B$?\e(B: @uref{http://www.paulgraham.com/spam.html,A Plan for Spam}\e$B!#$=$3$GH`\e(B
+\e$B$O\e(B SpamAssassin \e$B$K$h$C$F;H$o$l$F$$$k$h$&$J%k!<%k%Y!<%9$N_I2a$K8GM-$J7g4Y\e(B
+\e$B$K$D$$$F=R$Y$F$$$^$9!#Nc$($P\e(B: \e$BC/$+$,%k!<%k$r=q$+$J$1$l$P$J$i$J$$$7!"B>$N\e(B
+\e$B$9$Y$F$N?M$O$3$l$i$N%k!<%k$r%$%s%9%H!<%k$7$J$1$l$P$J$j$^$;$s!#$"$J$?$O$$\e(B
+\e$B$D$bCY$l$r$H$C$F$7$^$$$^$9!#$=$l$h$j$b!"$=$l$,\e(B spam \e$B$^$?$OHs\e(B-spam \e$B$K2?$H\e(B
+\e$B$J$/;w$F$$$k$+$I$&$+$K4p$E$$$F%a!<%k$r_I2a$9$k$[$&$,$O$k$+$KNI$$$@$m$&$H\e(B
+\e$BH`$O<gD%$7$^$9!#$3$l$rB,Dj$9$k0l$D$N<jCJ$OC18l$NJ,I[$G$9!#$=$N8eH`$O!"?7\e(B
+\e$BCe%a!<%k$,$"$J$?$NB>$N\e(B spam \e$B%a!<%k$K;w$F$$$k$+$I$&$+$r%A%'%C%/$9$kJ}K!$N\e(B
+\e$B5-=R$K?J$_$^$9!#\e(B
+
+\e$B4pK\E*$J0F$O$3$l$G$9\e(B: \e$B$"$J$?$N%a!<%k$NFs$D$N%3%l%/%7%g%s$r:n$j$^$9!#0l$D\e(B
+\e$B$O\e(B spam\e$B!"$b$&0l$D$OHs\e(B-spam \e$B$G!#N>J}$N%3%l%/%7%g%s$K$*$1$k3FC18l$N=P8=IQ\e(B
+\e$BEY$r?t$($F!"%3%l%/%7%g%s$N%a!<%k$NAm?t$G=E$_IU$1$r9T$J$$!"$3$N>pJs$r<-=q\e(B
+\e$B$K3JG<$7$^$9!#?7Ce%a!<%k$N$9$Y$F$NC18l$K$D$$$F!"\e(Bspam \e$B$+Hs\e(B-spam \e$B%a!<%k$K\e(B
+\e$BB0$9$k3NN($r7hDj$7$^$9!#\e(B15 \e$B$N:G$b82Cx$JC18l$r;H$C$F!"$=$N%a!<%k\e(B
+\e$B$,\e(B spam \e$B$G$"$k$3$H$N3NN($NAm7W$r7W;;$7$^$9!#$3$N3NN($,$"$kogCM$h$j9b$+$C\e(B
+\e$B$?$i!"$=$N%a!<%k$O\e(B spam \e$B$G$"$k$H9M$($i$l$^$9!#\e(B
+
+gnus \e$B$O$3$N<o$N_I2a$r%5%]!<%H$7$^$9!#$7$+$7$=$l$K$O$$$/$D$+$N@_Dj$,I,MW\e(B
+\e$B$G$9!#Bh0l$K!"$"$J$?$N%a!<%k$NFs$D$N%3%l%/%7%g%s$,MW$j$^$9!#0l$D$O\e(B spam\e$B!"\e(B
+\e$B$b$&0l$D$OHs\e(B-spam \e$B$G!#$=$7$F!"$=$l$i$NFs$D$N%3%l%/%7%g%s$r;H$C$F<-=q$r:n\e(B
+\e$B$j!"$=$l$r%;!<%V$7$F2<$5$$!#$=$7$FFC$K:G8e$K!"$"$J$?$NFC5iJ,3d$N5,B'$G$3\e(B
+\e$B$N<-=q$r;H$C$F2<$5$$!#\e(B
+
+@menu
+* Creating a spam-stat dictionary::
+* Splitting mail using spam-stat::
+* Low-level interface to the spam-stat dictionary::
+@end menu
+
+@node Creating a spam-stat dictionary
+@subsubsection spam-\e$BE}7W\e(B (spam-stat) \e$B<-=q$r:n$k\e(B
+
+\e$BE}7W$K4p$E$$$?\e(B spam \e$B_I2a$r;O$a$k$K$O!"$"$J$?$OFs$D$N%a!<%k$N%3%l%/%7%g%s\e(B
+\e$B$K4p$E$$$?E}7W$r:n$i$J$1$l$P$J$j$^$;$s!#0l$D$O\e(B spam \e$B$b$&0l$D$OHs\e(B-spam \e$B$G!#\e(B
+\e$B$=$7$F$=$l$i$NE}7W$O!"8e$GMxMQ$9$k$?$a$K<-=q$K3JG<$5$l$^$9!#$=$l$i$NE}7W\e(B
+\e$B$r0UL#$N$"$k$b$N$K$9$k$?$a$K!"N>J}$N%3%l%/%7%g%s$K$D$-?tI4DL$N%a!<%k$,I,\e(B
+\e$BMW$G$9!#\e(B
+
+\e$B:#$N$H$3$m\e(B gnus \e$B$O\e(B nnml \e$B%P%C%/%(%s%I$G$@$1<-=q$N<+F0@8@.$r%5%]!<%H$7$^$9!#\e(B
+nnml \e$B%P%C%/%(%s%I$O0lDL$N%a!<%k$K$D$-0l$D$N%U%!%$%k$G!"$9$Y$F$N%a!<%k$r\e(B
+\e$B%G%#%l%/%H%j$K3JG<$7$^$9!#0J2<$r;H$C$F2<$5$$!#\e(B
+
+@defun spam-stat-process-spam-directory
+\e$B$3$N%G%#%l%/%H%j$K$"$k$9$Y$F$N%U%!%$%k$K$D$$$F\e(B spam \e$B$NE}7W$r@8@.$7$^$9!#\e(B
+\e$B$9$Y$F$N%U%!%$%k$O0l$D$N\e(B spam \e$B%a!<%k$H$7$F07$o$l$^$9!#\e(B
+@end defun
+
+@defun spam-stat-process-non-spam-directory
+\e$B$3$N%G%#%l%/%H%j$K$"$k$9$Y$F$N%U%!%$%k$K$D$$$FHs\e(B-spam \e$B$NE}7W$r@8@.$7$^$9!#\e(B
+\e$B$9$Y$F$N%U%!%$%k$O0l$D$N\e(B spam \e$B$G$O$J$$%a!<%k$H$7$F07$o$l$^$9!#\e(B
+@end defun
+
+\e$BIaDL$O\e(B @file{~/Mail/mail/spam} \e$B$N$h$&$J%G%#%l%/%H%j\e(B (\e$BDL\e(B
+\e$B>o\e(B @samp{nnml:mail.spam} \e$B%0%k!<%W$KBP1~\e(B) \e$B$KBP$7\e(B
+\e$B$F\e(B @code{spam-stat-process-spam-directory} \e$B$r8F$V$G$7$g$&!#$^\e(B
+\e$B$?\e(B @file{~/Mail/mail/misc} \e$B$N$h$&$J%G%#%l%/%H%j\e(B (\e$BDL\e(B
+\e$B>o\e(B @samp{nnml:mail.misc} \e$B%0%k!<%W$KBP1~\e(B) \e$B$KBP$7\e(B
+\e$B$F\e(B @code{spam-stat-process-non-spam-directory} \e$B$r8F$V$G$7$g$&!#\e(B
+
+@defvar spam-stat
+\e$B$3$NJQ?t$O$9$Y$F$NE}7W$N%O%C%7%e%F!<%V%k\e(B -- \e$B2f!9$,<-=q$H8@$C$F$$$k$b\e(B
+\e$B$N\e(B -- \e$B$r;}$A$^$9!#$3$N%O%C%7%e%F!<%V%k$O!"APJ}$N%3%l%/%7%g%s$N$9$Y$F$NC1\e(B
+\e$B8l$K$D$$$F\e(B spam \e$B$*$h$SHs\e(B-spam \e$B%a!<%k$K$*$1$k=P8=IQEY$rI=$9%Y%/%H%k$r3JG<\e(B
+\e$B$7$^$9!#\e(B
+@end defvar
+
+\e$BE}7W$r:G=i$+$i:n$jD>$7$?$$$H$-$O!"<-=q$r%j%;%C%H$9$kI,MW$,$"$j$^$9!#\e(B
+
+@defun spam-stat-reset
+@code{spam-stat} \e$B%O%C%7%e%F!<%V%k$r%j%;%C%H$7!"$9$Y$F$NE}7W$r:o=|$7$^$9!#\e(B
+@end defun
+
+\e$B9T$J$C$?$i<-=q$r%;!<%V$7$J$1$l$P$J$j$^$;$s!#<-=q$O$+$J$jBg$-$/$J$k$+$b$7\e(B
+\e$B$l$^$;$s!#<-=q$rDI2C99?7$7$J$$>l9g\e(B (\e$B8@$$49$($k$H!"Nc$($PKh7n0l2s:n$jD>$9\e(B
+\e$B>l9g\e(B)\e$B!"IQHK$K8=$l$J$$$+!"$^$?$O\e(B spam \e$B$+Hs\e(B-spam \e$B$N$I$A$i$KB0$9$k$+$,$O$C\e(B
+\e$B$-$j$7$J$$$9$Y$F$NC18l$r:o=|$9$k$3$H$K$h$C$F!"<-=q$N%5%$%:$r>.$5$/$9$k$3\e(B
+\e$B$H$,$G$-$^$9!#\e(B
+
+@defun spam-stat-reduce-size
+\e$B<-=q$N%5%$%:$r>.$5$/$7$^$9!#$3$l$O<-=q$rDI2C99?7$7$?$/$J$$>l9g$@$1;H$C$F\e(B
+\e$B2<$5$$!#\e(B
+@end defun
+
+@defun spam-stat-save
+\e$B<-=q$r%;!<%V$7$^$9!#\e(B
+@end defun
+
+@defvar spam-stat-file
+\e$B<-=q$N3JG<$K;H$&%U%!%$%kL>$G$9!#%G%#%U%)%k%H$O\e(B @file{~/.spam-stat.el} \e$B$G\e(B
+\e$B$9!#\e(B
+@end defvar
+
+@node Splitting mail using spam-stat
+@subsubsection spam-\e$BE}7W\e(B (spam-stat) \e$B$r;H$C$F%a!<%k$rJ,3d$9$k\e(B
+
+@code{spam-stat} \e$B$r;H$C$F%a!<%k$rJ,3d$9$k$?$a$K!"\e(B@file{~/.gnus} \e$B%U%!%$%k\e(B
+\e$B$K0J2<$rDI2C$9$kI,MW$,$"$j$^$9!#\e(B
+
+@example
+(require 'spam-stat)
+(spam-stat-load)
+@end example
+
+\e$B$3$l$OI,MW$J\e(B gnus \e$B$N%3!<%I$H$"$J$?$,:n$C$?<-=q$r\e(B load \e$B$7$^$9!#\e(B
+
+\e$B<!$K!"FC5iJ,3d$N5,B'$rE,9g$5$;$kI,MW$,$"$j$^$9\e(B: \e$B$I$&$d$C\e(B
+\e$B$F\e(B @code{spam-stat} \e$B$r;H$&$+$r7h$a$F2<$5$$!#$G\e(B
+\e$B$O\e(B @samp{mail.misc} \e$B$H\e(B @samp{mail.spam} \e$B$NFs$D$N%0%k!<%W$@$1$,$"$k:G$bC1\e(B
+\e$B=c$J;vNc$G$O$I$&$J$k$+!#0J2<$N<0$O%a!<%k$,\e(B spam \e$B$G$"$k$+!"$^$?$O$=$l\e(B
+\e$B$,\e(B @samp{mail.misc} \e$B$K9T$/$Y$-$@$H8@$C$F$$$^$9!#$b$7\e(B spam \e$B$@$C$?\e(B
+\e$B$i\e(B @code{spam-stat-split-fancy} \e$B$O\e(B @samp{mail.spam} \e$B$rJV$7$^$9!#\e(B
+
+@example
+(setq nnmail-split-fancy
+ `(| (: spam-stat-split-fancy)
+ "mail.misc"))
+@end example
+
+@defvar spam-stat-split-fancy-spam-group
+Spam \e$BMQ$N%0%k!<%W$G$9!#%G%#%U%)%k%H$O\e(B @samp{mail.spam} \e$B$G$9!#\e(B
+@end defvar
+
+\e$BFCDj$NBjL>$r;}$D%a!<%k$rB>$N%0%k!<%W$KF~$l$k_I2a$r$b9T$J$$$?$$$J$i$P!"0J\e(B
+\e$B2<$N<0$r;H$C$F2<$5$$!#@55,I=8=$K9gCW$7$J$$%a!<%k$@$1$r\e(B spam \e$B$+$b$7$l$J$$\e(B
+\e$B$H9M$($^$9!#\e(B
+
+@example
+(setq nnmail-split-fancy
+ `(| ("Subject" "\\bspam-stat\\b" "mail.emacs")
+ (: spam-stat-split-fancy)
+ "mail.misc"))
+@end example
+
+\e$B:G=i$K\e(B spam \e$B$N_I2a$r$7$?$$>l9g!"<-=q$r:n$k$H$-$K==J,$KCm0U$7$J$1$l$P$J$j\e(B
+\e$B$^$;$s!#\e(B
+@code{spam-stat-split-fancy} \e$B$O\e(B @samp{mail.emacs} \e$B$H\e(B @samp{mail.misc} \e$B$N\e(B
+\e$B$I$A$i$N%a!<%k$bHs\e(B-spam \e$B$G$"$k$H2r<a$7$J$1$l$P$J$i$J$$$N$G!"<-=q$r:n$k$H\e(B
+\e$B$-$NHs\e(B-spam \e$B%3%l%/%7%g%s$KN>J}$H$bF~$C$F$$$J$1$l$P$J$i$J$$$3$H$KCm0U$7$F\e(B
+\e$B2<$5$$!#\e(B
+
+@example
+(setq nnmail-split-fancy
+ `(| (: spam-stat-split-fancy)
+ ("Subject" "\\bspam-stat\\b" "mail.emacs")
+ "mail.misc"))
+@end example
+
+\e$B$3$l$rEAE}E*$J_I2a$HAH$_9g$o$;$k$3$H$b$G$-$^$9!#$3$3$G$O2f!9$O$9$Y$F\e(B
+\e$B$N\e(B HTML \e$B$@$1$N%a!<%k$r\e(B @samp{mail.spam.filtered} \e$B%0%k!<%W$KF~$l$k$b$N$H\e(B
+\e$B$7$^$7$g$&!#\e(B@code{spam-stat-split-fancy} \e$B$O$=$l$i$N%a!<%k$r8+$J$$$N$G!"\e(B
+\e$B<-=q$r:n$k$H$-$K!"\e(B@samp{mail.spam.filtered} \e$B$N%a!<%k$,\e(B spam \e$B$^$?$O\e(B
+\e$BHs\e(B-spam \e$B%3%l%/%7%g%s$N$I$A$i$K$bF~$k$Y$-$G$O$J$$$3$H$KCm0U$7$F2<$5$$\e(B!
+
+@example
+(setq nnmail-split-fancy
+ `(| ("Content-Type" "text/html" "mail.spam.filtered")
+ (: spam-stat-split-fancy)
+ ("Subject" "\\bspam-stat\\b" "mail.emacs")
+ "mail.misc"))
+@end example
+
+@node Low-level interface to the spam-stat dictionary
+@subsubsection spam-\e$BE}7W\e(B (spam-stat) \e$B<-=q$X$NDc3,AX%$%s%?!<%U%'!<%9\e(B
+
+@code{spam-stat} \e$B$r;H$&$?$a$N<g%$%s%?!<%U%'!<%9$O0J2<$N4X?t$G$9\e(B:
+
+@defun spam-stat-buffer-is-spam
+Spam \e$B$G$"$k$H9M$($i$l$k?7Ce%a!<%k$,$"$k%P%C%U%!$G8F$P$l$^$9!#=hM}A0$N?7\e(B
+\e$BCe%a!<%k$KBP$7$F;H$C$F2<$5$$!#\e(B
+@end defun
+
+@defun spam-stat-buffer-is-no-spam
+\e$BHs\e(B-spam \e$B$G$"$k$H9M$($i$l$k?7Ce%a!<%k$,$"$k%P%C%U%!$G8F$P$l$^$9!#=hM}A0$N\e(B
+\e$B?7Ce%a!<%k$KBP$7$F;H$C$F2<$5$$!#\e(B
+@end defun
+
+@defun spam-stat-buffer-change-to-spam
+Spam \e$B$G$O$J$$DL>o$N%a!<%k$@$H$O$b$O$d9M$($i$l$J$$%a!<%k$,$"$k%P%C%U%!$G\e(B
+\e$B8F$P$l$^$9!#$9$G$KHs\e(B-spam \e$B$G$"$k$b$N$H$7$F=hM}$5$l$F$7$^$C$?%a!<%k$NCO0L\e(B
+\e$B$NJQ99$K;H$C$F2<$5$$!#\e(B
+@end defun
+
+@defun spam-stat-buffer-change-to-non-spam
+\e$BDL>o$N%a!<%k$G$O$J$$\e(B spam \e$B$@$H$O$b$O$d9M$($i$l$J$$%a!<%k$,$"$k%P%C%U%!$G\e(B
+\e$B8F$P$l$^$9!#$9$G$K\e(B spam \e$B$G$"$k$b$N$H$7$F=hM}$5$l$F$7$^$C$?%a!<%k$NCO0L$N\e(B
+\e$BJQ99$K;H$C$F2<$5$$!#\e(B
+@end defun
+
+@defun spam-stat-save
+\e$B%O%C%7%e%F!<%V%k$r%U%!%$%k$K%;!<%V$7$^$9!#JQ?t\e(B @code{spam-stat-file} \e$B$G\e(B
+\e$B@_Dj$5$l$?%U%!%$%kL>$,;H$o$l$^$9!#\e(B
+@end defun
+
+@defun spam-stat-load
+\e$B%O%C%7%e%F!<%V%k$r%U%!%$%k$+$i\e(B load \e$B$7$^$9!#JQ\e(B
+\e$B?t\e(B @code{spam-stat-file} \e$B$G@_Dj$5$l$?%U%!%$%kL>$,;H$o$l$^$9!#\e(B
+@end defun
+
+@defun spam-stat-score-word
+\e$BC18l$N\e(B spam \e$B%9%3%"$rJV$7$^$9!#\e(B
+@end defun
+
+@defun spam-stat-score-buffer
+\e$B%P%C%U%!$N\e(B spam \e$B%9%3%"$rJV$7$^$9!#\e(B
+@end defun
+
+@defun spam-stat-split-fancy
+\e$BFC5i%a!<%kJ,3d$N$?$a$K$3$N4X?t$r;H$C$F2<$5$$!#\e(B
+@code{nnmail-split-fancy} \e$B$K5,B'\e(B @samp{(: spam-stat-split-fancy)} \e$B$rDI2C\e(B
+\e$B$7$^$9!#\e(B
+@end defun
+
+\e$B$=$l$r;H$&A0$K!"I,$:<-=q$,\e(B load \e$B$5$l$F$$$k$h$&$K$7$F2<$5$$!#$3$l$K\e(B
+\e$B$O\e(B @file{~/.gnus} \e$B%U%!%$%k$K0J2<$,I,MW$G$9\e(B:
+
+@example
+(require 'spam-stat)
+(spam-stat-load)
+@end example
+
+\e$BBeI=E*$J%F%9%H$O0J2<$N4X?t8F=P$7$rI,MW$H$7$^$9\e(B:
+
+@example
+Reset: (setq spam-stat (make-hash-table :test 'equal))
+Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
+Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
+Save table: (spam-stat-save)
+File size: (nth 7 (file-attributes spam-stat-file))
+Number of words: (hash-table-count spam-stat)
+Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
+Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
+Reduce table size: (spam-stat-reduce-size)
+Save table: (spam-stat-save)
+File size: (nth 7 (file-attributes spam-stat-file))
+Number of words: (hash-table-count spam-stat)
+Test spam: (spam-stat-test-directory "~/Mail/mail/spam")
+Test non-spam: (spam-stat-test-directory "~/Mail/mail/misc")
+@end example
+
+\e$B<-=q$r@8@.$9$kJ}K!\e(B:
+
+@example
+Reset: (setq spam-stat (make-hash-table :test 'equal))
+Learn spam: (spam-stat-process-spam-directory "~/Mail/mail/spam")
+Learn non-spam: (spam-stat-process-non-spam-directory "~/Mail/mail/misc")
+Repeat for any other non-spam group you need...
+Reduce table size: (spam-stat-reduce-size)
+Save table: (spam-stat-save)
+@end example
+