私はスペルチェッカーモジュールを作成しようとしています。類似の単語を探しています
16mbファイルから辞書を作成し、見つかった単語が辞書の単語と似ているかどうかをチェックします(類似= 2文字まで変わります)。
今私は私が速く解決策が存在しなければならないことをかなり確信して... 3分かかります
を設定する50語のレーベンシュタイン距離アルゴリズムおよび処理を使用しています。 Profilerは私のアプリがLevenshtein Distance機能の時間の80%以上を費やしていると言ってくれました。
もっと良いソリューション/アルゴリズムはありますか?ここで
は、私が使用するアルゴリズムのバージョンで実装されています。
def levenshteinDistance(s1, s2):
l_s1 = len(s1)
l_s2 = len(s2)
d = [[a for a in genM(x, l_s2 + 1)] for x in xrange(l_s1 + 1)]
for i in xrange(1, l_s1 + 1):
for j in xrange(1, l_s2 + 1):
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + decide_of_equality(s1[i - 1],s2[j - 1]))
return d[l_s1][l_s2]
スペルチェッカーは通常、オプションを作成してユーザーに選択させるため、スペルチェックよりも「自動修正」に似ています。オートコレクトは、明らかにうまくいくことはほとんど不可能です。テレビコマーシャルでさえ、ほぼ普遍的に認められています。 :-) –
単語の最初の文字が常に正しいと仮定すると、辞書でその文字で始まる単語をチェックすることができます。それはあなたの時間を多かれ少なかれ倍に減らします。 – Doboy
私はPythonについてよく知らないが、距離関数は標準の動的プログラミングソリューションを使用する。ここで私のバージョンはC + +です:http://codereview.stackexchange.com/questions/10130/edit-distance-between-two-strings多分あなたはいくつかの違いを見つけることができます。 –