Използване на байесов филтър за спам за класифициране на имейли в Python
Contents
[
Hide
]
Използване на байесов филтър за спам
Aspose.Email предоставя функционалност за филтриране на имейли, използвайки байесов спам анализатор. Той предоставя SpamAnalyzer клас за тази цел. Тази статия показва как да обучите филтъра да разграничава спам и обикновени имейли, базирано на речникова база данни.
- Посочете пътищата до папките за хам имейли (ham_folder), спам имейли (spam_folder), тестови имейли (test_folder) и файла с база данни (database_file) за спам филтъра.
- Определете помощната функция
print_resultза отпечатване дали съобщението е класифицирано като спам или не, въз основа на изчислената вероятност за спам. - Създайте Spam Analyzer, обучете го с имейлите от ham_folder (не спам) и spam_folder (спам), използвайки метода ’train_filter(message, is_spam)’, след което запазете обучената база данни с ‘save_database(file_path)’.
- Създайте Spam Analyzer, възстановете обучената база данни с ’load_database(file_path)’, заредете .eml файловете от ’test_folder’, анализирайте всеки с ’test(message)’, за да получите вероятността за спам, и отпечатайте темата на имейла и класификацията, използвайки ‘print_result’.
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)