Verwendung von Bayesianischem Spam-Filter zum Klassifizieren von E-Mails in Python
Contents
[
Hide
]
Verwendung von Bayesianischem Spam-Filtering
Aspose.Email bietet E‑Mail‑Filterfunktionen mittels eines Bayesianischen Spam‑Analyzers. Es stellt die SpamAnalyzer Klasse für diesen Zweck. Dieser Artikel zeigt, wie man den Filter trainiert, um Spam von regulärer E‑Mail anhand einer Wortdatenbank zu unterscheiden.
- Gib die Ordnerpfade für die Ham-E-Mails (ham_folder), Spam-E-Mails (spam_folder), Test-E-Mails (test_folder) und die Datenbankdatei (database_file) für den Spam-Filter an.
- Definiere die Hilfsfunktion
print_resultum auszugeben, ob eine Nachricht basierend auf der berechneten Spam-Wahrscheinlichkeit als Spam klassifiziert wurde oder nicht. - Erstellen Sie einen Spam‑Analyzer, trainieren Sie ihn mit den E‑Mails aus ham_folder (kein Spam) und spam_folder (Spam) mittels der Methode ’train_filter(message, is_spam)’, und speichern Sie dann die trainierte Datenbank mit ‘save_database(file_path)’.
- Erstellen Sie einen Spam‑Analyzer, stellen Sie die trainierte Datenbank mit ’load_database(file_path)’ wieder her, laden Sie die .eml‑Dateien aus ’test_folder’, analysieren Sie jede mit ’test(message)’, um die Spam‑Wahrscheinlichkeit zu erhalten, und geben Sie den E‑Mail‑Betreff sowie die Klassifizierung mit ‘print_result’ aus.
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)