Nome
SpamCatcher - Identificador de emails de SPAM
SINOPSE
use SpamCatcher;
my @hams = glob('app/ham/*');
my @spams = glob('app/spam/*');
my $spam;
# Inicializar e registar os ficheiros passados como argumento
$spam = SpamCatcher->new(\@hams,\@spams);
# OU
# Inicializar, mostrar grau de confiança e registar os ficheiros passados como argumento
#$spam = SpamCatcher->new(\@hams,\@spams, 1);
# teria como output algo semelhante a:
# Confiabilidade (4): 0.977551020408163 (1916 em 1960)
# Confiabilidade (3): 0.98265306122449 (1926 em 1960)
# Confiabilidade (2): 0.977040816326531 (1915 em 1960)
# Confiabilidade (1): 0.976020408163265 (1913 em 1960)
# Confiabilidade (0): 0.971938775510204 (1905 em 1960)
# Construir a base de dados com os ficheiros passados ao inicializador
$spam->learn_dataset();
# Verificar se um email é SPAM
if($spam->is_spam('app/ham/00027.c9e76a75d21f9221d65d4d577a2cfb75')){
print "is spam\n"
}else{
print "is not spam\n"
}
DESCRIÇÃO
O Spam Catcher permite identificar se um email é SPAM.
O módulo necessita que lhe sejam fornecidos vários emails previamente reconhecidos como SPAM ou HAM (não-SPAM). Esses emails são usados para conseguir prever se um email é SPAM.
Ao observar a taxa de sucesso do módulo usando o algoritmo K-Fold, o módulo reconheceu emails de HAM e SPAM com uma taxa de sucesso superior a 97%.
SUBROTINAS
EXPORT
Nada é exportado de forma implícita/predefinida.
EXPORT_OK
file_to_normalized_string
Recebe como argumento um nome de ficheiro.
Abre o ficheiro cujo nome foi passado como argumento, normaliza o seu conteúdo e devolve-o na forma de uma string.
word_frequency
Recebe um texto (string) como argumento. Este texto deve ter sido previamente normalizado usando file_to_normalized_string.
Devolve uma hash cujas chaves são as palavras encontradas no texto e os valores são as correspondentes frequências absolutas.
debug_normalize_file
Recebe uma referência para um array com nomes de ficheiro e uma directoria (string) (sem /
no fim).
Cria uma versão normalizada do ficheiro original, com o mesmo nome, na directoria indicada.
SUBROTINAS DE INSTÂNCIA
new
Recebe como argumentos:
- 1. Referêcia para uma lista com os nomes de ficheiro dos emails pre-identificados como HAM;
- 2. Referêcia para uma lista com os nomes de ficheiro dos emails pre-identificados como SPAM;
- 3. (opcional, falso por predefinição) Valor de verdade que indica se deve ser executada a subrotina de verificação do grau de confiança do
SpamCatcher
.
Cria uma nova instância de SpamCatcher
que usará os ficheiros designados para aprender a identificar emails.
Caso o terceiro argumento tenha um valor verdadeiro, é executada a subrotina de verificação do grau de confiança do SpamCatcher
.
learn_dataset
Recebe um argumento (opcional e falso por predefinição) que indica se o ficheiro temporário do Naive Bayes deverá ser ignorado.
Se o ficheiro temporário existir e puder ser usado, é carregado esse ficheiro, ficando a instância rapidamente pronta a reconhecer emails.
Se o ficheiro temporário não existir ou não puder ser usado, todos os ficheiros são normalizados e as suas frequências absolutas adicionadas à instância de Algorithm::NaiveBayes
. Depois disso as frequências são preparadas para serem utilizadas na classificação de emails. Por fim o estado do Algorithm::NaiveBayes
é guardado num ficheiro temporário para poder ser directamente recuperado e acelerar as próximas execuções desta subrotina.
confidence_level
Não recebe argumentos.
Executa o método K-Fold com 5 blocos (a distribuição dos emails pelos blocos é aleatória para instâncias diferentes de SpamCatcher
):
- 1. Aprende a identificar emails usando os blocos 1 a 4 e verifica a percentagem de emails do 5.º bloco que classificou com sucesso.
- 2. Aprende a identificar emails usando os blocos 1, 2, 3 e 5 e verifica a percentagem de emails do 4.º bloco que classificou com sucesso.
- 3. Aprende a identificar emails usando os blocos 1, 2, 4 e 5 e verifica a percentagem de emails do 3.º bloco que classificou com sucesso.
- 4. Aprende a identificar emails usando os blocos 1, 3, 4 e 5 e verifica a percentagem de emails do 2.º bloco que classificou com sucesso.
- 5. Aprende a identificar emails usando os blocos 2, 3, 4 e 5 e verifica a percentagem de emails do 1.º bloco que classificou com sucesso.
A informação sobre confiança é mostrada no ecrã.
A subrotina devolve undef
.
is_spam
Recebe como argumento um nome de ficheiro.
Computa as frequências absolutas das palavras contidas no ficheiro cujo nome foi passado como argumento, questiona a instância de Algorithm::NaiveBayes
sobre a probabilidade de o email ser de SPAM.
Um email é de SPAM quando o Algorithm::NaiveBayes
devolve uma probabilidade de ser SPAM de mais de 50% e o valor da probabilidade de ser SPAM é maior que o valor da probabilidade de ser HAM.
REGRAS DA MAKEFILE
Existem algumas regras adicionais na makefile do projecto:
application
: executa a aplicação de exemplo (é necessário extrair o tar.bz2 com os datasets)alldoc
: gera o ficheiro README.pod e uma versão do relatório perldoc em HTML (com índice)cleandoc
: remove os ficheiros gerados pela regra htmlreport
DEPENDÊNCIAS EXTERNAS
Lingua::Jspell
com o dicionário Português ("port") instalado;Text::RewriteRules
.Lingua::EN::StopWords
tem palavras que não contribuem para decisão entre HAM e SPAM;Lingua::Stem
é uma dependência doLingua::EN::StopWords
;Algorithm::NaiveBayes
implementa o algoritmo Naive Bayes, permite inserir as frequências absolutas das palavras e obter valores de previsão para classificar emails;HTML::Strip
Remove tags HTML dos emails;Mail::Internet
Remove cabeçalhos dos emails.
AUTORES
B. Ferreira E<lt>chalkos@chalkos.netE<gt>
M. Pinto E<lt>mcpinto98@gmail.comE<gt>
COPYRIGHT AND LICENSE
Copyright (C) 2015 by B. Ferreira and M. Pinto
This program is free software; licensed under GPL.