Совпадение похожих почтовых индексов - PullRequest
0 голосов
/ 01 октября 2010

Фон

Для замены недействительных почтовых индексов.

Пример данных

Рассмотрим следующий набор данных:

 Typo  | City       | ST | Zip5
-------+------------+----+------
 33967 | Fort Myers | FL | 33902
 33967 | Fort Myers | FL | 33965
 33967 | Fort Myers | FL | 33911
 33967 | Fort Myers | FL | 33901
 33967 | Fort Myers | FL | 33907
 33967 | Fort Myers | FL | 33994
 34115 |Marco Island| FL | 34145
 34115 |Marco Island| FL | 34146
 86405 |  Kingman   | FL | 86404
 86405 |  Kingman   | FL | 86406

33967 близко соответствует 33965, хотя 33907 также может быть правильным. (В данном случае 33967 является действительным почтовым индексом, но отсутствует в нашей базе данных почтовых индексов.)

34115 близко соответствует 34145 (от одной цифры, с разницей 3 для этой цифры).

86405 близко соответствует обоим.

Иногда цифры просто меняются местами (например, 89 вместо 98).

Вопрос

Как бы вы написали оператор SQL, который находит «минимальное расстояние» между несколькими числами, имеющими одинаковое количество цифр, возвращая максимум один результат, несмотря ни на что?

Идеи

  • Вычтите цифры.
  • Использовать LIMIT 1.

Условия

PostgreSQL 8,3

Ответы [ 2 ]

5 голосов
/ 01 октября 2010

Это звучит как случай для расстояния Левенштейна .

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

Похоже, что в PostgreSQL он встроен:

test=# SELECT levenshtein('GUMBO', 'GAMBOL');
 levenshtein
-------------
           2
(1 row)

http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html

2 голосов
/ 01 октября 2010

Redfilter ответил на заданный вопрос, но я просто хотел уточнить, что запрошенное решение не решит то, что кажется реальной проблемой.

Похоже, что настоящая проблема здесь в том, что у вас есть база данных, которая была вручную введена, и некоторые числа были расшифрованы, давая данные для мусора.

ЕДИНСТВЕННЫЙ способ решить эту проблему - проверить полный адрес по базе данных, такой как USPS, MapQuest или другой поставщик. Я знаю, что первые два имеют API для этого.

Пример, который я привел в комментарии выше, состоял в том, чтобы рассмотреть почтовый индекс 75084 и городскую ценность Ричардсона. У Ричардсона есть почтовые индексы в диапазоне 75080, 81, 82, 83 и 85. Минимальное количество правок будет 1. Но какой именно?

Другая равная проблема состоит в том, что, если введенный почтовый индекс был 75083 для Ричардсона. Какой является действующим почтовым индексом для этого города; однако, что если адрес находится в 75082?

Единственный способ получить это - подтвердить полный адрес.

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