Utilizzare il filtraggio spam bayesiano per classificare le email in Python

Utilizzo del filtraggio spam bayesiano

Aspose.Email fornisce funzionalità di filtraggio email usando un analizzatore spam bayesiano. Fornisce il SpamAnalyzer classe per questo scopo. Questo articolo mostra come addestrare il filtro per distinguere tra spam e email normali basandosi su un database di parole.

  1. Specifica i percorsi delle cartelle per le email legittime (ham_folder), le email spam (spam_folder), le email di test (test_folder) e il file di database (database_file) per il filtro spam.
  2. Definisci la funzione di supporto print_result per stampare se un messaggio è classificato come spam o meno in base alla probabilità di spam calcolata.
  3. Creare un Analizzatore di Spam, addestrarlo con le email da ham_folder (non spam) e spam_folder (spam) usando il metodo ’train_filter(message, is_spam)’, quindi salvare il database addestrato con ‘save_database(file_path)’.
  4. Creare un Analizzatore di Spam, ripristinare il database addestrato con ’load_database(file_path)’, caricare i file .eml da ’test_folder’, analizzare ciascuno con ’test(message)’ per ottenere la probabilità di spam e stampare l’oggetto dell’email e la classificazione usando ‘print_result’.
import os

from aspose.email import MailMessage
from aspose.email.antispam import SpamAnalyzer

ham_folder = "hamFolder"
spam_folder = "spamFolder"
test_folder = "testFolder"
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 train_from_directory(analyzer, folder, is_spam):
    for file in os.listdir(folder):
        if file.endswith(".eml"):
            analyzer.train_filter(MailMessage.load(os.path.join(folder, file)), is_spam)

def teach_and_create_database(ham_folder, spam_folder, database_file):
    analyzer = SpamAnalyzer()
    train_from_directory(analyzer, ham_folder, False)
    train_from_directory(analyzer, spam_folder, True)
    analyzer.save_database(database_file)

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()
analyzer.load_database(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)