Bayesiaanse spamfiltering gebruiken om e-mails te classificeren in Python
Contents
[
Hide
]
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.
- 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.
- Definieer de hulpfunctie
print_resultom af te drukken of een bericht als spam is geclassificeerd of niet, op basis van de berekende spamkans. - 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.
- 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)