python
import Levenshtein
import numpy as np
Levenshtein._levenshtein.distance = Levenshtein._levenshtein.distance_cython
def levenshtein_distance(a, b):
return np.sum(np.array(list(a)) != np.array(list(b)))
from multiprocessing.dummy import Pool as ThreadPool
def calculate_distance(pair):
return Levenshtein.distance(pair[0], pair[1])
def parallel_levenshtein(pairs):
results = pool.map(calculate_distance, pairs)
pool.close()
pool.join()
return results
from functools import lru_cache
@lru_cache(maxsize=None)
def cached_levenshtein(a, b):
return Levenshtein.distance(a, b)
def jaro_winkler_similarity(a, b):
return Levenshtein.jaro_winkler(a, b)
pair = ("kitten", "sitting")
print("Levenshtein distance:", Levenshtein.distance(*pair))
print("NumPy-accelerated distance:", levenshtein_distance(*pair))
pairs = [("kitten", "sitting"), ("moon", "moat"), ("cat", "bat")]
print("Parallel Levenshtein distance:", parallel_levenshtein(pairs))
print("Cached Levenshtein distance:", cached_levenshtein(*pair))
print("Jaro-Winkler similarity:", jaro_winkler_similarity(*pair))