2

如果我有一个单词'raqd',我将如何使用python进行拼写检查,可以这么说,在'spellcheck'中找到单词'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”可以是“posted”或“potted”。

到目前为止,我一直在尝试使用列表来比较每个单词中的字符。我的问题是:为什么我目前的策略不起作用,我该如何改进它?我不确定为什么它给了我不正确的输出:

dna   ira   fra   had   har   nra   jar   jaq   bra   era   amd   

只是我得到的单词的一个小例子

4

1 回答 1

2

很久以前,我不得不为课程作业编写一次拼写检查器。它几乎必须按照您所说的进行:给定一个“单词”,在给定单个字母添加或删除的情况下建议所有可能的匹配项。我记得做的是将主字典单词列表加载到哈希表中(具有快速 O(1) 访问的东西),然后对于给定的单词,生成所有可能的字母添加和删除组合,并检查它们是否在主词汇表。任何匹配都将用作建议。

对于更复杂的拼写检查器,您可以尝试使用 Levenshtein 距离编写 BK-Tree:http: //blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees

于 2012-11-14T05:15:24.677 回答