2015-03-14 3 views
0

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

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

«Yuk-Shing Au» и «Au Yuk Sing» - это одно и то же лицо. Есть ли способ обнаружить что-то подобное, так что ratio для таких имен будет намного выше? Подобный результат для:

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

ответ

2

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

def normalize(name): 
    name_parts = name.replace("-", " ").split() 
    return " ".join(sorted(name_parts)).lower()