スペルチェッカー モジュールを作成しようとしています。
テキストをロードし、16 mb ファイルから辞書を作成し、検出された単語が辞書の単語と類似しているかどうかをチェックします (類似 = 2 文字まで変化する) 場合は、辞書の形式に変更します。
現在、レーベンシュタイン距離アルゴリズムを使用しており、50 単語セットの処理に 3 分かかります...
より迅速な解決策が必要であると確信しています。プロファイラーによると、私のアプリは時間の 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]