Använda Bayesiansk spamfiltrering för att klassificera e-post i Python

Använda Bayesiansk spamfiltrering

Aspose.Email tillhandahåller e‑postfiltreringsfunktionalitet med en Bayesiansk spam‑analysator. Den erbjuder SpamAnalyzer klass för detta ändamål. Denna artikel visar hur man tränar filtret för att särskilja spam från vanlig e‑post baserat på en orddatabas.

  1. Ange sökvägarna till mapparna för ham‑e‑post (ham_folder), spam‑e‑post (spam_folder), test‑e‑post (test_folder) samt databasfilen (database_file) för spamfiltret.
  2. Definiera hjälpfunktionen print_result för att skriva ut om ett meddelande klassificeras som spam eller inte baserat på den beräknade spam‑sannolikheten.
  3. Skapa en Spam Analyzer med databasfilen, träna den med e‑post från ham_folder (ej spam) och spam_folder (spam), och spara sedan den tränade databasen.
  4. Läs in .eml-filer från ’test_folder’, analysera var och en med SpamAnalyzer.test för att få spam‑sannolikhet, och skriv ut e‑postens ämne och klassificering med ‘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)