У меня есть следующая задача.У меня есть список банковских фотографий, у которых есть город, где это было сделано.Я пытаюсь написать программу, которая импортирует их.Проблема в том, что один и тот же город может быть написан по-разному:
- простой случай: REYKJAV Í K или Reykjav i k.Может быть решен с помощью инвариантного сравнения без учета регистра.
- более сложный случай: Львов или Львов - может быть решен с использованием расстояния Левенштейна.Для таких случаев, если города начинаются с одной и той же буквы и имеют расстояние, меньшее или равное 1 - мы можем это сделать.
- еще более сложный случай: Брюссель против Брюсселя.
- просто еще один: m.Вроцлав (читается как город Вроцлав)
В конце мне нужно сопоставить все эти «синонимы» этого города с некоторым общим знаменателем.
Поэтому мой вопрос - можете ли вы предложить способКак этого достичь?
Что я пробовал:
- сравнение без учета регистра + преобразование в инвариант - помогает в случае № 1.
- Расстояние Левенштейна доПосмотрите, как две строки отличаются.Не очень помогает.Расстояние 3 или больше может означать, что это синоним (например, Киев и м.Киев) или совершенно другой город (например, Рим и Римини, оба - Италия, один и тот же язык).Даже знание страны города не очень помогает.
- Пытался использовать словарь городов + поиск ближайшего термина (критерии: одинаковая длина и одинаковая первая буква, минимальное расстояние).Тем не менее, в 7% случаев у меня возникает ошибка.
- , использующая API Google Places для поиска города и его возврата в одной локали.По-прежнему не работает - Брюссель и Брюссель для Google кажутся разными, хотя оба расположены в Бельгии.
Любой совет будет оценен.
PS Как вы думаете, есть шанс исправитькартография города в 99% случаев?