การใช้การกรองสแปมแบบเบย์เชี่ยนเพื่อจำแนกอีเมลใน Python

การใช้การกรองสแปมแบบเบย์เชี่ยน

Aspose.Email ให้ฟังก์ชันการกรองอีเมลโดยใช้ Bayesian spam analyzer. มันให้ SpamAnalyzer คลาสสำหรับจุดประสงค์นี้. บทความนี้แสดงวิธีฝึกตัวกรองให้แยกแยะระหว่างสแปมและอีเมลทั่วไปโดยอิงจากฐานข้อมูลคำ

  1. ระบุเส้นทางโฟลเดอร์สำหรับอีเมล ham (ham_folder), อีเมลสแปม (spam_folder), อีเมลทดสอบ (test_folder), และไฟล์ฐานข้อมูล (database_file) สำหรับตัวกรองสแปม
  2. กำหนดฟังก์ชันช่วยเหลือ print_result เพื่อพิมพ์ว่าข้อความนั้นถูกจำแนกว่าเป็นสแปมหรือไม่โดยอิงจากความน่าจะเป็นสแปมที่คำนวณได้
  3. สร้าง Spam Analyzer ด้วยไฟล์ฐานข้อมูล, ฝึกด้วยอีเมลจาก 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)