def Levenshtein_distance(a, b, levenstein_gap=2):
a, b = a.lower(), b.lower()
"Calculates the Levenshtein distance between a and b."
n, m = len(a), len(b)
if n > m:
# Make sure n <= m, to use O(min(n, m)) space
a, b = b, a
n, m = m, n
current_row = range(n + 1) # Keep current and previous row, not entire matrix
for i in range(1, m + 1):
previous_row, current_row = current_row, [i] + [0] * n
for j in range(1, n + 1):
add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
if a[j - 1] != b[i - 1]:
change += 1
current_row[j] = min(add, delete, change)
return current_row[n] <= levenstein_gap
Реализация расчёта расстояния Левенштейна. Функция две строки и сравнивает их. Грубо говоря если "расстояние" между двумя строками не больше чем levenstein_gap, то строки считаются похожими