使用贝叶斯垃圾邮件过滤在 Python 中对电子邮件进行分类

使用贝叶斯垃圾邮件过滤

Aspose.Email 使用贝叶斯垃圾邮件分析器提供电子邮件过滤功能。它提供了 SpamAnalyzer 用于此目的的类。本文展示了如何基于词汇数据库训练过滤器,以区分垃圾邮件和普通邮件。

  1. 为垃圾邮件过滤器指定 ham 邮件文件夹路径(ham_folder)、垃圾邮件文件夹路径(spam_folder)、测试邮件文件夹路径(test_folder)以及数据库文件(database_file)。
  2. 定义辅助函数 print_result 根据计算的垃圾邮件概率打印消息是否被分类为垃圾邮件。
  3. 使用数据库文件创建 Spam Analyzer,用 ham_folder(非垃圾邮件)和 spam_folder(垃圾邮件)中的电子邮件进行训练,然后保存训练后的数据库。
  4. 从 ’test_folder’ 加载 .eml 文件,使用 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)