שימוש בסינון דואר זבל בייסיאני למיון אימיילים ב-Python

שימוש בסינון ספאם בייסיאני

Aspose.Email מספקת פונקציונליות סינון אימיילים באמצעות מנתח ספאם בייסיאני. היא מספקת את SpamAnalyzer מחלקה למטרה זו. מאמר זה מראה כיצד לאמן את המסנן כדי להבדיל בין ספאם לאימייל רגיל על בסיס מסד מילים.

  1. ציין את נתיבי התיקיות עבור אימיילים ה- ham (ham_folder), אימיילים ספאם (spam_folder), אימיילי בדיקה (test_folder), וקובץ מסד הנתונים (database_file) עבור מסנן הספאם.
  2. הגדר את פונקציית העזר print_result להדפיס האם הודעה מסווגת כספאם או לא על בסיס הסתברות הספאם המחושבת.
  3. צור Analyzer לזיהוי דואר זבל, אימון על האימיילים מתיקיית ham_folder (לא זבל) ותיקיית spam_folder (זבל) באמצעות השיטה ’train_filter(message, is_spam)’, ואז שמור את מסד הנתונים המאומן עם ‘save_database(file_path)’.
  4. צור 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)