Utilisation du filtrage anti-spam bayésien pour classifier les e‑mails en Python
Contents
[
Hide
]
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.
- 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.
- Définir la fonction d’assistance
print_resultpour afficher si un message est classé comme spam ou non en fonction de la probabilité de spam calculée. - 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.
- 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)