我正在尝试导入文本文件(所有小写单词,没有标点符号)并将这些单词与单词的词典列表进行比较。如果单词未出现在词典列表中,则打印为可能不正确。如果单词确实出现在词典列表中,则不执行任何操作。我们应该在这里使用二进制搜索方法。我认为我的二分查找方法是正确的,我只是不知道在哪里/如何返回未出现在字典列表中的单词并宣布它们可能不正确。
谢谢!
我的输入文件句子:快速的红狐狸跳过慵懒的brn狗
def spellcheck(inputfile):
filebeingchecked=open(inputfile,'r')
spellcheckfile=open("words.txt",'r')
dictionary=spellcheckfile.read().split()
checkedwords=filebeingchecked.read().split()
for word in checkedwords:
low = 0
high=len(dictionary)-1
while low <= high:
mid=(low+high)//2
item=dictionary[mid]
if word == item:
return word
elif word < item:
high=mid-1
else:
low=mid+1
return word
def main():
print("This program accepts a file as an input file and uses a spell check function to \nidentify any problematic words that are not found in a common dictionary.")
inputfile=input("Enter the name of the desired .txt file you wish to spellcheck: ")
main()
答案 0 :(得分:0)
当您要搜索的数组为空时,二进制搜索“结束”。在您的情况下,您使用low
和high
跟踪数组的开始和结束索引,并且您应该继续搜索while low <= high
。
但是,当(low <= high) == False
并且您没有找到匹配的单词时,对于您的程序的逻辑意味着什么?
这意味着这个单词不在您的字典中,您应该采取适当的措施(将其添加到“错误单词”列表中。
当然,只有在查看完所有单词后,才会输出错误单词列表。
答案 1 :(得分:0)
word == item
时,您不想返回该字词。你想要摆脱while循环。但是,退出while循环有两个条件:
那么,我们如何辨别两者之间?事实证明,在Python中,else
和while
循环有一个for
子句:else子句中的代码仅在循环自然结束而不是结果时才执行break语句,这就是我使用的。
此外,要返回多个单词,我可以在列表中收集它们并稍后返回该列表,或者我可以使用yield
关键字。看看它是如何工作的。
def spellcheck(inputfile):
filebeingchecked=open(inputfile,'r')
spellcheckfile=open("words.txt",'r')
dictionary=spellcheckfile.read().split()
checkedwords=filebeingchecked.read().split()
for word in checkedwords:
low = 0
high=len(dictionary)-1
while low <= high:
mid=(low+high)//2
item=dictionary[mid]
if word == item:
break
elif word < item:
high=mid-1
else:
low=mid+1
else:
yield word
def main():
print("This program accepts a file as an input file and uses a spell check function to \nidentify any problematic words that are not found in a common dictionary.")
inputfile=input("Enter the name of the desired .txt file you wish to spellcheck: ")
for word in spellcheck(inputfile):
print(word)
main()