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

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

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

  1. مسیرهای پوشه‌ها را برای ایمیل‌های سالم (ham_folder)، ایمیل‌های اسپم (spam_folder)، ایمیل‌های تست (test_folder) و فایل دیتابیس (database_file) فیلتر اسپم مشخص کنید.
  2. تعریف تابع کمکی print_result برای چاپ اینکه آیا پیام بر اساس احتمال محاسبه‌شده به عنوان اسپم طبقه‌بندی شده است یا نه.
  3. تحلیل‌گر اسپم را با استفاده از فایل دیتابیس ایجاد کنید، آن را با ایمیل‌های موجود در 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)