استخدام الترشيح الاحتمالي للرسائل غير المرغوب فيها (Bayesian Spam Filtering) لتصنيف الرسائل الإلكترونية في بايثون
Contents
[
Hide
]
استخدام الترشيح الاحتمالي للرسائل غير المرغوب فيها
توفر Aspose.Email وظيفة تصفية البريد الإلكتروني باستخدام محلل Bayesian Spam. إنها توفر الـ SpamAnalyzer فئة لهذا الغرض. توضح هذه المقالة كيفية تدريب الفلتر للتمييز بين البريد المزعج والبريد العادي بناءً على قاعدة بيانات الكلمات.
- حدد مسارات المجلدات لرسائل البريد غير المزعج (ham_folder)، ورسائل البريد المزعج (spam_folder)، ورسائل الاختبار (test_folder)، وملف قاعدة البيانات (database_file) لمرشح الرسائل غير المرغوب فيها.
- تعريف الدالة المساعدة
print_resultلطباعة ما إذا كانت الرسالة مصنّفة كرسالة غير مرغوب فيها أم لا بناءً على احتمال الرسائل غير المرغوب فيها المحسوب. - أنشئ محلل للرسائل المزعجة، درّبه باستخدام الرسائل من ham_folder (غير مزعج) وspam_folder (مزعج) عبر طريقة ’train_filter(message, is_spam)’، ثم احفظ قاعدة البيانات المدربة باستخدام ‘save_database(file_path)’.
- أنشئ محلل للرسائل المزعجة، استعد قاعدة البيانات المدربة باستخدام ’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)