Bogofilter e SpamAssassin - dica 1/2
  Bofofilter e SpamAssassin
  =========================

Colaboração: Douglas Adriano Augusto 

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 

###


Bogofilter e SpanAssassin - dica 2/2

Colaboração: Victor Maida

Uma maneira de deixar o bogofilter ainda mais eficiente é usar
o spamassassin para treiná-lo automaticamente. A regra abaixo
faz com que as mensagens consideradas spam pelo spamassassin
que o bogofilter deixar passar serão enviadas para ele novamente
com a opção -s:


  procmail v3.22 2001/09/10
  SpamAssassin version 2.61
  bogofilter version 0.15.13
  
  --.procmailrc--
  
  #Bogofilter
  :0fw
  | bogofilter -u -e -p -l
  
  :0e
  { EXITCODE=75 HOST }
  
  # O que foi classificado como nao-spam pelo bogofilter é jogando no
  # spamassassin
  :0fwE 
  * ! ^X-Bogosity: Yes
  * ! ^X-Beenthere:.*spamassassin-talk@lists.sourceforge.net
  | spamassassin
  
  # spam pego pelo spamassassin é mandado de volta para o bogofilter, para
  # treiná-lo
  :0c
  * ^X-Spam-Status: Yes
  {
  :0w
  | bogofilter -s
  }
  
  # Coloca as mensagens consideradas como spam na mailbox spam
  # para poderverificar se nenhuma mensagem válida foi considerada
  # spam
  :0:
  * ^X-Bogosity: Yes, tests=bogofilter
  spam
  
  :0:
  * ^X-Spam-Status: Yes
  spam
  
  --.procmailrc--