私は2つのリスト(1つはエラーと他の正しいデータで)を読むためのPythonプログラムを持っています。エラーのあるリストのすべての要素を、正しいリストのすべての要素と比較する必要があります。比較した後、私は比較された各ペア間のすべての編集距離を取得します。今私は与えられたエラーデータのための最小の編集距離を見つけることができ、私の正しいデータを取得します。PythonのLevenshtein距離は編集距離として1だけ与えます
私は編集距離を計算するのにlevenshtein距離を使用しようとしていますが、すべての編集距離が1であるとしてもそれは間違っています。
これは、レーベンシュタイン距離を計算するコードが正しくないことを意味します。私はこれを解決するために苦労しています。助けて!
マイコード
import csv
def lev(a, b):
if not a: return len(b)
if not b: return len(a)
return min(lev(a[1:], b[1:])+(a[0] != b[0]), lev(a[1:], b)+1, lev(a, b[1:])+1)
if __name__ == "__main__":
with open("all_correct_promo.csv","rb") as file1:
reader1 = csv.reader(file1)
correctPromoList = list(reader1)
#print correctPromoList
with open("all_extracted_promo.csv","rb") as file2:
reader2 = csv.reader(file2)
extractedPromoList = list(reader2)
#print extractedPromoList
incorrectPromo = []
count = 0
for extracted in extractedPromoList:
if(extracted not in correctPromoList):
incorrectPromo.append(extracted)
else:
count = count + 1
#print incorrectPromo
for promos in incorrectPromo:
for correctPromo in correctPromoList:
distance = lev(promos,correctPromo)
print promos, correctPromo , distance
私は私の答えに投稿されたとおり、あなたのimplmentationは(私はあなたに1つ、より良いをお勧めしますalthought)が正しいようです。とにかくこの問題を修正する必要がある場合は、アルゴリズムが誤って1を返すケースを提供してください(自分では再現できませんでした) – caspillaga