De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Douglas Adriano Augusto
Data de Publicação: 29 de Janeiro de 2004
Eu desenvolvi uma shell script para o treinamento inicial do bogofilter através do spamassassin. Funciona da seguinte maneira: dado um conjunto de mensagens de e-mail (cada qual em um arquivo), contendo spams e não spams, o spamassassin classifica cada uma delas, assim como o bogofilter. Em cada mensagem que a classificação do bogofilter diferir da classificação do spamassasin, este é retreinado de acordo com o palpite do spamassassin.
Com uma variedade considerável de e-mails, o bogofilter é capaz de assimilar com bastante fidelidade a experiência do spamassassin. A partir deste momento, o bogofilter já pode seguir rumo próprio, apenas refinando à medida que for necessário.
Abaixo o script:
###
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
# Modo normal (mais lento), habilitado por padrão:
$SPAMASSASSIN -e < $* > /dev/null
# Caso utilize o spamd/spamc. Este método é recomendado para o processamento em
# lote, por ser mais veloz. É necessário, entretanto, que o servidor 'spamd'
# esteja rodando. Descomente a linha a seguir e comente a linha referente ao modo normal.
#$SPAMASSASSINCLIENT -c < $* > /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
###