У меня есть программа python для чтения двух списков (одна с ошибками и другая с правильными данными). Каждый элемент в моем списке с ошибкой должен сравниваться с каждым элементом в моем правильном списке. После сравнения я получаю все расстояние редактирования между каждой сравниваемой парой. теперь я могу найти наименьшее расстояние редактирования для данных ошибок и получить мои правильные данные.Расстояние Levenshtein в python, дающее только 1 как расстояние редактирования
Я пытаюсь использовать расстояние levenshtein для вычисления расстояния редактирования, но его возвращающее все расстояние редактирования равно 1, даже если это неверно.
Это значит, что код для расчета levenshtein distance неправильный. Я изо всех сил пытаюсь найти решение для этого. ПОМОГИТЕ!
Мой код
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 кажется правильным (Althought я рекомендую вам лучше один). Если вам все равно нужно исправить это, просьба указать случай, когда ваш алгоритм неверно возвращает 1 (который я не мог воспроизвести самостоятельно) – caspillaga