Есть встроенный difflib, который может возвращать коэффициент схожести строк.
Затем я написал функцию, возвращающую строку с максимальным сходством, если это отношение схожести больше или равно 0,9 между двумя строками.
Существует небольшой ярлык для проверки совпадения первой буквы из двух строк. В противном случае расчет не выполняется. Эта идея отсюда: { ссылка }
И я предполагаю, что вы работаете в pandas, поэтому я добавил пример того, как заполнить pandas DataFrame результатами.
from difflib import SequenceMatcher
def similar(a, b):
""" https://stackoverflow.com/a/17388505/42346 """
return SequenceMatcher(None, a, b).ratio()
def max_similar_string(s, l):
first_letter_match = [i for i in l if s[0] == i[0]]
if len(first_letter_match):
max_ratio = 0
max_ratio_string = ''
for i in l:
ratio = similar(i,s)
if ratio > max_ratio:
max_ratio = ratio
max_ratio_string = i
if max_ratio >= 0.9:
return (max_ratio_string,max_ratio)
else:
return (np.nan,np.nan)
l = ['JohnDSmith5159LosAngelez','JaneDoe7719NewYork']
df = pd.DataFrame({'s':['JohnSmith5159LosAngeles','JaneDo7729NewYork']})
for idx in df.index:
df.loc[idx,'similar'], df.loc[idx,'ratio'] = max_similar_string(df.loc[idx,'s'],l)
Результат:
s similar ratio
0 JohnSmith5159LosAngeles JohnDSmith5159LosAngelez 0.936170
1 JaneDo7729NewYork JaneDoe7719NewYork 0.914286