Utilisation du filtrage anti-spam bayésien pour classifier les e‑mails en Python

Utilisation du filtrage anti‑spam bayésien

Aspose.Email fournit une fonctionnalité de filtrage d’e‑mail utilisant un analyseur de spam bayésien. Il fournit le SpamAnalyzer classe à cette fin. Cet article montre comment entraîner le filtre pour distinguer le spam du courrier normal à l’aide d’une base de données de mots.

  1. Spécifier les chemins des dossiers pour les e‑mails légitimes (ham_folder), les e‑mails spam (spam_folder), les e‑mails de test (test_folder), et le fichier de base de données (database_file) du filtre anti‑spam.
  2. Définir la fonction d’assistance print_result pour afficher si un message est classé comme spam ou non en fonction de la probabilité de spam calculée.
  3. Créer un analyseur de spam à l’aide du fichier de base de données, l’entraîner avec les e‑mails du dossier ham_folder (non spam) et spam_folder (spam), puis enregistrer la base de données entraînée.
  4. Charger les fichiers .eml depuis ’test_folder’, analyser chacun avec SpamAnalyzer.test pour obtenir la probabilité de spam, et afficher le sujet du mail et la classification à l’aide de ‘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)