Как работает Prayk
Prayk показывает объявления с азербайджанских сайтов в одном месте, отделяет дубликаты и сравнивает цены. Здесь описано, как устроены основные части системы.
Откуда берутся объявления
У объявлений на сайте два источника.
- Объявления, которые пользователи и магазины сами размещают на Prayk.
- Объявления, которые PraykBot читает с открытых азербайджанских сайтов объявлений и интернет-магазинов. Такое объявление всегда показывается с блоком «Источник объявления» и ссылкой на оригинальную страницу.
- Бот регулярно перепроверяет объявления: удалённое в источнике объявление деактивируется и на Prayk.
Как находятся дубликаты
Одно и то же объявление часто публикуется на нескольких сайтах или от имени нескольких продавцов. Система сравнивает «отпечатки» изображений и текста каждого нового объявления с существующими — от дешёвой проверки к дорогой.
- Тот же файл: байты изображения полностью совпадают.
- Похожее изображение: изменённый размер или повторное сжатие (перцептивный хеш).
- Похожий текст: слегка изменённые заголовок и описание (SimHash).
- Содержание изображения: обрезанная картинка или картинка с добавленной надписью — по близости векторов, которые извлекает нейросеть.
- Объявление автоматически считается «копией» только при сильном доказательстве; слабого сходства самого по себе недостаточно. Оригиналом считается объявление, опубликованное первым; на карточках видны метки «Оригинал» и «Копия».
- Продавец, который обновляет или заново размещает своё объявление, копировщиком не считается.
Поиск
Поиск построен с учётом особенностей азербайджанского языка.
- Запрос «menzil» находит «mənzil», «masin» — «maşın»: буквы ə, ı, ş, ç, ö, ü, ğ приравниваются к латинским аналогам.
- Мелкие опечатки прощаются, по мере ввода появляются подсказки разделов, магазинов и объявлений.
- Поиск по фото: находятся объявления, визуально похожие на загруженное изображение.
- На фотографиях автомобилей распознаётся государственный номер — машину можно искать по номеру.
Рыночная цена
Каждую ночь по объявлениям за последние 90 дней для каждого сегмента считаются медианная цена и «обычный» диапазон цен. Слишком дешёвые и слишком дорогие объявления исключаются, сегмент с менее чем 8 объявлениями не показывается. Оценка «дешевле / дороже рынка» на странице объявления выводится из этих цифр.
Полная методология и таблица точности →Рекомендации
Лента «Рекомендуемые» на главной странице строится по просмотренным вами объявлениям.
- Какие разделы, города и ценовые диапазоны вы просматриваете.
- Связи «смотревшие это объявление смотрели и эти».
- Объявления, визуально похожие на просмотренные.
- В настройках профиля можно самому выбрать интересы или отключить ненужные разделы.
Проверка VIN
VIN-код расшифровывается параллельно по нескольким открытым источникам, результаты объединяются: таблица кодов производителей (марка и страна), реестр NHTSA для рынка США, швейцарский реестр одобрения типа для европейского рынка. Кроме того, показываются объявления с этим VIN, замеченные на Prayk, и история их цены и пробега.
Проверить по VIN →Защита телефонных номеров
Номер продавца приходит на страницу и в ответе API в замаскированном виде. Полный номер выдаётся только по нажатию «Показать номер», по короткоживущему ключу — это затрудняет массовый сбор номеров.
Техническая основа
- Сервер
- Написан на Go; весь API документирован открытым описанием OpenAPI.
- Данные
- Объявления хранятся в кластере MySQL, поисковый индекс — в Elasticsearch, векторы изображений — в Qdrant.
- Модель изображений
- Модель, вычисляющая сходство изображений (CLIP), работает на наших серверах.
- Сайт и приложение
- Сайт на Next.js, мобильное приложение на React Native; оба читают один и тот же API.