powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти дубли
13 сообщений из 13, страница 1 из 1
Как найти дубли
    #39931578
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А.
Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum.
Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql.
...
Рейтинг: 0 / 0
Как найти дубли
    #39931622
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
*Ann*,

Проводить нормализацию строк, затем по нормализованным адресам сопоставлять.

Например всегда заменять слова 'дом', 'корпус', 'д.', 'корп.', 'к.', 'строение' и т.п. на пробелы. Регулярками вставлять пробелы между числовой и буквенной составляющие, заменить английские буквы ABCE на русские, заменить все разделители на пробелы, заменить множественные пробелы на одиночные, затем привести все к верхнему/нижнему регистру. Этих правил уже достаточно что бы схлопнуть приведенные Вами пример.
...
Рейтинг: 0 / 0
Как найти дубли
    #39931667
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"дом 1А" и "дом 1 строение А". А почему вы думаете что это дубль? https://habr.com/ru/company/hflabs/blog/260601/ "г. Санкт-Петербург ул. Маркина, д. 16Б, литера А" - более чем реальный адрес.
...
Рейтинг: 0 / 0
Как найти дубли
    #39932038
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,
моя задача такие дома найти и отдать специалистам на анализ.

Swa111,
есть у вас пример хотя бы приблизительно как можно схлопнуть эти дома, к примеру все их привести к виду "1 А"
...
Рейтинг: 0 / 0
Как найти дубли
    #39932103
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. проставить пробелы м\у числами и не числами (дом21корпус5а -> дом 21 корпус 5 а)
2. производные от дом\а, корпус и т.д. заменить справочными значениями (дом 21 корпус 5 а -> д. 21 кор. 5 а)
3. отсортировать "слова" в получившихся строках (д. 21 кор. 5 а -> 5 21 а д. кор.)
4. сравнивать

Поскольку каждый этап может проводиться неоднократно, лучше создать временную таблицу, где
один столбец будет содержать оригинальное значение, а второй будет подвергаться модификации.
...
Рейтинг: 0 / 0
Как найти дубли
    #39932104
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл:
0. привести все к одному регистру
0.1. убрать все знаки препинания
0.2 все имеющиеся пробелы довести до одного
0.3 все \ / привести к одному значению \ (5/а 5\б -> 5\а 5\б)
0.4 проанализировать все - -- и принять решение по ним
...
Рейтинг: 0 / 0
Как найти дубли
    #39932108
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Ann*,

Никак, т.е. руками. Понимаю и сочувствую. Когда я работал в ВУЗе у нас там была такая же пляска с названиями дисциплин, но ещё жестче.
...
Рейтинг: 0 / 0
Как найти дубли
    #39932109
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Ann*
есть у вас пример хотя бы приблизительно как можно схлопнуть эти дома, к примеру все их привести к виду "1 А"

Нормализовать данные, т.е. из address: Ленина дом 1 корпус Б, сделать StreetId : 512, houseNum: 1, litera: "Б" или что-то в этом духе. Наименование домов - это тоже тот еще цирк.
...
Рейтинг: 0 / 0
Как найти дубли
    #39932127
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Ann*
Добрый день.
В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А.
Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum.
Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql.

Мы делали следующим образом.
Брали Государственную Базу Адресов ГБА(не помню уже, какая была на тот момент), и прогоняли сырые данные для нахождения соответствия. Все, что не соответствовало, выдавалось списком оператору вместе со списком близких вариантов из ГБА: на, выбери сам.
А в дальнейшем просто не давали пользователям вводить отсебятину, только в соответствии с ГБА.
...
Рейтинг: 0 / 0
Как найти дубли
    #39932132
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
*Ann*
Добрый день.
В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А.
Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum.
Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql.

Мы делали следующим образом.
Брали Государственную Базу Адресов ГБА(не помню уже, какая была на тот момент), и прогоняли сырые данные для нахождения соответствия. Все, что не соответствовало, выдавалось списком оператору вместе со списком близких вариантов из ГБА: на, выбери сам.
А в дальнейшем просто не давали пользователям вводить отсебятину, только в соответствии с ГБА.
Самое интересное было а функции. нахождения соответствия. Берется умненькая девочка-программист и пишет. Если что не так - вызываешь ее, показываешь, она исправляет, и так много раз.
...
Рейтинг: 0 / 0
Как найти дубли
    #39934412
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Номер дома, корпуса и строения хранятся в разных полях.
Мне не нужно убирать слова "дом", "корп" и тд.
Например, есть 4 дома:
1. housenum = 5А
2. housenum = 5/А
3. housenum = 5 buildnum = А
4. housenum = 5 strucnum = А
Все эти значения мне нужно привести к виду 5 А. Как последние два варианта привести к этому значению я сделала, просто объединить через пробел.

Вот часть запроса, которая работает с 3 и 4 варинатом:
count(*) over(partition by replace(eaa.orponid||' '||COALESCE(lower(eah.housenum), '')||' '||COALESCE(lower(eah.buildnum),'')||' '||COALESCE(lower(eah.strucnum), '')||' ',' ',' '))

А с первыми двумя что делать не знаю. Поэтому прошу помощи )
...
Рейтинг: 0 / 0
Как найти дубли
    #39935902
*Ann*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Кто-то может подсказать решение?
...
Рейтинг: 0 / 0
Как найти дубли
    #39935918
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Ann*
Добрый день.
Кто-то может подсказать решение?


Это вообще не задача для базы а для програмиста.
Так что или делаете в внешней программе или пишите любую нужную вам логику на pl/pgsql не пытаясь ее сделать запросом (второе проще наверное).
Соответственно изучайте pl/pgsql и готовьтесь к тому что будет очень длинный и сложный код с сотней исключений и частных случаев у вас.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как найти дубли
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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