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