- PVSM.RU - https://www.pvsm.ru -
Наши клиенты хранят списки из тысяч компаний, и обычно там первозданный хаос.
Возьмем список торговых точек, через которые сельхозпроизводитель продает товары по всей стране. Названия магазинов пишут как хотят, поэтому типичный список выглядит так:
Точки № 1 и № 4 — дубли, № 3 и № 7 — тоже, но поди разберись.
А разобраться надо: когда в списке из 1000 торговых точек 300 дублей, у производителя начинаются проблемы.
Первая реакция — почистить руками живых операторов. Бесполезно. Люди все равно ошибаются, потому что названия порой пишут уж совсем экзотически. Да и дорого выходит.
Мы взялись за проблему с перебора готовых решений.
Старый добрый Excel очевидно не справится с задачей, потому что условие дублирования «Название1 = Название2» не сработает. То же самое с «Похожесть Названия1 и Названия2 > 95%»: «Магазин эко-продуктов „Уют“» и «ООО „Уют“» похожи меньше, чем на 95%, и все же это одна точка.
«Дадатовский» поиск дублей физических лиц [1], тоже не подошел. Он сравнивает людей по ФИО, адресу и дополнительным полям вроде телефона. Но алгоритм сравнения ФИО не подойдет для названий, а находить дубли по одному только адресу нельзя: любой ТЦ с кучей отделов-бутиков сломает всю статистику.
Оставался еще шанс: у нас есть enterprise-движок «Фактор», который приводит названия к виду ЕГРЮЛ — госреестра юрлиц. Но и он не помог: название точки часто не имеет отношения к названию юрлица. Если ООО «Вектор+» назвало магазин «Уют», в отчет пойдет «Уют». ЕГРЮЛ не поможет.
В итоге мы взяли поиск дублей по физическим лицам и доработали. Адреса он и так сравнивал, нужно было научить его сравнивать названия.
Чтобы сравнить названия компаний, нужно сначала очистить их от шелухи — найти смысловую основу. Мы это делаем регулярными выражениями.
Чистим пунктуацию:
Удаляем все, что попадает в типичные паттерны. Наш аналитик просмотрел 10 000 записей в отчетах о торговых точках. В итоге он составил базу паттернов, которые замусоривают названия. «Дадата» удаляет:
Если захотеть, обойти алгоритм просто: паттернов немного. Но проблемы с дублями появляются из-за отсутствия стандартов, а не злого умысла. В реальной жизни перечисленного хватает.
Удаляем ОПФ: ЗАО, ОАО, ПАО и расшифровки типа «откр. акц. общ.».
В результате от названий компаний остаются только смысловые части, которые и сравнивает «Дадата».
Само по себе совпадение названий — очень слабый критерий. Поэтому в «Дадату» обычно загружают еще и адрес, а иногда — телефон.
Сервис находит смысловые основы названий и стандартизует адреса. И начинается собственно дедупликация: «Дадата» собирает записи из входных файлов в кучу и сравнивает каждую с каждой.
Алгоритм проверяет пары по сценариям, всего их десять. Примеры:
Сценарий | Вероятность дубля |
---|---|
Названия совпадают, остальные поля пустые | 100% |
Названия похожи, адреса совпадают | 95% |
Названия совпадают, адрес отличается расширением номера дома (литерой, буквой и т. д.) | 95% |
Названия похожи, телефоны совпадают | 70% |
Какие у алгоритма особенности:
Когда сервис нашел вероятность дублей, он выносит вердикт:
Наш алгоритм не найдет все дубли как 100%. Похожие точки он просто пометит, чтобы оператор разобрал их руками. Тут есть простор для доработок, мы еще будем его допиливать.
Тем временем мы в 10 раз снизили цены на поиск дублей [2]. Теперь «Дадата» ищет одинаковых людей и компании всего по 1 копейке за обработанную запись.
«Дадата» сначала примет файлы и покажет число дублей, и только потом спросит, хотите ли вы платить
Регистрируйтесь [3], заливайте файлы — и можно чистить от дублей списки торговых точек, контрагентов, клиентов, кого угодно.
Автор: DEADStop
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/algoritmy/269359
Ссылки в тексте:
[1] поиск дублей физических лиц: https://dadata.ru/merging/?utm_source=habrahabr&utm_medium=article&utm_content=first_link&utm_campaign=merging_party
[2] на поиск дублей: https://dadata.ru/merging/?utm_source=habrahabr&utm_medium=article&utm_content=second_link&utm_campaign=merging_party#party
[3] Регистрируйтесь: https://dadata.ru/merging/?utm_source=habrahabr&utm_medium=article&utm_content=third_link&utm_campaign=merging_party#party
[4] Источник: https://habrahabr.ru/post/343150/
Нажмите здесь для печати.