Python'da E-postaları Sınıflandırmak İçin Bayesyen Spam Filtrelemesi Kullanma

Bayesyen Spam Filtrelemesi Kullanma

Aspose.Email, Bayesyen bir spam analizörü kullanarak e-posta filtreleme işlevi sağlar. Şu özellikleri sunar SpamAnalyzer bu amaç için sınıf. Bu makale, filtreyi kelime veritabanına dayanarak spam ve normal e-posta arasını ayıracak şekilde nasıl eğiteceğinizi gösterir.

  1. Spam filtresi için ham e-postaların (ham_folder), spam e-postaların (spam_folder), test e-postaların (test_folder) ve veritabanı dosyasının (database_file) klasör yollarını belirt.
  2. Yardımcı işlevi tanımla print_result hesaplanan spam olasılığına dayanarak bir mesajın spam olarak sınıflandırılıp sınıflandırılmadığını yazdırmak için.
  3. Bir Spam Analizörü oluşturun, ham_folder (spam olmayan) ve spam_folder (spam) içindeki e-postalarla ’train_filter(message, is_spam)’ metodunu kullanarak eğitin, ardından ‘save_database(file_path)’ ile eğitilmiş veritabanını kaydedin.
  4. Bir Spam Analizörü oluşturun, ’load_database(file_path)’ ile eğitilmiş veritabanını geri yükleyin, ’test_folder’ içindeki .eml dosyalarını yükleyin, her birini ’test(message)’ ile analiz ederek spam olasılığını alın ve ‘print_result’ ile e-posta konusunu ve sınıflandırmasını yazdırın.
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)