|
Как найти дубли
|
|||
---|---|---|---|
#18+
Добрый день. В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А. Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum. Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 12:02 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
*Ann*, Проводить нормализацию строк, затем по нормализованным адресам сопоставлять. Например всегда заменять слова 'дом', 'корпус', 'д.', 'корп.', 'к.', 'строение' и т.п. на пробелы. Регулярками вставлять пробелы между числовой и буквенной составляющие, заменить английские буквы ABCE на русские, заменить все разделители на пробелы, заменить множественные пробелы на одиночные, затем привести все к верхнему/нижнему регистру. Этих правил уже достаточно что бы схлопнуть приведенные Вами пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 12:37 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
"дом 1А" и "дом 1 строение А". А почему вы думаете что это дубль? https://habr.com/ru/company/hflabs/blog/260601/ "г. Санкт-Петербург ул. Маркина, д. 16Б, литера А" - более чем реальный адрес. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 13:28 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
Melkij, моя задача такие дома найти и отдать специалистам на анализ. Swa111, есть у вас пример хотя бы приблизительно как можно схлопнуть эти дома, к примеру все их привести к виду "1 А" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 05:20 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
1. проставить пробелы м\у числами и не числами (дом21корпус5а -> дом 21 корпус 5 а) 2. производные от дом\а, корпус и т.д. заменить справочными значениями (дом 21 корпус 5 а -> д. 21 кор. 5 а) 3. отсортировать "слова" в получившихся строках (д. 21 кор. 5 а -> 5 21 а д. кор.) 4. сравнивать Поскольку каждый этап может проводиться неоднократно, лучше создать временную таблицу, где один столбец будет содержать оригинальное значение, а второй будет подвергаться модификации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:31 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
Забыл: 0. привести все к одному регистру 0.1. убрать все знаки препинания 0.2 все имеющиеся пробелы довести до одного 0.3 все \ / привести к одному значению \ (5/а 5\б -> 5\а 5\б) 0.4 проанализировать все - -- и принять решение по ним ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:32 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
*Ann*, Никак, т.е. руками. Понимаю и сочувствую. Когда я работал в ВУЗе у нас там была такая же пляска с названиями дисциплин, но ещё жестче. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:49 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
*Ann* есть у вас пример хотя бы приблизительно как можно схлопнуть эти дома, к примеру все их привести к виду "1 А" Нормализовать данные, т.е. из address: Ленина дом 1 корпус Б, сделать StreetId : 512, houseNum: 1, litera: "Б" или что-то в этом духе. Наименование домов - это тоже тот еще цирк. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 11:52 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
*Ann* Добрый день. В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А. Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum. Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql. Мы делали следующим образом. Брали Государственную Базу Адресов ГБА(не помню уже, какая была на тот момент), и прогоняли сырые данные для нахождения соответствия. Все, что не соответствовало, выдавалось списком оператору вместе со списком близких вариантов из ГБА: на, выбери сам. А в дальнейшем просто не давали пользователям вводить отсебятину, только в соответствии с ГБА. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 12:31 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
ёёёёё *Ann* Добрый день. В базе адресов могут встречаться дубли на одной родительской улице (parent_id) в неявном виде. Например, дом 1/А, дом 1А, дом 1 корпус А, дом 1 строение А. Поля: "дом" housenum, "корпус" buildnum, "строение" strucnum. Необходимо такие дома найти. Подскажите, пожалуйста, как это можно сделать на postgresql. Мы делали следующим образом. Брали Государственную Базу Адресов ГБА(не помню уже, какая была на тот момент), и прогоняли сырые данные для нахождения соответствия. Все, что не соответствовало, выдавалось списком оператору вместе со списком близких вариантов из ГБА: на, выбери сам. А в дальнейшем просто не давали пользователям вводить отсебятину, только в соответствии с ГБА. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 12:34 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
Добрый день. Номер дома, корпуса и строения хранятся в разных полях. Мне не нужно убирать слова "дом", "корп" и тд. Например, есть 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), '')||' ',' ',' ')) А с первыми двумя что делать не знаю. Поэтому прошу помощи ) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2020, 07:24 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
Добрый день. Кто-то может подсказать решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2020, 12:37 |
|
Как найти дубли
|
|||
---|---|---|---|
#18+
*Ann* Добрый день. Кто-то может подсказать решение? Это вообще не задача для базы а для програмиста. Так что или делаете в внешней программе или пишите любую нужную вам логику на pl/pgsql не пытаясь ее сделать запросом (второе проще наверное). Соответственно изучайте pl/pgsql и готовьтесь к тому что будет очень длинный и сложный код с сотней исключений и частных случаев у вас. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2020, 13:02 |
|
|
start [/forum/topic.php?fid=53&msg=39932038&tid=1994783]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 159ms |
0 / 0 |