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. Crear Spam Analyzer usando el archivo de base de datos, entrenarlo con correos de ham_folder (no spam) y spam_folder (spam), y luego guardar la base de datos entrenada.
  4. Cargar archivos .eml desde ’test_folder’, analizarlos con SpamAnalyzer.test para obtener la probabilidad de spam y imprimir el asunto del correo y la clasificación 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)