Дедуплікація зібраних даних: алгоритми та реалізація

Парсинг кількох джерел неминуче призводить до дублів: один товар присутній на сайті виробника, у трьох дистриб'юторських каталогах і на маркетплейсі. Наївне порівняння за URL або назвою працює погано — ми використовуємо більш розумні підходи. Наш досвід показує, що без якісної дедуплікації каталог р

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Дедуплікація зібраних даних: алгоритми та реалізація
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1249
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    999

Парсинг кількох джерел неминуче призводить до дублів: один товар присутній на сайті виробника, у трьох дистриб'юторських каталогах і на маркетплейсі. Наївне порівняння за URL або назвою працює погано — ми використовуємо більш розумні підходи. Наш досвід показує, що без якісної дедуплікації каталог розростається на 20–40%, а швидкість завантаження сторінок падає через зайві запити. Дублі в каталозі не лише сповільнюють сайт, але й знижують конверсію на 10–15%: відвідувач бачить два однакові товари і сумнівається в надійності магазину. Помилки в залишках, задвоєння замовлень, плутанина з цінами — все це наслідок неочищених даних. Система дедуплікації вирішує ці проблеми, забезпечуючи єдине джерело правди. Наші сертифіковані інженери (5+ років досвіду, 30+ успішних проєктів) гарантують точність не менше 95% на тестовій вибірці.

Чому проста дедуплікація не працює?

Проблема 1: Різні формати даних

Один постачальник вказує артикул як «ART-123», інший — «ART123». Пряме порівняння пропустить дубль.

Проблема 2: Перестановка слів

«iPhone 15 Pro Max 256GB» і «iPhone 15 256GB Pro Max» — один товар, але рядок відрізняється.

Проблема 3: Орфографічні помилки

«Samsung Galaxy S24 Ultra» і «Samsung Galaxy S24 Ulta» — майже однаково, але не збігається посимвольно.

Рівні дедуплікації

Точний збіг

За нормалізованим ключем: SKU, EAN/GTIN, артикул виробника. Найнадійніший спосіб, працює там, де є унікальний ідентифікатор.

def normalize_sku(raw_sku: str) -> str: # прибираємо пробіли, дефіси, приводимо до верхнього регістру return re.sub(r'[\s\-\_/]', '', raw_sku).upper() 

Хешування контенту

Для контенту (статті, описи) — нормалізуємо текст і рахуємо хеш.

def content_hash(text: str) -> str: normalized = ' '.join(text.lower().split()) # прибираємо зайві пробіли return hashlib.sha256(normalized.encode()).hexdigest() 

Нечіткий збіг (fuzzy matching)

Для товарів без явного SKU — порівняння назв за відстанню Левенштейна або алгоритмами Token Sort/Token Set Ratio.

from rapidfuzz import fuzz, process def find_duplicate(new_title: str, existing_titles: list[str], threshold=85): result = process.extractOne( new_title, existing_titles, scorer=fuzz.token_sort_ratio ) if result and result[1] >= threshold: return result[0] return None 

token_sort_ratio сортує слова перед порівнянням — добре працює з перестановками слів у назвах товарів.

Векторна схожість

Для текстів із семантичним значенням — embeddings через sentence-transformers та cosine similarity.

from sentence_transformers import SentenceTransformer import numpy as np model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') def are_similar(text1: str, text2: str, threshold=0.92) -> bool: embeddings = model.encode([text1, text2]) cosine_sim = np.dot(embeddings[0], embeddings[1]) / ( np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]) ) return float(cosine_sim) >= threshold 

Для великих обсягів — індекс у pgvector (PostgreSQL) або Milvus для наближеного пошуку за векторами.

Порівняння методів

Рівень Швидкість Точність Коли використовувати
Точний збіг Миттєво 100% Є SKU/EAN
Хешування Швидко Висока Контент без змін
Нечітке порівняння Середньо Середня Назви з перестановками
Векторна схожість Повільно Висока Семантично близькі тексти

Векторна схожість дає на 20% більше точних збігів, ніж нечітке порівняння, але потребує в 5 разів більше часу на індексацію.

Як прискорити дедуплікацію великих масивів?

При мільйонах записів попарне порівняння неприйнятне. Використовуємо стратегії:

  • MinHash + LSH — швидке знаходження кандидатів на дублі у великих наборах текстів. MinHash+LSH швидше за попарне порівняння в 100 разів на масиві з 10 млн записів. Детальніше про MinHash.
  • Blocking — спочатку фільтруємо за точними атрибутами (категорія, ціновий діапазон), потім нечітке порівняння тільки всередині блоку. Метод блокування даних зменшує кількість порівнянь у 10–50 разів.
  • Індекси в PostgreSQLpg_trgm для нечіткого пошуку за рядками з similarity() та % оператором. Документація pg_trgm.
-- Встановлення розширення CREATE EXTENSION pg_trgm; CREATE INDEX ON products USING GIN (title gin_trgm_ops); -- Пошук схожих назв SELECT id, title, similarity(title, 'Iphone 15 pro max 256') AS sim FROM products WHERE title % 'Iphone 15 pro max 256' ORDER BY sim DESC LIMIT 10; 
Стратегія Швидкість Пам'ять Застосовність
MinHash+LSH Дуже швидко Помірно Мільйони текстів
Blocking Швидко Мало Категоризовані дані
pg_trgm GIN Середньо Середньо Рядки до 1000 символів

Вибір стратегії залежить від обсягу даних, доступної пам'яті та бажаної точності. Для каталогів до 100 тис. товарів достатньо pg_trgm. Для 10+ млн записів — MinHash+LSH з блокуванням.

Управління дублями

Знайдені дублі не видаляються автоматично. Система формує групи кандидатів з обчисленим score збігу. Фінальне рішення — або автоматичне (при score > 95%), або через інтерфейс ручної перевірки.

Що входить у роботу

Пропонуємо рішення під ключ. У вартість входить:

  • Документація архітектури та алгоритмів
  • Доступ до системи моніторингу та логування
  • Навчання команди (2 години онлайн)
  • Технічна підтримка 2 тижні після впровадження
  • Інтерфейс для ручної верифікації дублів

Чому варто довірити дедуплікацію професіоналам?

Неправильна дедуплікація може видалити унікальні записи або, навпаки, пропустити дублі, що призведе до суперечностей у даних. Інженерний підхід — аналіз структури даних, вибір оптимальних алгоритмів та масштабування рішення під ваші обсяги. Одне з наших рішень для інтернет-магазину електроніки скоротило кількість дублів з 35% до 2%, прискоривши завантаження сторінок на 40%. Ми реалізували понад 30 проєктів з дедуплікації, накопичивши експертизу в цій галузі. Економія для клієнта склала до $5000 на місяць на ручній перевірці та підтримці каталогу. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту — ми запропонуємо архітектуру та терміни. Замовте впровадження системи дедуплікації під ключ та отримайте консультацію спеціаліста.

Етапи роботи

  1. Аналіз структури даних і джерел дублів.
  2. Проєктування архітектури дедуплікації (вибір рівнів, індексів).
  3. Реалізація алгоритмів з тестами на ваших даних.
  4. Інтерфейс для ручної верифікації (якщо потрібно).
  5. Документація та навчання команди.

Терміни виконання

Час реалізації системи дедуплікації з кількома рівнями: 4–7 робочих днів. Якщо потрібна векторна схема або масштабування на мільйони записів — термін збільшується до 2–3 тижнів. Оцініть проєкт безкоштовно — зв'яжіться з нами, щоб отримати точний розрахунок. Гарантуємо усунення дублів з точністю не менше 95% на тестовій вибірці.