from .string_distance import NormalizedStringDistance from .string_similarity import NormalizedStringSimilarity from .levenshtein import Levenshtein class NormalizedLevenshtein(NormalizedStringDistance, NormalizedStringSimilarity): def __init__(self): self.levenshtein = Levenshtein() def distance(self, s0, s1): if s0 is None: raise TypeError("Argument s0 is NoneType.") if s1 is None: raise TypeError("Argument s1 is NoneType.") if s0 == s1: return 0.0 m_len = max(len(s0), len(s1)) if m_len == 0: return 0.0 return self.levenshtein.distance(s0, s1) / m_len def similarity(self, s0, s1): return 1.0 - self.distance(s0, s1)