Използване на байесов филтър за спам за класифициране на имейли в Python

Използване на байесов филтър за спам

Aspose.Email предоставя функционалност за филтриране на имейли, използвайки байесов спам анализатор. Той предоставя SpamAnalyzer клас за тази цел. Тази статия показва как да обучите филтъра да разграничава спам и обикновени имейли, базирано на речникова база данни.

  1. Посочете пътищата до папките за хам имейли (ham_folder), спам имейли (spam_folder), тестови имейли (test_folder) и файла с база данни (database_file) за спам филтъра.
  2. Определете помощната функция print_result за отпечатване дали съобщението е класифицирано като спам или не, въз основа на изчислената вероятност за спам.
  3. Създайте Spam Analyzer, използвайки файла с база данни, обучете го с имейли от ham_folder (не спам) и spam_folder (спам), след което запазете обучената база данни.
  4. Зарежда .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)