Как обрабатывать названия городов с разными названиями

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

  • простой случай: Рейкьяв AV К или Рейкьяв и к. Может быть решена путем инвариантного сравнения без учета регистра.
  • более сложный случай: Львов или Львов - можно решить, используя расстояние Левенштейна. В таких случаях, если города начинаются с одной и той же буквы и имеют расстояние меньше или равное 1 - все в порядке.
  • Еще сложнее дело: Брюссель против Брюсселя.
  • просто еще один: м.Вроцлав (читается как город Вроцлав)

В конце мне нужно сопоставить все эти городские "синонимы" с общим знаменателем.

Поэтому мой вопрос - можете ли вы предложить способ, как это может быть достигнуто?

Что я пробовал:

  1. сравнение без учета регистра + преобразование в инвариант - помогает в случае № 1.
  2. Расстояние Левенштейна, чтобы увидеть, как две строки отличаются. Не очень помогает много. Расстояние 3 или больше может означать, что это синоним (например, Киев и м.Киев) или совершенно другой город (например, Рим и Римини, оба - Италия, один и тот же язык). Даже знание страны города не сильно помогает.
  3. Пытался использовать словарь городов + поиск ближайшего термина (критерии: одинаковая длина и одинаковая первая буква, минимальное расстояние). Еще в 7% случаев у меня ошибка.
  4. используя Google Места API, чтобы найти город и вернуть его в одной локали. Все еще не работает - Брюссель и Брюссель для Google кажутся разными, хотя оба расположены в Бельгии.

Любой совет будет принят во внимание.

PS Как вы думаете, есть ли шанс исправить город в 99% случаев?

1 ответ

Старый метод работы с этим был тем, что мы делали лет десять назад или около того - создавали таблицу базы данных с поисками. Предполагая, что мы могли бы определить возможные варианты (не всегда хорошее предположение, но лучшее, что у нас было в то время), мы могли бы выполнить поиск и сохранить только "правильный" вариант (как в наиболее распространенном и / или том, который мы хотели), Это включает в себя повторное изучение и работу ногами вперед, но может привести к довольно хорошим результатам. И, если база данных настроена правильно, вы можете добавлять новые варианты по мере их появления в данных.

99% было бы сложно, так как вариации неизвестны.

Другие вопросы по тегам