powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение создаваемого курсора и таблицы
14 сообщений из 14, страница 1 из 1
Сравнение создаваемого курсора и таблицы
    #38899641
alexwechsel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Возник такой вопрос: Имеется программа, которая обрабатывает xml файл и перемещает данные в курсор и имеется обычная dbf таблица с теми же самыми данными импортированными из excel. Суть задачи состоит в том, что нужно сравнить создаваемый курсор и имеющуюся таблицу на наличие несовпадений. Сравнить нужно по адресу проживания человека, но самая жуть в том, что в таблице адрес структурирован по столбцам, т.е. Область, регион, район, улица, дом находятся в разных столбцах, а в xml файле неструктурирован и записан одной строкой. Как возможно структурировать такой адрес и собственно сравнить со второй таблицей? Спасибо заранее!
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899660
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобраться в формате склеивания адреса в XML (где какие запятые, пробелы и т.д.), затем склеить данные из таблицы в строку того же формата. Строку сравнивать со строкой XML.
Или наоборот разбирать адрес в XML, но первый вариант проще.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899679
alexwechsel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, склеивать вобще не вариант, это таблица с данными из органа ЗАГС)) им после сравнения нужна таблица такого же формата) разбить на части я разобрался как, GetWordNum отлично с этим справляется, там разделителями между слов являются запятые. нужно именно после функции getwordnum поместить разделенную строку по отдельным столбцам, т.е. как в таблице второй и сравнить именно по этим стобцам: область, район, улица, дом. Данные одинаковые, просто в одной цельной строкой, а в другой все разложено по столбцам =\
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899697
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема то в чем? На конкретном примере опиши что не получается.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899725
alexwechsel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899742
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexwechselРазбить можно getwordnum-ом, а как после этого впихнуть разбитые слова в новые поля в курсоре?
Ты не знаешь как поля в курсор добавить? Я правильно понял?
Так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
* эмуляция получения из XML в курсор tAddr
create cursor tAddr (cAddr c(100))
insert into tAddr values ( "ПИКАЛЕВО,ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ,РОССИЯ,УЛИЦА ГОРНЯКОВ,Д.02,КВ.14")
brow

* добавление полей в tAddr
select *, cast('' as c(50)) as cGorod, cast(0 as n(10)) as nDom from tAddr into cursor tAddr readwrite
brow
sele tAddr 
scan
* разбивай tAddr.cAddr  getwordnum-ом и пиши в соответствующие поля
endscan
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899759
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexwechselНапример в excel файле - Горняков улица, а здесь улица Горняков, дом 2, а здесь 02.
Тут только эвристику свою писать, приводить написание к одному знаменателю, например при наличии слова "улица" его убирать и в начало дописывать писать "ул.", причем в обоих вариантах. т.е. "Горняков улица" станет "ул.Горняков" и "улица Горняков" тоже "ул.Горняков". Совсем убирать "ул." нельзя, т.к. может быть "пр.Горняков" из которого также уберешь "пр.".
Думаю потом еще вылезет что-то типа "Карла Маркса" и "К.Маркса"

С домами - убирать ведущие нолики.

В общем суть: привести написание к единообразному виду без каких либо потерь смысловой нагрузки. После сравнивать.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899863
alexwechsel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, спасибо за совет!) Сейчас буду все пробовать, я думал еще можно попытаться сделать сравнение по ключевым словам, но тут 350 тыс записей, и рассмотреть все возможные варианты написания адреса нереально)
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899919
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexwechsel

Серьезный у вас набор, чапаевскими набегами трудновато будет, да еще с кучей ручной работы.
Просто ДимаТ второпях спутал эвристику с нормализацией, бывает.
Например, с улицами - SELECT-ом выведите уникальные имена в справочники улиц, а в ваших таблицах замените их на ID-поле.
Тогда задача у вас сведется к упорядочиванию справочников, а в 350 тыс. записей для изменений достаточно будет REPLACE.
Да и с KLADR не лишним будет свериться.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899946
alexwechsel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sg12,

Да я вобще не понимаю, что за люди там в органах сидят.
с Улица Горняков и Горняков улица это еще цветочки, тут встречается что область написана слитно с районом или город с областью, например: РОССИЯ, ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ. Ну ни в какие рамки не лезет, а ты потом сиди разбирай, что, где и как должно быть..
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38899991
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexwechsel

Обычное дело, и не к такому привыкните.
Поэтому и нужно вывести все в справочники, при больших объемах с адресами работать лучше так.
Тогда эту строку ПИКАЛЕВОЛЕНИНГРАДСКАЯ вам придется исправить один раз в справочнике.
А в таблицах после этого примерно так, программно:
REPLACE ALL idStreet WITH 11 FOR idStreet = 22

Вообще, лучше вывести все таблицы в базу данных, удобнее работать из формы.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38900139
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexwechselс Улица Горняков и Горняков улица это еще цветочки, тут встречается что область написана слитно с районом или город с областью, например: РОССИЯ, ПИКАЛЕВОЛЕНИНГРАДСКАЯ ОБЛАСТЬ. Ну ни в какие рамки не лезет, а ты потом сиди разбирай, что, где и как должно быть..
выкинь все небуквоцифры чтобы получилось в обоих случаях РОССИЯПИКАЛЕВОЛЕНИНГРАДСКАЯОБЛАСТЬ.

alexwechselDima T, спасибо за совет!) Сейчас буду все пробовать, я думал еще можно попытаться сделать сравнение по ключевым словам, но тут 350 тыс записей, и рассмотреть все возможные варианты написания адреса нереально)
Реально. Их не так уж и много. Хуже если есть сокращения и ошибки.

Еще мысль подкину: если одна запись одного списка соответствует одной записи второго списка, то совпавшие записи выкидываем из дальнейших проверок. Т.е. если из 350 тыс нашлось 200, то искать остается в 150.

Дальше нечеткий поиск: каждое из одного списка сравниваешь со всем вторым списком, рассчитываешь похожесть (например город совпал + 10, улица + 20, дом + 30 и т.д.) далее выдаешь оператору исходный адрес и варианты по уменьшению похожести. Веса только надо подобрать подходящие.
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38900144
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для нормализации адресов воспользуйтесь API сервиса dadata
...
Рейтинг: 0 / 0
Сравнение создаваемого курсора и таблицы
    #38900331
sg12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, это что-то новое, случаем не из Википедии?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнение создаваемого курсора и таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]