Python에서 베이지안 스팸 필터링을 사용하여 이메일 분류하기

베이지안 스팸 필터링 사용

Aspose.Email는 베이지안 스팸 분석기를 사용한 이메일 필터링 기능을 제공합니다. 이 기능은 SpamAnalyzer 이 목적을 위한 클래스입니다. 이 문서는 워드 데이터베이스를 기반으로 스팸과 일반 이메일을 구분하도록 필터를 교육하는 방법을 보여줍니다.

  1. 스팸 필터를 위한 햄 이메일(ham_folder), 스팸 이메일(spam_folder), 테스트 이메일(test_folder) 폴더 경로와 데이터베이스 파일(database_file)을 지정합니다.
  2. 헬퍼 함수를 정의합니다 print_result 계산된 스팸 확률을 기반으로 메시지가 스팸인지 아닌지를 출력합니다.
  3. 데이터베이스 파일을 사용하여 스팸 분석기를 만들고, 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)