我正在尝试创建一个简单版本的拼写检查,它带有.txt文件,并比较是否在字典中找到每个单词。我已经建立了将.txt文件转换为列表并将字典转换为列表的函数,但是我在拼写检查函数中正在努力调用我的排序二进制搜索树中的字典。这是BinarySearchTree的类,后跟我的拼写检查函数
class BinarySearchTree:
def __init__(self):
self.root = None
def insert(self,val):
if self.root == None:
self.root = BinaryNode(val)
else:
self.recursive_insert(root,val)
def recursive_insert(self,parent,val):
if parent.data < val:
if parent.right != None:
self.recursive_insert(parent.right,val)
else:
parent.right = BinaryNode(val)
else:
if parent.left != None:
self.recursive_insert(parent.left,val)
else:
parent.left = BinaryNode(val)
def dictionary_insert(self,text):
for word in text:
self.insert(word)
def search(self,val):
if self.recursive_search(self.root,val) != None:
return True
else:
return False
def recursive_search(self,parent,val):
if parent.data == val:
return parent
elif parent.data > val:
return self.recursive_search(parent.left,val)
else:
return self.recursive_search(parent.right,val)
这是我的拼写检查功能:
def spell_checker(text):
N = len(text)
misspelled = 0
for i in range(N):
if BinarySearchTree().search(text[i]) == True:
misspelled = misspelled
else:
misspelled = misspelled + 1
print text[i]
if misspelled == 0:
print "There are no spelling errors!"
非常感谢任何帮助。
答案 0 :(得分:1)
当您第一次致电recursive_search
时,您将self.root
作为parent
传递。但是,在__init__
中,self.root
设置为None
。因此,尝试访问parent.data
会给您一个错误,因为None.data
不存在。作为设置过程的一部分,您需要执行dictionary_insert
,传入有效单词列表,以便树中实际包含单词:
dct = BinarySearchTree()
dct.dictionary_insert(valid_word_list)
您还需要更正insert
的最后一行:
self.recursive_insert(self.root, val)
答案 1 :(得分:0)
只是为了填写这个答案:
recursive_search
调用无法正确处理失败:
def recursive_search(self,parent,val):
if parent.data == val:
return parent
elif parent.data > val:
return self.recursive_search(parent.left,val)
else:
return self.recursive_search(parent.right,val)
如果在树中根本找不到该单词,最终将调用此parent
参数设置为None
,语句if parent.data == val:
将抛出{{ 1}}例外。
此处的解决方案是在NoneType
:
None
parent == None