você está aqui: Home  → Arquivo de Mensagens

Bogofilter e SpamAssassin

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 
 
###


Veja a relação completa dos artigos de Douglas Adriano Augusto