0

スペルチェッカーを作成しようとしていますが、difflib を使用して実装したいと考えていました。/usr/share/dict/words基本的に、dictionaryFile.pyというファイルに保存している標準の UNIX 辞書 ( ) に追加した技術用語のリストがあります。

stringSim.py という名前の別のスクリプトがあり、辞書をインポートしてそれに対してサンプル文字列をテストします。基本的なコードは次のとおりです。

import os, sys
import difflib
import time
from dictionaryFile import wordList

inputString = "dictiunary" 
print "Search query: "+inputString  
startTime = time.time()

inputStringSplit = inputString.split()
for term in inputStringSplit:
termL = term.lower()
print "Search term: "+term
closeMatches = difflib.get_close_matches(termL,wordList)
if closeMatches[0] == termL: 
    print "Perfect Match"
else:
    print "Possible Matches"
    print "\n".join(closeMatches)

print time.time() - startTime, "seconds"

以下を返します。

$ python stringSim.py 
Search query: dictiunary
Search term: dictiunary
Possible Matches
dictionary
dictionary's
discretionary
0.492614984512 seconds

同様の一致を検索するために使用できるより良い戦略があるかどうか疑問に思っています (単語のスペルが間違っていると仮定します)。これは Web アプリケーション用であるため、コードのこの部分を最適化して、少しスマートにしようとしています。wordList 変数を構造化するより良い方法はありますか (現在は単なる単語のリストです)。

ありがとう。

4

1 に答える 1

0

I'm not sure difflib is best solution for this kind of work; typically, spellcheckers use some sort of edit distance, e.g. Levenshtein distance. NLTK includes implementation(s) of edit distance, I'd start there instead.

于 2014-05-16T19:49:41.973 に答える