Слогер Создать блог
Разработка

Как превратить PDF-резюме в структурированные профили на Node.js

Сырой PDF — плохой вход для скрининга: поля не совпадают, формулировки плывут. Разбираю конвейер на Next.js и Node.js — от загрузки файла до рубрики, по которой кандидатов можно сравнивать.

PDF-резюме аккуратно выглядит только для человека. Для машины это набор координат, переносов строк и колонок, которые при извлечении текста рассыпаются в кашу. Если через вас проходят десятки откликов на одну вакансию, чтение глазами превращается в отдельную работу, которую никто не планировал. Talynce строит платформу вокруг этой задачи: парсинг резюме, скрининг кандидатов, AI-интервью по телефону и видео. Ниже — как выглядит такой конвейер, если стек у вас на JavaScript.

Почему сырой PDF нельзя сравнивать

Отбор начинается не с разговора, а со сравнения. Чтобы сравнивать, у всех кандидатов должны быть одинаковые поля: навыки, последние роли, сколько человек просидел на каждом месте, образование, география. Из PDF это не достаётся напрямую. Текстовый слой есть не в каждом файле — иногда это просто отсканированная картинка. Порядок блоков не гарантирован: вёрстка в две колонки ломает логическую последовательность абзацев.

Дальше начинается путаница в терминах. Для фильтра Node, NodeJS и Node.js — три разных строки, хотя речь об одном. То же с должностями: «Senior Backend Engineer» и «ведущий бэкенд-разработчик» описывают похожий опыт, но поиск по ключевому слову найдёт только одного из двух.

Конвейер из пяти шагов

  1. Принять файл и сохранить оригинал. Оригинал — единственный источник правды, когда парсер ошибся. Держите его отдельно от извлечённого текста: без этого невозможно переразобрать архив после того, как вы улучшили схему или словарь.
  2. Извлечь текст и разложить по схеме в PostgreSQL. Схема фиксированная и узкая: контакты, навыки, опыт с датами, образование, локация. Всё, что не извлеклось, помечается пустым значением. Придуманное отчество в базе хуже, чем честный null.
  3. Нормализовать навыки и названия должностей по контролируемому словарю. Самый скучный и самый полезный этап. Он превращает свободный текст в набор идентификаторов, по которым можно фильтровать и считать.
  4. Оценить кандидата по рубрике открытой роли. Рубрика — заранее описанные критерии с весами, а не список слов из описания вакансии.
  5. Отдать шорт-лист людям — при необходимости после AI-скрина по телефону или видео.

Порядок именно такой: словарь и рубрика появляются раньше, чем что-то автоматизируется. Иначе вы получите быстрый парсер, который быстро выдаёт мусор.

Чем извлекать данные

Выбор подхода определяет, сколько ручной работы останется после. Детерминированный код предсказуем, языковые модели гибче, но требуют проверки.

ПодходЧто даётГде ломаетсяКогда брать
Регулярки и эвристикиБыстро, бесплатно, результат воспроизводимНа нестандартной вёрстке и синонимахУзкая схема: только email, телефон, годы опыта
Извлечение через LLM (OpenAI, Gemini)Понимает свободный текст, вытаскивает опыт и навыки из абзацаМожет дописать несуществующее поле, стоит денег на каждый файлРазнообразные резюме, готовность валидировать ответ
ГибридКод отвечает за структуру и проверки, модель — за смыслНужен слой валидации и лимиты на вызовыПродакшен, где важны и качество, и цена ошибки

На практике рабочий вариант — третий. Схема в PostgreSQL описана вами, модель заполняет поля, а код проверяет типы, даты и не даёт записать навык, которого нет в словаре. Redis в этом стеке удобен для очередей и кэша: разбор файла — операция на секунды, и держать её в том же запросе, что и загрузку, не стоит.

Где обычно спотыкаются

  • Проектируют таблицы под конкретное резюме, а не под класс резюме. Потом добавление поля превращается в миграцию с перезабором архива.
  • Хранят только извлечённый текст и удаляют PDF. Переразбор становится невозможен.
  • Нормализуют навыки в момент показа в интерфейсе. Каждый запрос начинает тянуть гору преобразований.
  • Доверяют ответу модели без валидации: если поле не прошло проверку — оно пустое, а не «примерно такое».
  • Скорят по ключевым словам из вакансии. Кандидат, который дважды упомянул нужный термин, обходит того, кто реально работал с ним четыре года.

Когда автоматизация не нужна

Если у вас одна вакансия и двадцать откликов в месяц, таблица с ручным заполнением дешевле любого конвейера. Разбор окупается, когда сравнение идёт постоянно, по одной и той же рубрике, а кандидатов приходит больше, чем вы готовы читать внимательно. Второй сценарий — несколько рекрутеров на потоке: тут ценность не в скорости, а в том, что все смотрят на одни и те же поля.

Что делать по порядку

  1. Опишите рубрику роли: критерии и веса. Без неё скоринг бессмыслен.
  2. Нарисуйте схему профиля в PostgreSQL: навыки, роли, даты, образование, локация.
  3. Соберите словарь синонимов по вашим реальным резюме, а не по фантазиям.
  4. Подключите извлечение — сначала на десятке файлов вручную, глазами сверяя результат.
  5. Добавьте очередь и валидацию, и только потом показывайте шорт-лист команде.

Самое дорогое в этой работе — не парсинг. Это схема профиля и словарь терминов: они определяют, можно ли кандидатов сравнивать между собой. Модель можно поменять за вечер, а плохо спроектированную схему — уже нет.

По материалам: career. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

Разработка

Как одному собрать серьёзный продукт: разбор опыта разработчика, который 5 лет писал платформу по вечерам

Один человек, пять лет вечеров после основной работы — и живая платформа с дешёвым обслуживанием. Что из этого опыта применимо к вашему проекту, а что лучше не повторять.

Слогер 13.10.2026 ▲ 0
AI

Как построить AI-скрининг резюме на Node.js: разбор пайплайна и его ограничений

Почти все демо AI-рекрутинга — это Python-монолит. В рабочем найме сложнее другое: слой оркестрации, который принимает резюме, считает соответствие роли и решает, когда в дело вступает человек.

Слогер 13.10.2026 ▲ 0
Карьера

Как проходят собеседования по кодингу с AI-ассистентом: разбор восьми компаний

AI-ассистированный раунд есть уже у Amazon, Google, Meta, Stripe, Shopify, DoorDash, Instacart и Coinbase — и у каждой он устроен по-своему. Разбираем, чем форматы отличаются и что это значит для подготовки.

Слогер 13.10.2026 ▲ 0
AI

Сколько часов уходит на поиск клиентов вручную и можно ли отдать это ИИ

Как искать новых клиентов для B2B и не получить в итоге мёртвую базу? Мы сделали ИИ-помощника: он находит компании под ваш профиль, читает их сайты, проверяет по реестру и к каждому выводу прикладывает ссылку на страницу, которую реально прочитал.

Слогер 12.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Как написать сопроводительное письмо для удалённой работы: разбор рынка 2026 года

Из 5 237 удалённых вакансий больше половины открыты для кандидатов по всему миру. Письмо здесь работает громче резюме — если в нём есть результат, а не пересказ должностей.

Слогер 12.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Fluxs lenta
Реклама · fluxs.ru