Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Vadim Romanenko
Member

Откуда: Харьков, Украина
Сообщений: 1462
Привет всем!

Есть некая таблица с адресами. Например, tbAddress. В ней - свойства pk_id, Addr1, Addr2, City, Zip. Необходимо нарисовать хранимую процедуру, которая вернет все адреса, соответствующие заданному. Искомый адрес задается через указание Addr1 и City. В чем сложность. Сложность в том, что данные в БД поступают из кучи источников. Часть источников утруждают себя валидацией адреса через, например, Google Maps, часть - нет. И в результате в БД имеется несколько версий одного и того же адреса. И в конечном итоге условие из серии
select *
  from tbAddress a
 where a.Addr1 = :Addr1 and a.City = :City

не срабатывает. Вот примеры одного и того же адреса Addr1:
1313 12 Avenue
1313 12th Avenue
1313 12th Ave

Может кто-то решал похожую задачу?

Буду благодарен за какие-то идеи.

ПС: используется версия MS SQL Server 2005 standard
1 фев 16, 19:37    [18758442]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Vadim Romanenko,

Все адреса должны быть приведены к одному формату прежде чем в них можно будет что-то искать так как вы хотите.
http://www.loqate.com/solutions/data-quality/
Или любой другой подобный сервис.
1 фев 16, 21:43    [18758839]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Vadim Romanenko,

Я решал.
Задача состояла в том чтобы для каждого адреса определить код КЛАДРа.(Это у нас в России классификатор адресов.)


Задача сводится к тому чтобы адрес разобрать на части и знать какая часть что значит.
Самому пытаться разбирать адрес - это конечно трудоемко.
решение такое - найти в инете какой-нить сайт который уже реализовал эти алгоритмы и пряма сSQL можно посылать ему запрос - типа разбери адрес. - он в ответ вам шлет причесанный адрес.

Далее периодически запускаем job который обрабатывает новые адреса и все.
2 фев 16, 08:35    [18759621]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadim Romanenko
Вот примеры одного и того же адреса Addr1:
1313 12 Avenue
1313 12th Avenue
1313 12th Ave

А что на вход поиска то подается ?
Какие-нибудь Ave 12 ?
2 фев 16, 09:24    [18759769]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Vadim Romanenko
Member

Откуда: Харьков, Украина
Сообщений: 1462
Mind
Vadim Romanenko,

Все адреса должны быть приведены к одному формату прежде чем в них можно будет что-то искать так как вы хотите.
http://www.loqate.com/solutions/data-quality/
Или любой другой подобный сервис.


Спасибо, попробую посмотреть в эту сторону. Еще вариантов у Вас в кармане не припасено случайно?

Jaffar
Vadim Romanenko,

Я решал.
Задача состояла в том чтобы для каждого адреса определить код КЛАДРа.(Это у нас в России классификатор адресов.)


Задача сводится к тому чтобы адрес разобрать на части и знать какая часть что значит.
Самому пытаться разбирать адрес - это конечно трудоемко.
решение такое - найти в инете какой-нить сайт который уже реализовал эти алгоритмы и пряма сSQL можно посылать ему запрос - типа разбери адрес. - он в ответ вам шлет причесанный адрес.

Далее периодически запускаем job который обрабатывает новые адреса и все.


Такой алгоритм пока видится и мне. Но кажется геморройным. Моя почти такая же идея:
- имеем таблицу возможных вариантов написания адресов.
- каждому варианту ставим в соответствие некий унифицированный адрес
- унифицированный адрес для варианта написания определяем через Google Maps.
Самая большая проблема - стартовый этап. Потому что гуголь дает нашару проверить не больше 2.000 адресов. А платно - по-моему у них вообще такого варианта нет :(

Glory
Vadim Romanenko
Вот примеры одного и того же адреса Addr1:
1313 12 Avenue
1313 12th Avenue
1313 12th Ave

А что на вход поиска то подается ?
Какие-нибудь Ave 12 ?


не, подается один из вариантов адреса
2 фев 16, 15:24    [18762489]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
aleks2
Guest
Дети интернета.

1. "Искомый адрес" делим на слова и суем в табличку.
2. Join [табличка] on Addr like '%слово из таблички%' group by Addr order by count(*)

ЗЫ. Будет скан, но вариантов нема.
3 фев 16, 05:41    [18765105]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Vadim Romanenko
Member

Откуда: Харьков, Украина
Сообщений: 1462
aleks2
Дети интернета.

1. "Искомый адрес" делим на слова и суем в табличку.
2. Join [табличка] on Addr like '%слово из таблички%' group by Addr order by count(*)

ЗЫ. Будет скан, но вариантов нема.

А еще есть вариант, что такого адреса просто нет в табличке. Но Ваш подход вернет результат по-любому.
Например, в БД есть адрес
1313 12 Avenue
А пользователь ищет
131 12th Ave
Ваш подход вернет его как искомый, что не есть верным. Так же вернет
вместо 12-й Авеню, например, 1-ю. И т.д.
Другим словом, не вариант. Да и как верно Вы отметили, это полный перебор да еще и фактически по частям предложения. Даже на ста тыщах адресов каждый запрос будет превращаться в боль, ИМХО
3 фев 16, 16:00    [18768202]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
aleks2
Guest
Vadim Romanenko
Ваш подход вернет его как искомый, что не есть верным.


С философского сбежал?
А как быть, если в базе есть "На деревню дедушке" и пользователь ищет "На деревню дедушке"... но это не есть верный адрес?
Ну ка, филозофски розжувай нам.
3 фев 16, 16:53    [18768679]     Ответить | Цитировать Сообщить модератору
 Re: Поиск адреса в таблице с адресами, решение проблем разночтения  [new]
Vadim Romanenko
Member

Откуда: Харьков, Украина
Сообщений: 1462
aleks2
Vadim Romanenko
Ваш подход вернет его как искомый, что не есть верным.


С философского сбежал?
А как быть, если в базе есть "На деревню дедушке" и пользователь ищет "На деревню дедушке"... но это не есть верный адрес?
Ну ка, филозофски розжувай нам.

Шановный, Ваш тон не выглядит допустимым, по кр мере для меня.
Но тем не менее. В приведенном Вами примере - поиск пользователем адреса "На деревню" выдаст как найденный адрес "На деревню дедушке". При этом, возможно, пользователь просто хочет найти сельсовет. До встречи. Надеюсь, не скорой.
3 фев 16, 17:51    [18769202]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить