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