0

对于学校,我需要使用 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()

我希望文件检查字典并在 mispell_lbl 中显示拼写错误的单词。

我用来使其工作并与作业一起提交的测试文件在这里:

检查文件 字典文件

我已将文件预加载到我提交此文件的站点,因此只需输入文件名和扩展名,而不是整个路径。

我很确定问题出在我读取和检查文件的功能上,我一直在努力解决这个问题,但我被卡住了。任何帮助将不胜感激。

谢谢。

4

1 回答 1

0

第一个问题是您如何尝试读取文件。open(...)将返回一个_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
于 2021-07-31T22:22:38.867 回答