Usando filtragem de spam bayesiana para classificar e-mails em Python
Contents
[
Hide
]
Usando filtragem de spam bayesiana
Aspose.Email fornece funcionalidade de filtragem de e‑mail usando um analisador de spam bayesiano. Ele fornece o SpamAnalyzer classe para esse propósito. Este artigo mostra como treinar o filtro para distinguir entre spam e e‑mail normal com base em um banco de palavras.
- Especifique os caminhos das pastas para os e‑mails legítimos (ham_folder), e‑mails de spam (spam_folder), e‑mails de teste (test_folder) e o arquivo de banco de dados (database_file) para o filtro de spam.
- Defina a função auxiliar
print_resultpara imprimir se uma mensagem foi classificada como spam ou não com base na probabilidade de spam calculada. - Crie um analisador de spam usando o arquivo de banco de dados, treine-o com e‑mails de ham_folder (não spam) e spam_folder (spam) e, em seguida, salve o banco de dados treinado.
- Carregue arquivos .eml da pasta ’test_folder’, analise cada um com SpamAnalyzer.test para obter a probabilidade de spam e imprima o assunto do e‑mail e a classificação usando ‘print_result’.
from aspose.email import MailMessage, SaveOptions, MsgLoadOptions, MessageFormat, FileCompatibilityMode
from aspose.email.antispam import SpamAnalyzer
import os
ham_folder = "/hamFolder"
spam_folder = "/Spam"
test_folder = data_dir
database_file = "SpamFilterDatabase.txt"
def print_result(probability):
if probability >= 0.5:
print("The message is classified as spam.")
else:
print("The message is classified as not spam.")
print("Spam Probability: " + str(probability))
print()
def teach_and_create_database(ham_folder, spam_folder, database_file):
analyzer = SpamAnalyzer(database_file)
analyzer.teach_from_directory(ham_folder, True)
analyzer.teach_from_directory(spam_folder, False)
analyzer.save_database()
teach_and_create_database(ham_folder, spam_folder, database_file)
test_files = [f for f in os.listdir(test_folder) if f.endswith(".eml")]
analyzer = SpamAnalyzer(database_file)
for file in test_files:
file_path = os.path.join(test_folder, file)
msg = MailMessage.load(file_path)
print(msg.subject)
probability = analyzer.test(msg)
print_result(probability)