ITM (ITMatcher) - это система для анализа резюме соискателей и сопоставления их с вакансиями на основе навыков. Проект предназначен для автоматизации процесса подбора кандидатов для HR-специалистов и помощи соискателям в поиске подходящих вакансий.
- Автоматический анализ резюме с помощью AI-модели
- Извлечение hard и soft навыков из резюме
- Сопоставление навыков соискателя с требованиями вакансий
- Ранжирование вакансий по степени соответствия навыкам соискателя
- Автоматический подбор трех наиболее подходящих вакансий для соискателя
- Различные роли пользователей (HR и соискатели)
- REST API для интеграции с другими системами
- Gorilla/mux - мощный HTTP роутер и диспетчер для создания RESTful API
- PostgreSQL - надежная реляционная СУБД для хранения данных о пользователях, вакансиях и резюме
- golang-migrate - инструмент для управления миграциями базы данных
- gorilla/sessions - библиотека для управления пользовательскими сессиями
- bcrypt - для безопасного хранения паролей с использованием хеширования
- agnivade/levenshtein - для нечеткого сопоставления навыков с учетом возможных опечаток
- FastAPI - современный высокопроизводительный веб-фреймворк для создания API на Python
- SpaCy - самостоятельно обученная модель для обработки естественного языка и извлечения навыков из текста резюме
- SpaCy-Transformers - расширение для SpaCy, интегрирующее модели трансформеров (BERT, RoBERTa) для улучшения распознавания сущностей
- Transformers - библиотека, предоставляющая предобученные модели для NLP задач
- PyTorch - фреймворк глубокого обучения, используемый как бэкенд для трансформеров
- Uvicorn - ASGI-сервер для запуска приложения FastAPI
- HTML/CSS - для создания пользовательского интерфейса
- Bootstrap - для ускорения разработки и стилизации интерфейса
- Go-сервер (основной сервис) - обрабатывает HTTP-запросы, взаимодействует с БД и AI-микросервисом
- Python AI-микросервис - обрабатывает тексты резюме и извлекает навыки с помощью NLP модели SpaCy
- База данных PostgreSQL - хранит данные о пользователях, вакансиях, резюме и навыках
Go-сервер отправляет текст резюме на обработку в Python AI-микросервис через HTTP POST-запрос на эндпоинт /analyze. AI-сервис анализирует текст, извлекает hard и soft навыки, и возвращает их в формате JSON. Затем Go-сервер сохраняет полученные навыки в базе данных и использует их для сопоставления с вакансиями.
Система использует следующий алгоритм для подбора наиболее подходящих вакансий:
- Извлечение hard и soft навыков из резюме с помощью SpaCy-модели
- Сопоставление извлеченных навыков с требованиями каждой вакансии
- Вычисление процента соответствия на основе совпадающих навыков
- Сортировка вакансий по проценту соответствия
- Выбор трех вакансий с наибольшим процентом соответствия
- Сохранение результатов анализа для последующего отображения пользователю
Для сопоставления навыков используется алгоритм Левенштейна, позволяющий учитывать возможные опечатки и разные варианты написания одного и того же навыка.
- Go (версия 1.15+)
- PostgreSQL (версия 12+)
- Python (версия 3.12.9)
- SpaCy и другие Python-библиотеки для NLP
-
Клонировать репозиторий:
git clone https://gitverse.ru/Linares/gaspr_case.git cd gaspr_case -
Настроить файл
.envна основе.env_example. -
Запустить PostgreSQL и создать базу данных
projectDB -
Установить зависимости:
go mod download pip install -r requirements.txt -
Запустить Python AI-микросервис:
cd server python ai_api.py -
Запустить Go-сервер в отдельном терминале:
go run server/main.go
ITMatcher/
├── data/ # Тестовые данные
├── server/ # Основной код сервера
│ ├── ai_api.py # Python AI микросервис для анализа резюме (FastAPI)
│ ├── db/ # Пакет для работы с базой данных
│ ├── handlers/ # HTTP обработчики
│ ├── models/ # Структуры данных
│ ├── services/ # Дополнительные сервисы
│ ├── output/ # Модель NLP
│ │ └── ai/ # Клиент для взаимодействия с AI-микросервисом
│ │ └── analysis/# Модуль для анализа и сопоставления навыков
│ ├── main.go # Точка входа Go-сервера
Проект использует самостоятельно обученную SpaCy-модель с интеграцией трансформеров для анализа текста резюме и извлечения навыков. Модель обучена распознавать два типа сущностей:
- HARDSKILL - технические навыки (языки программирования, технологии, инструменты)
- SOFTSKILL - гибкие навыки (коммуникация, лидерство, работа в команде)
- Использование архитектуры SpaCy-Transformers, сочетающей эффективность SpaCy с мощью моделей трансформеров
- Применение предобученной языковой модели для русского языка, дообученной на специфичных для HR-сферы текстах
- Обработка контекста для точного определения навыков в различных формулировках
- Нормализация навыков для устранения вариативности написания через специализированные словари
- Фильтрация стоп-слов и нерелевантных терминов
Модель обучена на собственном наборе размеченных резюме и описаний вакансий, что обеспечивает высокую точность в распознавании профессиональных навыков в контексте IT и других технических областей.
POST /api/register- Регистрация пользователяPOST /api/auth- Вход пользователяGET /api/logout- Выход пользователя
POST http://localhost:8001/analyze- Анализ текста резюме (внутренний API, вызывается Go-сервером)
POST /api/resume- Отправка резюме для анализа из внешнего сервиса (возможна интеграция)
GET /api/hr/resume/{id}- Получение данных о конкретном резюмеGET /api/hr/resumes- Получение списка всех резюме для HRPOST /api/hr/vacancy- Создание новой вакансииPOST /api/hr/finder- Добавление нового соискателяGET /api/hr/finder/{finder_id}/vacancy/{vacancy_id}- Получение данных анализа резюме для конкретной вакансииGET /api/hr/vacancy/{vacancy_id}- Получение информации о вакансии
GET /api/finder/resumes- Получение списка загруженных резюме для пользователяGET /api/finder/resume/{resume_id}- Получение информации о конкретном резюмеPOST /api/finder/resume- Загрузка нового резюме и получение трех наиболее подходящих вакансий
