Używanie bayesowskiej filtracji spamu do klasyfikacji e‑maili w Pythonie
Contents
[
Hide
]
Używanie bayesowskiej filtracji spamu
Aspose.Email zapewnia funkcjonalność filtrowania e‑maili przy użyciu bayesowskiego analizatora spamu. Dostarcza SpamAnalyzer klasa do tego celu. Ten artykuł pokazuje, jak wytrenować filtr, aby odróżniał spam od zwykłych e‑maili na podstawie bazy słów.
- Określ ścieżki folderów dla e‑maili nie‑spamowych (ham_folder), e‑maili spamowych (spam_folder), testowych e‑maili (test_folder) oraz pliku bazy danych (database_file) dla filtru spamu.
- Zdefiniuj funkcję pomocniczą
print_resultaby wypisać, czy wiadomość jest sklasyfikowana jako spam, czy nie, w oparciu o obliczone prawdopodobieństwo spamu. - Utwórz analizator spamu przy użyciu pliku bazy danych, wytrenuj go wiadomościami z folderu ham_folder (nie‑spam) i spam_folder (spam), a następnie zapisz wytrenowaną bazę danych.
- Załaduj pliki .eml z folderu ’test_folder’, przeanalizuj każdy za pomocą SpamAnalyzer.test, aby uzyskać prawdopodobieństwo spamu, i wypisz temat e‑maila oraz klasyfikację przy użyciu ‘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)