Bayesiaanse spamfiltering gebruiken om e-mails te classificeren in Python

Bayesiaanse spamfiltering gebruiken

Aspose.Email biedt e-mailfilterfunctionaliteit met behulp van een Bayesiaanse spam-analyzer. Het biedt de SpamAnalyzer klasse voor dit doel. Dit artikel laat zien hoe de filter te trainen om spam en reguliere e-mail te onderscheiden op basis van een woorden-database.

  1. Specificeer de mappaden voor de ham-e-mails (ham_folder), spam-e-mails (spam_folder), test-e-mails (test_folder) en het databasebestand (database_file) voor de spamfilter.
  2. Definieer de hulpfunctie print_result om af te drukken of een bericht als spam is geclassificeerd of niet, op basis van de berekende spamkans.
  3. Maak een Spam Analyzer met het databasebestand, train deze met e-mails uit ham_folder (geen spam) en spam_folder (spam), en sla vervolgens de getrainde database op.
  4. Laad .eml-bestanden uit ’test_folder’, analyseer elk met SpamAnalyzer.test om de spamkans te krijgen, en print het e-mailonderwerp en de classificatie met ‘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)