|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Здравствуйте! Возник такой вопрос: Имеется программа, которая обрабатывает xml файл и перемещает данные в курсор и имеется обычная dbf таблица с теми же самыми данными импортированными из excel. Суть задачи состоит в том, что нужно сравнить создаваемый курсор и имеющуюся таблицу на наличие несовпадений. Сравнить нужно по адресу проживания человека, но самая жуть в том, что в таблице адрес структурирован по столбцам, т.е. Область, регион, район, улица, дом находятся в разных столбцах, а в xml файле неструктурирован и записан одной строкой. Как возможно структурировать такой адрес и собственно сравнить со второй таблицей? Спасибо заранее! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 11:38 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Разобраться в формате склеивания адреса в XML (где какие запятые, пробелы и т.д.), затем склеить данные из таблицы в строку того же формата. Строку сравнивать со строкой XML. Или наоборот разбирать адрес в XML, но первый вариант проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 11:46 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Dima T, склеивать вобще не вариант, это таблица с данными из органа ЗАГС)) им после сравнения нужна таблица такого же формата) разбить на части я разобрался как, GetWordNum отлично с этим справляется, там разделителями между слов являются запятые. нужно именно после функции getwordnum поместить разделенную строку по отдельным столбцам, т.е. как в таблице второй и сравнить именно по этим стобцам: область, район, улица, дом. Данные одинаковые, просто в одной цельной строкой, а в другой все разложено по столбцам =\ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 11:59 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Проблема то в чем? На конкретном примере опиши что не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 12:06 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Dima T, у меня 18 папок с xml-файлами, каждый файл содержит хренову тучу данных о разных людях такого вида автор- <ФИО> <Фамилия>АЛЕКСЕЕВА</Фамилия> <Имя>АВГУСТА</Имя> <Отчество>ФЕДОРОВНА</Отчество> </ФИО> <Пол>Ж</Пол> - <МестоРождения> <ТипМестаРождения>ОСОБОЕ</ТипМестаРождения> <ГородРождения /> <РайонРождения /> <РегионРождения /> </МестоРождения> <ДатаРождения>20.07.1930</ДатаРождения> <ДатаСмерти>31.05.2014</ДатаСмерти> <НомерЗаписиАкта>215</НомерЗаписиАкта> <ДатаЗаписиАкта>02.06.2014</ДатаЗаписиАкта> - <УдостоверяющийДокумент> <ТипУдостоверяющего>ПРОЧЕЕ</ТипУдостоверяющего> - <Документ> <НаименованиеУдостоверяющего>ИНОЕ</НаименованиеУдостоверяющего> <СерияРимскиеЦифры>41</СерияРимскиеЦифры> <СерияРусскиеБуквы>01</СерияРусскиеБуквы> <НомерУдостоверяющего>350077</НомерУдостоверяющего> <ДатаВыдачи>31.12.1990</ДатаВыдачи> <КемВыдан>ПИКАЛЕВСКОЕ О.М БОКСИТОГО</КемВыдан> </Документ> </УдостоверяющийДокумент> - <ПоследнееМестоЖительства> <ТипАдреса>НЕСТРУКТУРИРОВАННЫЙ</ТипАдреса> <Индекс /> - <НеструктурированныйАдрес> <Адрес>ПИКАЛЕВО,ЛЕНИНГРАДСКАЯ ОБЛАСТЬ,РОССИЯ,УЛИЦА ГОРНЯКОВ,Д.02,КВ.14</Адрес> </НеструктурированныйАдрес> </ПоследнееМестоЖительства> <СтраховойНомер /> <ДатаЗаполнения>23.12.2014</ДатаЗаполнения> Но мне самое главное тут нужен адрес. Когда создается курсор из xml файлов, в поле "Адрес" записывается вся строка "ПИКАЛЕВО,ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ,РОССИЯ,УЛИЦА ГОРНЯКОВ,Д.02,КВ.14" Разбить можно getwordnum-ом, а как после этого впихнуть разбитые слова в новые поля в курсоре? На практике можно склеить потом данные из таблицы в одну строку, но увидев, каким образом заполнен адрес в xml файлах, можно об этом забыть, ибо все вразброс. Например в excel файле - Горняков улица, а здесь улица Горняков, дом 2, а здесь 02. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 12:26 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
alexwechselРазбить можно getwordnum-ом, а как после этого впихнуть разбитые слова в новые поля в курсоре? Ты не знаешь как поля в курсор добавить? Я правильно понял? Так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 12:38 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
alexwechselНапример в excel файле - Горняков улица, а здесь улица Горняков, дом 2, а здесь 02. Тут только эвристику свою писать, приводить написание к одному знаменателю, например при наличии слова "улица" его убирать и в начало дописывать писать "ул.", причем в обоих вариантах. т.е. "Горняков улица" станет "ул.Горняков" и "улица Горняков" тоже "ул.Горняков". Совсем убирать "ул." нельзя, т.к. может быть "пр.Горняков" из которого также уберешь "пр.". Думаю потом еще вылезет что-то типа "Карла Маркса" и "К.Маркса" С домами - убирать ведущие нолики. В общем суть: привести написание к единообразному виду без каких либо потерь смысловой нагрузки. После сравнивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 12:50 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Dima T, спасибо за совет!) Сейчас буду все пробовать, я думал еще можно попытаться сделать сравнение по ключевым словам, но тут 350 тыс записей, и рассмотреть все возможные варианты написания адреса нереально) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 13:45 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
alexwechsel Серьезный у вас набор, чапаевскими набегами трудновато будет, да еще с кучей ручной работы. Просто ДимаТ второпях спутал эвристику с нормализацией, бывает. Например, с улицами - SELECT-ом выведите уникальные имена в справочники улиц, а в ваших таблицах замените их на ID-поле. Тогда задача у вас сведется к упорядочиванию справочников, а в 350 тыс. записей для изменений достаточно будет REPLACE. Да и с KLADR не лишним будет свериться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 14:09 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
sg12, Да я вобще не понимаю, что за люди там в органах сидят. с Улица Горняков и Горняков улица это еще цветочки, тут встречается что область написана слитно с районом или город с областью, например: РОССИЯ, ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ. Ну ни в какие рамки не лезет, а ты потом сиди разбирай, что, где и как должно быть.. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 14:25 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
alexwechsel Обычное дело, и не к такому привыкните. Поэтому и нужно вывести все в справочники, при больших объемах с адресами работать лучше так. Тогда эту строку ПИКАЛЕВОЛЕНИНГРАДСКАЯ вам придется исправить один раз в справочнике. А в таблицах после этого примерно так, программно: REPLACE ALL idStreet WITH 11 FOR idStreet = 22 Вообще, лучше вывести все таблицы в базу данных, удобнее работать из формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 14:46 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
alexwechselс Улица Горняков и Горняков улица это еще цветочки, тут встречается что область написана слитно с районом или город с областью, например: РОССИЯ, ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ. Ну ни в какие рамки не лезет, а ты потом сиди разбирай, что, где и как должно быть.. выкинь все небуквоцифры чтобы получилось в обоих случаях РОССИЯПИКАЛЕВОЛЕНИНГРАДСКАЯОБЛАСТЬ. alexwechselDima T, спасибо за совет!) Сейчас буду все пробовать, я думал еще можно попытаться сделать сравнение по ключевым словам, но тут 350 тыс записей, и рассмотреть все возможные варианты написания адреса нереально) Реально. Их не так уж и много. Хуже если есть сокращения и ошибки. Еще мысль подкину: если одна запись одного списка соответствует одной записи второго списка, то совпавшие записи выкидываем из дальнейших проверок. Т.е. если из 350 тыс нашлось 200, то искать остается в 150. Дальше нечеткий поиск: каждое из одного списка сравниваешь со всем вторым списком, рассчитываешь похожесть (например город совпал + 10, улица + 20, дом + 30 и т.д.) далее выдаешь оператору исходный адрес и варианты по уменьшению похожести. Веса только надо подобрать подходящие. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 15:53 |
|
Сравнение создаваемого курсора и таблицы
|
|||
---|---|---|---|
#18+
Для нормализации адресов воспользуйтесь API сервиса dadata ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2015, 15:55 |
|
|
start [/forum/topic.php?fid=41&msg=38900139&tid=1582423]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 201ms |
0 / 0 |