使用 tkinter 创建 python 拼写检查器
Creating a python spellchecker using tkinter
为了学校,我需要使用 python 创建一个拼写检查器。我决定使用用 tkinter 创建的 GUI 来完成它。我需要能够输入一个将被检查的文本(.txt)文件,一个字典文件,也是一个文本文件。该程序需要打开这两个文件,将检查文件与字典文件进行核对,然后显示任何拼写错误的单词。
这是我的代码:
import tkinter as tk
from tkinter.filedialog import askopenfilename
def checkFile():
# get the sequence of words from a file
text = open(file_ent.get())
dictDoc = open(dict_ent.get())
for ch in '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.split()
# make a dictionary of the word counts
wordDict = {}
for w in words:
wordDict[w] = wordDict.get(w,0) + 1
for k in dictDict:
dictDoc.pop(k, None)
misspell_lbl["text"] = dictDoc
# Set-up the window
window = tk.Tk()
window.title("Temperature Converter")
window.resizable(width=False, height=False)
# Setup Layout
frame_a = tk.Frame(master=window)
file_lbl = tk.Label(master=frame_a, text="File Name")
space_lbl = tk.Label(master=frame_a, width = 6)
dict_lbl =tk.Label(master=frame_a, text="Dictionary File")
file_lbl.pack(side=tk.LEFT)
space_lbl.pack(side=tk.LEFT)
dict_lbl.pack(side=tk.LEFT)
frame_b = tk.Frame(master=window)
file_ent = tk.Entry(master=frame_b, width=20)
dict_ent = tk.Entry(master=frame_b, width=20)
file_ent.pack(side=tk.LEFT)
dict_ent.pack(side=tk.LEFT)
check_btn = tk.Button(master=window, text="Spellcheck", command=checkFile)
frame_c = tk.Frame(master=window)
message_lbl = tk.Label(master=frame_c, text="Misspelled Words:")
misspell_lbl = tk.Label(master=frame_c, text="")
message_lbl.pack()
misspell_lbl.pack()
frame_a.pack()
frame_b.pack()
check_btn.pack()
frame_c.pack()
# Run the application
window.mainloop()
我希望文件对照字典进行检查并显示 misspell_lbl 中拼写错误的单词。
我用来让它工作并随作业提交的测试文件在此处:
我已将文件预加载到提交此文件的网站,因此只需输入文件名和扩展名,而不是整个路径。
我很确定问题出在我读取和检查文件的功能上,我一直在努力解决这个问题,但我被卡住了。任何帮助将不胜感激。
谢谢。
第一个问题是您尝试读取文件的方式。 open(...)
将 return 一个 _io.TextIOWrapper
对象,而不是字符串,这就是导致错误的原因。要从文件中获取文本,您需要使用 .read()
,像这样:
def checkFile():
# get the sequence of words from a file
with open(file_ent.get()) as f:
text = f.read()
with open(dict_ent.get()) as f:
dictDoc = f.read().splitlines()
with open(...) as f
部分为您提供了一个名为 f
的文件对象,并在完成后自动关闭该文件。这是
更简洁的版本
f = open(...)
text = f.read()
f.close()
f.read()
将从文件中获取文本。对于字典,我还添加了 .splitlines()
以将换行符分隔的文本转换为列表。
我真的看不出你在哪里尝试检查拼写错误的单词,但你可以通过列表理解来做到这一点。
misspelled = [x for x in words if x not in dictDoc]
这会获取字典文件中不存在的每个单词,并将其添加到名为 misspelled
的列表中。总之,checkFile
函数现在看起来像这样,并且按预期工作:
def checkFile():
# get the sequence of words from a file
with open(file_ent.get()) as f:
text = f.read()
with open(dict_ent.get()) as f:
dictDoc = f.read().splitlines()
for ch in '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.split()
# make a dictionary of the word counts
wordDict = {}
for w in words:
wordDict[w] = wordDict.get(w,0) + 1
misspelled = [x for x in words if x not in dictDoc]
misspell_lbl["text"] = misspelled
为了学校,我需要使用 python 创建一个拼写检查器。我决定使用用 tkinter 创建的 GUI 来完成它。我需要能够输入一个将被检查的文本(.txt)文件,一个字典文件,也是一个文本文件。该程序需要打开这两个文件,将检查文件与字典文件进行核对,然后显示任何拼写错误的单词。
这是我的代码:
import tkinter as tk
from tkinter.filedialog import askopenfilename
def checkFile():
# get the sequence of words from a file
text = open(file_ent.get())
dictDoc = open(dict_ent.get())
for ch in '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.split()
# make a dictionary of the word counts
wordDict = {}
for w in words:
wordDict[w] = wordDict.get(w,0) + 1
for k in dictDict:
dictDoc.pop(k, None)
misspell_lbl["text"] = dictDoc
# Set-up the window
window = tk.Tk()
window.title("Temperature Converter")
window.resizable(width=False, height=False)
# Setup Layout
frame_a = tk.Frame(master=window)
file_lbl = tk.Label(master=frame_a, text="File Name")
space_lbl = tk.Label(master=frame_a, width = 6)
dict_lbl =tk.Label(master=frame_a, text="Dictionary File")
file_lbl.pack(side=tk.LEFT)
space_lbl.pack(side=tk.LEFT)
dict_lbl.pack(side=tk.LEFT)
frame_b = tk.Frame(master=window)
file_ent = tk.Entry(master=frame_b, width=20)
dict_ent = tk.Entry(master=frame_b, width=20)
file_ent.pack(side=tk.LEFT)
dict_ent.pack(side=tk.LEFT)
check_btn = tk.Button(master=window, text="Spellcheck", command=checkFile)
frame_c = tk.Frame(master=window)
message_lbl = tk.Label(master=frame_c, text="Misspelled Words:")
misspell_lbl = tk.Label(master=frame_c, text="")
message_lbl.pack()
misspell_lbl.pack()
frame_a.pack()
frame_b.pack()
check_btn.pack()
frame_c.pack()
# Run the application
window.mainloop()
我希望文件对照字典进行检查并显示 misspell_lbl 中拼写错误的单词。
我用来让它工作并随作业提交的测试文件在此处:
我已将文件预加载到提交此文件的网站,因此只需输入文件名和扩展名,而不是整个路径。
我很确定问题出在我读取和检查文件的功能上,我一直在努力解决这个问题,但我被卡住了。任何帮助将不胜感激。
谢谢。
第一个问题是您尝试读取文件的方式。 open(...)
将 return 一个 _io.TextIOWrapper
对象,而不是字符串,这就是导致错误的原因。要从文件中获取文本,您需要使用 .read()
,像这样:
def checkFile():
# get the sequence of words from a file
with open(file_ent.get()) as f:
text = f.read()
with open(dict_ent.get()) as f:
dictDoc = f.read().splitlines()
with open(...) as f
部分为您提供了一个名为 f
的文件对象,并在完成后自动关闭该文件。这是
f = open(...)
text = f.read()
f.close()
f.read()
将从文件中获取文本。对于字典,我还添加了 .splitlines()
以将换行符分隔的文本转换为列表。
我真的看不出你在哪里尝试检查拼写错误的单词,但你可以通过列表理解来做到这一点。
misspelled = [x for x in words if x not in dictDoc]
这会获取字典文件中不存在的每个单词,并将其添加到名为 misspelled
的列表中。总之,checkFile
函数现在看起来像这样,并且按预期工作:
def checkFile():
# get the sequence of words from a file
with open(file_ent.get()) as f:
text = f.read()
with open(dict_ent.get()) as f:
dictDoc = f.read().splitlines()
for ch in '!"#$%&()*+,-./:;<=>?@[\]^_`{|}~':
text = text.replace(ch, ' ')
words = text.split()
# make a dictionary of the word counts
wordDict = {}
for w in words:
wordDict[w] = wordDict.get(w,0) + 1
misspelled = [x for x in words if x not in dictDoc]
misspell_lbl["text"] = misspelled