Однажды я сделал что-то подобное, хотя использовал Oracle, а не MySQL.17000 записей - это управляемое количество записей, но этого достаточно, чтобы создавать полезные инструменты.
В Википедии есть списки школ по всему миру , но, увы, не для Венгрии.Это жаль, потому что было бы лучше иметь список данных, которые вы должны иметь в своей системе, а не пытаться восстановить их из ваших сломанных баз данных.Было бы полезно, если бы вы могли получить такой список, чтобы вы могли сравнить свои записи с ним, а не друг с другом.Даже если вы можете просто получить списки почтовых индексов и названий городов, которые все равно помогут.
Когда речь идет о нечетких совпадающих строках, существует ряд статистических приемов.Распространенным является расстояние Левенштейна.Это дает оценку, показывающую сходство между двумя строками, выраженную в количестве изменений, необходимых для получения строки A в строку B (расстояние редактирования AKA).У Code Janitor есть реализация для MySQL, но это всего лишь главный хит в Google, и я не даю никаких гарантий. Найдите это здесь .Jaro Winkler - это еще один алгоритм сопоставления, но, похоже, в интернете работает меньше реализаций.
Общие рекомендации по обработке
- Извлечение всех названий школ и адресов в одну таблицу сметаданные, обозначающие происхождение каждой строки (база данных, таблица, первичный ключ).
- Добавление столбцов для хранения строк поиска, названия школы и адреса.Например, есть один столбец, который удаляет знаки пунктуации и числа (в некоторых алгоритмах сопоставления THMAS ближе к THOMAS, чем TH0MAS).
- В другом столбце допускаются распространенные опечатки (в британском адресе строка SW! ^, Скорее всего, представляет SW16, почтовый индекс Streatham).
- Построение полнотекстовых индексов для этих столбцов поиска, чтобы помочь в поиске вхождений распространенных слов, таких как названия городов.
- Если у вас было огромное количество данных и немного терпения, создание тезауруса для определения общих сокращений, таких как Rd, St, Blvd, может быть полезным упражнением, но оно, вероятно, не стоит 17000 строк.
- Используйте регулярные выражения для сопоставления с шаблонами, такими как почтовые индексы.