[OT] Aprendizado do Bogofilter com base no SpamAssassin: script
Leitores,
Estou fazendo uma experiência com o filtro de SPAM Bogofilter e, no intuito de
iniciá-lo automaticamente com uma boa base de conhecimento, desenvolvi um
script que é capaz de treiná-lo supervisionado pelo Spamassassin.
O treinamento trabalha sobre os erros somente (TOE), induzindo a uma base de
dados mais enxuta.
A grande vantagem é que após "incorporar" a técnica do Spamassassin, o
Bogofilter pode/deve ser refinado para os novos casos em que falhar, mantendo-o
sempre atualizado e mais preciso.
O arquivo de script está comentado e segue abaixo.
###
bogoassassin.sh
###
#!/bin/sh
# Treina a base do Bogofilter utilizando o conhecimento do Spamassassin, para
# uma dada mensagem. Se o Bogofilter classificar incorretamente (sob a
# perspectiva do spamassassin), este será re-treinado para o caso onde falhou.
# Train On Error (TOE)
# O objetivo é aproveitar toda a experiência do Spamassasin e, então, apenas
# refinar a base de dados do Bogofilter ao decorrer do tempo.
# Douglas Augusto (douglas@coc.ufrj.br), 15/Set/2003 - Sob GPL
# Uso: ./bogoassassin.sh arquivo-mensagem
# É recomendado o processamento em lote, tendo como base todas as mensagens
# previamente arquivadas:
# Ex.: for i in $(ls); do ./bogoassassin.sh $i; done
# (processa todas as mensagens do diretório atual)
# localização dos binários
BOGOFILTER="/usr/bin/bogofilter";
SPAMASSASSIN="/usr/bin/spamassassin";
SPAMASSASSINCLIENT="/usr/bin/spamc";
$BOGOFILTER < $*
# 0 = SPAM, 1 = NONSPAM
CLASS_BOGO=$?
# Classificação pelo SpamAssassin
# Caso utilize o spamd/spamc. Este método é recomendado para o processamento em
# lote, por ser mais veloz. É necerrário, entretanto, que o servidor 'spamd'
# esteja rodando.
$SPAMASSASSINCLIENT -c < $* > /dev/null
# Caso prefira o modo normal (mais lento)
#$SPAMASSASSIN -e < $* > /dev/null
# 0 = NONSPAM, >0 = SPAM
if [ $? = 0 ]; then # nao é SPAM, segundo o spamassassin
echo "- NONSPAM" "["$*"] (Spamassassin)"
if [ $CLASS_BOGO = 0 ]; then # o bogo acusou erroneamente SPAM
echo " SPAM ["$*"] (Bogofilter): Re-treinando!"
# fazer a correção
$BOGOFILTER -n < $*
else
echo " NONSPAM ["$*"] (Bogofilter): Ok!"
fi
else # é SPAM, segundo o spamassassin
echo "- SPAM" "["$*"] (Spamassassin)"
if [ $CLASS_BOGO != 0 ]; then # o bogo não acusou SPAM :(
echo " NONSPAM ["$*"] (Bogofilter): Re-treinando!"
# fazer a correção
$BOGOFILTER -s < $*
else
echo " SPAM ["$*"] (Bogofilter): Ok!"
fi
fi
###
--
Douglas Augusto
Reply to: