import tkinter as tkfrom tkinter import messageboxfrom tkinter import simpledialogfrom tkinter import filedialogfrom tkinter import ttkfrom PIL import Image ImageTkfrom wordcloud import WordCloudimpor
在函数 classify_email() 中,出现了 NameError: name 'words' is not defined 的错误,这是因为 words 这个变量没有被定义或者没有被赋值。在这个函数之前,我们可以看到 words 这个变量被赋值为训练集中的所有单词的集合,但是这个变量在函数外部,所以需要在函数内部使用时进行全局变量的引用。可以在函数内部添加 global words 来解决这个问题,即:
def classify_email():
global model
global spam_words
global words
if not model:
messagebox.showerror('Error', 'Model not trained yet.')
return
email = simpledialog.askstring('Classify Email', 'Enter email text:')
if not email:
return
email = email.lower()
email = ''.join([c for c in email if c.isalpha() or c.isspace()])
email = ' '.join(email.split())
email_counts = np.array([[email.count(word) for word in words]])
prob_spam = model.predict_proba(email_counts)[0][1]
if prob_spam > 0.5:
messagebox.showinfo('Result', f'Probability of being spam: {prob_spam:.2f}\nThis is a spam email.')
else:
messagebox.showinfo('Result', f'Probability of being spam: {prob_spam:.2f}\nThis is not a spam email.')
``
原文地址: https://www.cveoy.top/t/topic/gUyJ 著作权归作者所有。请勿转载和采集!