У меня есть «несколько» уродливое поле в базе данных, которое содержит названия локаций. Например, Мэдисон Сквер Гарденс, который также был введен как «Мэдисон Сквер Гарденс» и т. Д. И т. Д.
Я пытаюсь извлечь данные, чтобы получить точный список всех мест.
Для этого я создал SQL-запрос, в котором я присоединяю события для каждого местоположения, а затем группирую по имени местоположения и использую только группы местоположений, имеющие более 10 записей (что отфильтровывает несколько не надежные записи), но я все равно получаю некоторые совсем другие варианты написания и записи, что приводит к дублированию свойств / местоположений.
Мой SQL-запрос выглядит так
"SELECT location, COUNT(*) FROM locations
JOIN event ON locations.lid=events.lid
WHERE `long`
BETWEEN - 74.419382608696
AND - 73.549817391304
AND lat
BETWEEN 40.314017391304
AND 41.183582608696
GROUP BY location
HAVING COUNT(*)>10
Выполнение этого запроса обеспечивает 3 различных записи "Мэдисон Сквер Гарден", "Мэдисон Сквер Гарденс", "Мэдисон Сквер Гарден". Конечно, это только для входа в Мэдисон Сквер Гарден. Большинство записей имеют несколько несколько разных написаний.
Я ограничиваю свои поиски широтой / долготой, чтобы не получать местоположения с одинаковыми названиями в разных городах, сгруппированных вместе.
Есть ли способ с регулярными выражениями или чем-то в предложении GROUP, чтобы их сгруппировать последовательно? Даже простое удаление конечных «и» и «перед» перед группировкой, вероятно, принесет большую пользу.
Я собирался взять каждый результат и затем сопоставить регулярное выражение со всеми местоположениями в пределах широты / долготы?
К счастью, у меня достаточно событий, связанных с локациями, так что я в некоторой степени могу распознать главные локации.
Есть ли другие предложения для извлечения местоположений из полуструктурированных данных?
Данные отбираются из разных источников, поэтому я не могу контролировать ввод.