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éez un analyseur de spam, entraînez‑le avec les e‑mails du dossier ham_folder (non spam) et du dossier spam_folder (spam) en utilisant la méthode ’train_filter(message, is_spam)’, puis sauvegardez la base de données entraînée avec ‘save_database(file_path)’.
  4. Créez un analyseur de spam, restaurez la base de données entraînée avec ’load_database(file_path)’, chargez les fichiers .eml depuis ’test_folder’, analysez chacun avec ’test(message)’ pour obtenir la probabilité de spam, et affichez le sujet de l’e‑mail ainsi que la classification à l’aide de ‘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)