Menggunakan Penyaringan Spam Bayesian untuk Mengklasifikasikan Email dalam Python
Contents
[
Hide
]
Menggunakan Penyaringan Spam Bayesian
Aspose.Email menyediakan fungsionalitas penyaringan email menggunakan analis spam Bayesian. Ia menyediakan SpamAnalyzer kelas untuk tujuan ini. Artikel ini menunjukkan cara melatih filter untuk membedakan antara spam dan email biasa berdasarkan basis data kata.
- Tentukan jalur folder untuk email ham (ham_folder), email spam (spam_folder), email uji (test_folder), dan file basis data (database_file) untuk filter spam.
- Definisikan fungsi pembantu
print_resultuntuk mencetak apakah sebuah pesan diklasifikasikan sebagai spam atau tidak berdasarkan probabilitas spam yang dihitung. - Buat Spam Analyzer, latih dengan email dari ham_folder (bukan spam) dan spam_folder (spam) menggunakan metode ’train_filter(message, is_spam)’, lalu simpan basis data terlatih dengan ‘save_database(file_path)’.
- Buat Spam Analyzer, pulihkan basis data terlatih dengan ’load_database(file_path)’, muat file .eml dari ’test_folder’, analisis masing-masing dengan ’test(message)’ untuk mendapatkan probabilitas spam, dan cetak subjek email serta klasifikasinya menggunakan ‘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)