Программно выяснить, эквивалентны ли переведенные имена

Я пытаюсь увидеть, эквивалентны ли два переведенных имени. Иногда перевод будет иметь имена, упорядоченные по-разному. Например:

>>> import difflib
>>> a = 'Yuk-shing Au'
>>> b = 'Au Yuk Sing'
>>> seq=difflib.SequenceMatcher(a=a.lower(), b=b.lower())
>>> seq.ratio()
0.6086956521739131

"Юк-Шинг Ау" и "Ау Юк Синг" - это одно и то же лицо. Есть ли способ обнаружить что-то подобное, так что ratio для таких имен будет намного выше? Аналогично результату для:

>>> a = 'Yuk-shing Au'
>>> b = 'Yuk Sing Au'
>>> seq=difflib.SequenceMatcher(a=a.lower(), b=b.lower())
>>> seq.ratio()
0.8181818181818182

1 ответ

Решение

Вы можете нормализовать порядок имен перед сравнением:

def normalize(name):
    name_parts = name.replace("-", " ").split()
    return " ".join(sorted(name_parts)).lower()
Другие вопросы по тегам