[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: