Uso del filtrado bayesiano de spam para clasificar correos electrónicos en Python

Uso del filtrado bayesiano de spam

Aspose.Email ofrece funcionalidad de filtrado de correo usando un analizador bayesiano de spam. Proporciona el SpamAnalyzer clase para este propósito. Este artículo muestra cómo entrenar el filtro para distinguir entre spam y correo normal basándose en una base de datos de palabras.

  1. Especificar las rutas de carpeta para los correos ham (ham_folder), correos spam (spam_folder), correos de prueba (test_folder) y el archivo de base de datos (database_file) para el filtro de spam.
  2. Definir la función auxiliar print_result para imprimir si un mensaje está clasificado como spam o no según la probabilidad de spam calculada.
  3. Crea un Analizador de Spam, entrénalo con los correos de ham_folder (no spam) y spam_folder (spam) usando el método ’train_filter(message, is_spam)’, luego guarda la base de datos entrenada con ‘save_database(file_path)’.
  4. Crea un Analizador de Spam, restaura la base de datos entrenada con ’load_database(file_path)’, carga los archivos .eml desde ’test_folder’, analiza cada uno con ’test(message)’ para obtener la probabilidad de spam, y muestra el asunto del correo y la clasificación 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)