如果我有一个单词'raqd',我如何使用python进行拼写检查,可以这么说,在'拼写检查'中找到单词'rad'作为选项?我一直想做的是:
def isbettermatch(keysplit, searchword):
i = 0
trues = 0
falses = 0
lensearchwords = len(searchword)
keysplits = copy.deepcopy(keysplit)
searchwords = copy.deepcopy(searchword)
#print keysplit, searchwords
if len(keysplits) == len(searchwords)-1:
i = 0
while i < len(keysplits):
j = 0
while j < lensearchwords:
if keysplits[i] == searchwords[j]:
trues +=1
searchwords.pop(j)
lensearchwords = len(searchwords)
elif keysplits[i] != searchwords[j]:
falses +=1
j +=1
i +=1
if trues >= len(searchwords)-1:
#print "-------------------------------------------------------", keysplits
return True
keysplit
是一个类似['s', 'p', 'o', 'i', 'l']
的列表,searchword
是一个列表['r', 'a', 'q', 'd']
。
如果函数返回True
,那么它将打印匹配的关键字。防爆。 'rad',searchword
'raqd'。
我需要找到searchword
的所有可能匹配项,并添加或删除一个字母。
所以前。 'raqd'可以选择'rad','poted'可以'贴'或'盆栽'。
到目前为止,我一直在尝试使用列表来比较每个单词中的字符。我的问题是:为什么我目前的策略不起作用,我该如何改进呢?我不确定为什么它会给我不正确的输出:
dna ira fra had har nra jar jaq bra era amd
只是我得到的一个小例子
答案 0 :(得分:2)
很久以前,我必须为一门课程作业写一次拼写检查。它几乎必须按你所说的做:给出一个'单词',建议所有可能的匹配给一个字母添加或删除。我记得做的是将主字典单词列表加载到哈希表中(具有快速O(1)访问权限),然后对于给定单词,生成所有可能的字母添加和删除组合,并检查它们是否在主要词汇表。任何比赛都将被用作建议。
对于更复杂的拼写检查程序,您可以尝试使用Levenshtein距离编写BK树: http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees