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