Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Олег, я вообще не ищу типы населенных пунктов (вернее не совсем так, они нужны для определения и упорядочивания адресных элементов). В общем красиво получается, нужно будет почехардить с порядком, и разные кривые комбинации погенерировать, посмотреть, как полетит. Но в первом приближении доволен. Продукт еще сырой, пока рано выкладывать.
------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Так, друзья. Меня предупреждали, что задачу красиво не решить, хотя я настроен приблизиться. Насколько получится - потом посмотрим, ее на работе все равно спросят, я ее бросить не могу. теперь.
Возникла такая засада - для выбора улицы я делаю (для каждой разбираемой адресной строки) курсор, выгребая по региону. На 100 записей рабоает около 60-70 секунд (замерял в течение дня, нагрузка на сервер разная, поэтому сильно это время не изменится). Как можно ускорить? Пока на уровне идей. А то получается, что мой алгоритм хоть и существенно получше по чувствительности к порядку адресных элементов, ошибкам (пока не прикрутил алгоритм Левенштайна, но это есть и работает), а порядок по времени или тот же, или даже побольше. Хотя до парсинга улиц был 30-40 секунд. В общем вопрос таков - как по скорости лучше обойти улицы (ну, чтоб получить код ФИАС) региона? Спасибо всем, кто откликнется с идеями, тут даже не важно, рабочие они или нет - могут натолкнуть на хороший.правильный путь. ------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Если Левенштейна пока нет, то дело вряд ли в алгоритме поиска - он не может занимать столько времени.
Я бы один раз забрал весь справочник себе и, думаю, все сразу в разы ускорится. |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
1. разложил каждую строку на составляющие. 2. сгруппировал полученный курсор по всем уровням по нарастающей, т.е. по региону, по региону + город, регион+город+улица. Ну и по району вероятно тоже. 3. искать в ФИАС соответствия уже не для каждой строки, а для группы. Вполне возможно что также по нарастающей. Сгруппировал по региону - пробежался, заполнил. Сгруппировал по регион+город - пробежался, заполнил. ... Исправлено 1 раз(а). Последнее : Taran, 02.09.17 00:13 |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Т.е. все улицы по всем регионам? Это ж 90% всего ФИАС. По такому объему поиск даже с индексами будет идти не быстро. Хотя может реально и получше, чем на каждом шаге выбирать улицы одного региона (с районом не взлетит, не все населенные пункты принадлежат району). Такая идея была, я по сути так и делаю, готовлю перед парсингом нужные справочники, чтобы все 3 млн. записей по ФИАСу не обходить. ------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Олег, я примерно так и делаю.
------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Я бы забрал вообще весь справочник, а поиск с индексами будет идти быстро. У нас была подобная проблема и решилась она именно так - поставили справочник на каждую станцию (изредка обновляли), и все ускорилось в разы. В любом случае, попробовать надо, тем более это несложно. Исправлено 2 раз(а). Последнее : akvvohinc, 04.09.17 05:28 |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> готовлю перед парсингом нужные справочники, чтобы все 3 млн. записей по ФИАСу не обходить.
Выбрать куда-то нужные справочники мне не потребовалось, сам КЛАДР (и ФИАС) - это и есть сам справочник. Главное сделать индексы, которые "ускорят"... Если не брать экзотические виды записи адреса, то человек записывает адрес начиная от общих элементов (область, город) к частным (улица, дом). Поэтому: - сначала выделяю старший адресный элемент (например, область) - ищу его в КЛАДР, получаю его CODE - беру следующий адресный элемент (например город) - ищу его в КЛАДР но только среди элементов с CODE, полученным из предыдущего адресного элемента - и так циклически повторять до последнего адресного элемента - () в этом циклическом алгоритме придется заложить выход из цикла, возврат на шаг назад, или к началу, с другими константами/параметрами, но это практика покажет ) () Наименования часто пишут с ошибкой, но в первой букве ошибаются редко () Из наименования удобно "вычесть" словосочетания, типа "Героя Советского Союза" (список в спойлере), чтобы алгоритм сравнения собственно фамилии дал адекватную оценку. Также пришлось отрезать малоинформативные окончания слов, в которых тоже ошибаются. () Почтовый Индекс может помочь (хотя бывает, что его указывают неправильно, но первые 3 цифры пригождаются) () Поместить КЛАДР куда-нибудь на C: - это хорошая идея, даже при наличии правильных индексов будет заметно быстрее. Слова для вычитания из наименования: |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Согласен. Попробую. Пока занят другими, не менее важными проблемами (а чтобы ускорить отладку - сделал курсор а-ля TOP<=<заданное число>. Тем не менее продолжаю отчитываться о продвижении. Они есть, пусть и медленно. Сегодня решил в общем случае проблему поиска улицы, устаревшей по названию. Она ищется по NEXTID (улицы, хотя надо прикрутить ко всем адресным элементам, в 99% алгоритм на эту ветку не зайдет, по скорость не повлияет), и лучше дополнительного перебора не нашел решения. Хотя может оно и есть. И почти допинываю поиск улицы, умеющей ошибку в названии - по алгоритму Левенштайна (я его обязательно выложу для Оракла, хотя есть и для фокса, именно с фокса и переводил, может не очень универсально, а порой и криво, но работает... идею забрать точно можно, а там допилить, как хочется и умеется). Должен работать, пока ошибки вылавливаю, не получаю нужный результат. To be continued.. ------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Олег, это очевидно, но недостаточно! Мой алгоритм уже умеет: - распознавать почти все адресные элементы, даже с ошибками - не зависит от порядка чередования адресных элементов (ну с квартиры может и вряд ли начнется адрес, но моему и на это пофиг) - восстанавливает инфу по региону и району (если село/деревня, или город, включаемый по ФИАС в район.. таких немного, но есть. Потом от этого уйдут, проект развивается в правильном направлении, а всю инфу быстро не перелопатить) - начиная с улиц будет восстановление ПРАВИЛЬНОЙ улицы, содержащую 1 ошибку в названии (пока так, потом посмотрим, можно ли взять 2 ошибки и что проверять - корень слова, а может звучание, типа SOUNDEX() Нет, пока не все идеально, но суть такая. И она будет допилена, я получу 99% почти с любых данных. В проекте есть много чего: - обучить распознаванию индексов (и не только по ФИАС, я еще почтовую базу прикручу, а номер решили брать МИНИМАЛЬНЫЙ. Это лучше, чем ничего. По не совсем правильному индексу а) налоговая примет, если в базе нет. б) до адресата дойдет, только в другое почтовое отделение, ну придет ему извещение, а проблемы-то нет. Да и в любом случае ПОПЫТКА лучше, чем ничего. - определять и решать проблему одного города в разных регионах - я прикрутил доп.запросом выборку с COUNT() по городу-области. Там где 1 - не приседаем. Может не очень красиво, у меня уже сроки начинают жать, надо в целом написать проект, а потом улучшать, и ВЫЛИЗЫВАТЬ. И там этих мест будет овердофига. - Восстанавливать улицы по индексу - в ФИАСе есть такие однозначно определяемые. Алгоритма тут хитрого и нет, но это время на отладку. Это тоже потом. - В конце концов - восстанавливать населенный пункт (не только местоположение, но и может быть и город) по индексу. И даже улицу. Да, полного разбора не получится, в налоговую не сдать такие данные. НО! Будет конкретика, чего не хватает, и это будет делаться далеко не ручным способом, а анализом лога, как минимум. Пишите свои мысли, мне этот проект нравится, даже после работы с РАДОСТЬЮ остаюсь, нет момента, что работаю на дядю, пишу для души - с энтузазизмом и радостью. Всегда бы так! ------------------ "Veni, vidi, vici!"(с) Исправлено 1 раз(а). Последнее : sphinx, 04.09.17 20:34 |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Для чего это нужно в оракле то? Там и так курсор после открытия не вынимает все 100500 подходящих записей, а если "остановиться" на первой же (или на десятой, к примеру), то вообще практически минимум блоков будет считывать. Единственно что хинт FIRST_ROWS() может пригодиться. Для отладки запроса вне pl/sql блока стоит просто использовать утилиту позволяющую не вычитывать ВСЕ подходящие данные (типа прогрессивной выборки - вынимаем первые 100, а потом ждём, нужно ли "листать" дальше - скажем Toad так работает, за другие утилиты не скажу). Вообще, если что, подход к работе с теми же курсорами в фоксе и оракле ну очень разный. Равно как и способы (в смысле как оптимально это делать), к примеру, определения "наличия записей по условию", или наоборот - условные ветки "при отсутствии записей для update"... ------------------ WBR, Igor |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
sphinx Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Игорь, учту. Спасибо!
Я не все знаю, всю жизнь учусь. ------------------ "Veni, vidi, vici!"(с) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
akvvohinc Сообщений: 4203 Откуда: Москва Дата регистрации: 11.11.2008 |
Как бы хорошо ты не допилил прогу сам, но ты слишком высокого мнения о "наборщиках" адреса. Снизь планку до 95-97% - это более реальные цифры для произвольных данных. (ты же отлаживаешься на вполне конкретных данных и предусмотреть будущих, пока не встретившихся, вариантов ошибок не можешь, а они обязательно будут) |
Re: Алгоритм разбора адресной строки по кодам ФИАС | |
---|---|
andrewk Автор Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Пару месяцев назад занимался схожим вопросом – возникла необходимость заполнить ФИАС-коды улиц и домов у всех клиентов. В процессе изучения вопроса наткнулся на несколько сайтов, которые онлайн подбирают адреса и выдают коды. В том числе DaData.ru. Вообще-то он заточен на онлайн-сервисы (магазины и т.п.): на своём сайте помещаешь код, появляется строка ввода адреса, клиент там в свободной форме набирает свой адрес, в процессе ввода в виде выпадающего списка появляются правильные адреса – очень прикольно. В результате «наш» сайт получает «правильный» адрес и штук 70 его свойств – раскладка по элементам, их ФИАС- и КЛАДР-коды. Но главное, что было нужно мне – есть api для работы с их веб-сервисом. Для его использования нужно у них зарегистрироваться, получаешь свой ключ доступа, который передаётся с запросами. Ограничение для бесплатного варианта – 10 тысяч запросов в сутки – мне этого вполне достаточно. Весь обмен идёт в виде json-строк. Выдаёт массив вариантов в порядке степени похожести. Короче, на нём и остановился. В VFP сваял класс-оболочку для работы с этим сервисом. Для работы с json использую nfJson с минимальными правками. На формах работы со справочниками улиц и домов добавил кнопку «получить коды ФИАС». Случай, если получаем более одного варианта, делать решил пока не обрабатывать (так-то можно варианты юзеру предложить на выбор), просто вывожу сообщение об этом и пишу чтобы доложили мне, но никто не сообщал об этом. Вроде, у всех прокатило нормально. |
© 2000-2024 Fox Club  |