我正在为 tkinter 文本小部件开发拼写检查器。我已经让它工作,以便用户可以选择一个不正确的单词并替换文本小部件中不正确单词的所有实例。但是,如果该单词出现在另一个单词中,它也会替换它。我不想要这个。
例如:假设用户有句子:
Hello how ay you today
并且他们错过了将单词' are '拼写为' ay ',他们可以右键单击它以替换所有实例或将单词' ay '替换为' are '。
我的问题是,字符串“ ay ”出现在“今天”中。这意味着当用户右键单击“ ay ”时,它会将“ today ”变成“ todare ”——将“ today ”中的“ ay ”替换为“ are ”
要替换我正在使用搜索功能的单词。我想检查一下错过拼写的单词两边的字符是否是空格,但我不知道如何实现它。下面是我的代码(注意 - 这已大大简化,我的实际代码长达数千行。在实际程序中,按钮是一个上下文菜单):
from spellchecker import SpellChecker
root = Tk()
notepad = Text(root)
notepad.pack()
spell_dict = SpellChecker()
def check_spelling(event):
global spell_dict
misspelt_words_list = []
paragraph_list = notepad.get('1.0', END).strip('\n').split()
notepad.tag_config('misspelt_word_tag', foreground='red', underline=1)
for word in paragraph_list:
if (word not in spell_dict) and (word not in misspelt_words_list):
misspelt_words_list.append(word)
elif (word in misspelt_words_list) and (word in spell_dict):
misspelt_words_list.remove(word)
notepad.tag_remove('misspelt_word_tag', 1.0, END)
for misspelt_word in misspelt_words_list:
misspelt_word_offset = '+%dc' % len(misspelt_word)
pos_start = notepad.search(misspelt_word, '1.0', END)
while pos_start:
pos_end = pos_start + misspelt_word_offset
notepad.tag_add("misspelt_word_tag",pos_start,pos_end)
pos_start = notepad.search(misspelt_word,pos_end,END)
button = Button(root, text = "This is a test", command = check_spelling)
button.pack()
root.mainloop()
就像我之前说的,如果用户写ll ll hello
了 ' ll ' 拼写错误(假设程序会将其更正为 I'll),当用户按下按钮时,它应该替换所有写为 ' ll ' 的单词,而不是替换'你好'中的' ll '。
这个:
ll ll hello
-> I'll I'll hello
,
不是:
ll ll hello
->I'll I'll heI'llo
谢谢你的帮助。
(我正在使用带有 Python 3.7 的 Windows 10)