2

「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']は、たとえばlist のようなものでsearchword、 は list になります['r', 'a', 'q', 'd']

関数が を返す場合、True一致するキーワードを出力します。元。searchword「 raqd」の「rad 」。

searchword1文字の追加または削除で、可能なすべての一致を見つける必要があります。

そう例。「raqd」には「rad」のオプションがあり、「poted」は「posted」または「potted」にすることができます。

これまでのところ、リストを使用して各単語の文字を相互に比較しようとしています。私の質問は、現在の戦略がうまくいかない理由と、それを改善するにはどうすればよいかということです。なぜ間違った出力が得られるのかわかりません:

dna   ira   fra   had   har   nra   jar   jaq   bra   era   amd   

私が得ている言葉のほんの一例です

4

1 に答える 1

2

ずっと前に、コースの課題のために一度スペルチェッカーを書かなければなりませんでした。それはあなたが言ったことをほとんどしなければなりませんでした:「単語」が与えられると、1文字の追加または削除が与えられたすべての可能な一致を提案します。私が覚えているのは、主要な辞書の単語リストをハッシュ テーブル (クイック O(1) アクセスを備えたもの) にロードし、指定された単語について、文字の追加と削除を含むすべての可能な組み合わせを生成し、それらがメインにあるかどうかを確認することでした。単語リスト。任意の一致が提案として使用されます。

より複雑なスペル チェッカーについては、レーベンシュタイン距離を使用して BK-Tree を作成してみてください: http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees

于 2012-11-14T05:15:24.677 に答える