Поиск имен в базе данных MySQL, которая, возможно, содержит опечатки - PullRequest
4 голосов
/ 31 мая 2011

В настоящее время я пишу сценарий, задача которого состоит в том, чтобы просмотреть десятки тысяч строк информации об учетной записи и очистить неправильно набранные адреса, а также распечатать отчеты о том, как был очищен адрес.В настоящее время самый большой источник нечистых адресов - это неправильные названия улиц (просто удивительно, как много раз вы можете написать название улицы).В любом случае, в настоящее время мой скрипт захватывает введенное название улицы и выполняет серию правок, специфичных для норвежского языка (v. становится vegen, gt. становится gata и т. Д.), И ищет название улицыв базе данных ~ 2 миллиона строк адресов.Если он не находит соответствия, он продолжает разделять вторую половину названия улицы и заменяет его подстановочным знаком.Он пробует различные варианты поиска по шаблону.

В любом случае, мой вопрос:

Включает ли MySQL что-нибудь, что могло бы сделать это проще для меня?Я помню, что слышал упоминание о функции поиска в MySQL, которая находит ячейки в столбце с наиболее подходящими символами или чем-то в этом роде.В случаях, когда мой поиск по шаблону не удался, было бы неплохо иметь.

Все, что могло бы помочь в поиске совпадений с ошибочно набранными адресами, было бы замечательно.

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Возможно, вы захотите поиграть с FULLTEXT индексами и нечеткими MATCH ... AGAINST запросами.Помните, что по умолчанию .

исключают *1005* слов короче 4 букв.
2 голосов
/ 31 мая 2011

Это немного больше работы, но:

  • Создать таблицу слов с полями

    • слово

    • num_appeared

  • и сводная таблица между словами и адресами

    • address_id

    • word_id

Пройдите по таблице address , разбейте адрес по слову, затем вставьте каждое слово в таблицу words и создайте запись в сводной таблице. Когда вы закончите, сортируйте таблицу слов по num_appeared ASC и там - у вас есть слова с наибольшим шансом опечатки. Затем вы можете создать скрипт, который будет искать в Google после этих слов, и предложение Google может быть правильной формой слова.

2 голосов
/ 31 мая 2011

Одним из вариантов может быть попытка использовать SOUNDEX, чтобы приблизить вас к тому, что вы хотите.SOUNDEX подбирает совпадения по произношению, поэтому он может приблизить вас, если люди вводят опечатки из-за фонетического написания названия улицы.

Вы также можете попробовать алгоритм расстояния Левенштейна.Это, вероятно, более тесно связано с тем, что вы ищете.В основном это показывает, насколько близко одно слово к другому.Он может использоваться для проверки орфографии и т. Д. И может быть полезен при поиске неверных данных в адресных полях.Вот ссылка на него:

http://www.merriampark.com/ld.htm

Если вы хотите, чтобы функция использовала алгоритм расстояния Левенштейна в MySQL, вы можете посмотреть пример здесь:

http://www.artfulsoftware.com/infotree/queries.php#552

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...