Сравнение имён по их части (или производной) python
У меня есть 2 имени и мне нужно сравнить их. Проблема заключается в том, что я не знаю как написаны эти 2 имени. Там может оказаться Дмитрий и Dmitry, может Димочка и Димон, может одно из имён будет написано с ошибкой. Мне нужно сравнить их и убедиться, что это одинаковые имена (или нет). Для этого я придумал такой алгоритм:
- Транслитом переводим имена (если в них попадаются не кириллические символы)
- Делаем стемминг по имени
- Проходим по получившимся именам алгоритмом по поиску расстояния Левенштейна (кол-во ошибок задаём 2)
Но в этом алгоритме возникла такая проблема. Предположим, мне прилетел Дима и Дмитрий. Транслитом здесь переводить ничего не нужно. После стемминга мы получим дим и дмитр... и, как вы понимаете, расстояние Левенштейна скажет, что это разные имена. Из этого вопрос: как понять, что дима = дмитрий или дим = дмитр? Может существуют библиотечки для python такого поиска? Или есть какой то алгоритм? Или мой алгоритм полностью неверен?
Ответы (1 шт):
Как минимум, наверняка понадобится словарь или префиксное дерево с парами <полное_имя:неполное_популярное_имя>. После обработки полного имени можно использовать прежний алгоритм.
Было бы ещё неплохо находить длину наибольшей общей подстроки между именами. А потом делать выводы, основываясь хотя бы на этих двух метриках.
Кстати, насчёт имён Дима и Дмитрий: в данном случае здесь лучше сработает модификация расстояния Левенштейна (Дамерау), поскольку нетрудно заметить, что буквы и и м меняются местами.