استفاده از فیلترینگ اسپم بیزی برای دسته‌بندی ایمیل‌ها در پایتون

استفاده از فیلترینگ اسپم بیزی

Aspose.Email قابلیت فیلتر کردن ایمیل را با استفاده از تحلیل‌گر اسپم بیزی فراهم می‌کند. این قابلیت را ارائه می‌دهد SpamAnalyzer کلاس برای این منظور. این مقاله نشان می‌دهد چگونه فیلتر را برای تشخیص بین اسپم و ایمیل معمولی بر اساس یک دیتابیس واژگان آموزش داد.

  1. مسیرهای پوشه‌ها را برای ایمیل‌های سالم (ham_folder)، ایمیل‌های اسپم (spam_folder)، ایمیل‌های تست (test_folder) و فایل دیتابیس (database_file) فیلتر اسپم مشخص کنید.
  2. تعریف تابع کمکی print_result برای چاپ اینکه آیا پیام بر اساس احتمال محاسبه‌شده به عنوان اسپم طبقه‌بندی شده است یا نه.
  3. یک Spam Analyzer ایجاد کنید، آن را با ایمیل‌های موجود در ham_folder (غیر اسپم) و spam_folder (اسپم) با استفاده از متد ’train_filter(message, is_spam)’ آموزش دهید، سپس پایگاه‌داده آموزش‌دیده را با ‘save_database(file_path)’ ذخیره کنید.
  4. یک 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)