Сырые объявления — это «дикий запад». Здесь решает методичность.
Локации. Приводим адреса к регистру: город → регион → страна. Агрегируем агломерации (например, «Большой Тель-Авив», «Москва МО»), чтобы корректно сравнивать вилки.
Валюты и налоги. Конвертируем валюты к референсной, учитываем разницу gross/net (налоги/взносы), считаем медиану и квартилями (p25/p75) по регионам/ролям.
Навыки. Нормализуем навыки:
- Словарь синонимов и n-грамм («js», «javascript», «ECMAScript»).
- Группировка в кластеры: «аналитика данных», «ML-стек», «DevOps/Cloud», «product/UX».
- Эмбеддинги и косинусное сходство — чтобы ловить «родственные» навыки (PyTorch ↔ TensorFlow).
Дедупликация. Один и тот же работодатель часто постит вакансию на нескольких площадках. Мы находим дубли (по названию, локации, работодателю, набору навыков, текстовому сходству) и оставляем единую запись.
Идентификация работодателя. Чистим названия (ООО/ЗАО/Inc), связываем с внутренним контрагентом, формируем портфель ролей и динамику.
Обогащение. Стягиваем отрасль и размер компании, по возможности — публичные сигналы (новости о найме/сокращениях, релизы продуктов, запуск офисов), чтобы объяснить скачки спроса.