Pull to refresh

Как я разработал собственную рекомендательную систему вакансий c hh.ru, и почему вам это тоже может пригодиться

Level of difficultyEasy
Reading time3 min
Views9.7K

Введение

Недавно, просматривая рекомендации на популярном сайте поиска работы по моему резюме "Senior Python Backend", я заметил, что система предлагает вакансии, весьма "далекие" от моей специализации. Это натолкнуло меня на размышления о том, как можно улучшить процесс подбора вакансий для IT-специалистов. В результате я решил за два вечера, создать свою собственную рекомендательную систему, которая бы более точно учитывала специфику работы в сфере разработки программного обеспечения.

Целевая аудитория

Эта статья предназначена для backend-разработчиков, ищущих работу на hh.ru.

Концепция системы

Моя система работает в три этапа:

  1. Получение списка вакансий по заданному фильтру через API сайта поиска работы с последующим сохранением в базу данных.

  2. Получение полного текста каждой вакансии через API hh.ru и сохранение в БД.

  3. Анализ локально хранящихся данных различными способами.

Алгоритм поиска подходящих вакансий

Разработанный алгоритм для поиска вакансий, наиболее соответствующих вашему резюме, включает следующие ключевые этапы:

  1. Предварительная обработка текста:

    • Токенизация текста резюме и описаний вакансий.

    • Удаление пунктуации.

    • Лемматизация или стемминг для приведения слов к базовой форме.

  2. Анализ соответствия:

    • Определение процента соответствия между резюме и каждой вакансией;

  3. Фильтрация результатов:

    • Исключение вакансий с нежелательными ключевыми словами или фразами. Например:

      • «печеньки» (если вы не заинтересованы в неформальной корпоративной культуре)

      • «работа семья» (если вы ищете строго профессиональную среду)

      • «высшее техническое образование» (если у вас другой профиль образования)

  4. Персонализированная сортировка:

    • Возможность задать предпочтительные технологии или условия работы.

    • Присвоение дополнительных баллов вакансиям, содержащим предпочтительные элементы. Например, если вы предпочитаете Postgres вместо MySQL, вакансии с упоминанием Postgres получат более высокий рейтинг.

  5. Динамическая настройка:

    • Возможность изменять веса различных факторов в алгоритме ранжирования.

    • Опция для добавления новых критериев или изменения существующих без необходимости переписывать весь алгоритм.

  6. Визуализация результатов:

    • Представление результатов в виде отсортированного списка вакансий с указанием процента соответствия и ключевых совпадений.

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

Система также позволяет:

  • Выявлять наиболее часто встречающиеся технологии для потенциального изучения и добавления в резюме.

  • Обнаруживать новые технологии, набирающие популярность, но пока не очевидные на первый взгляд.

Инструкция по использованию

  1. Настройте файл my_preferences.py под свои требования.

  2. Создайте файл data/resume_text.md и сохраните в него текст вашего резюме. Формат текста не имеет значения – система будет искать совпадения по словам или предложениям.

  3. Запустите основной сервер:

python main.py
  1. Запустите сервер обработки текста (вынесен отдельно из-за длительной загрузки модели nltk):

python -m nlp.server
  1. Откройте документацию API по адресу http://localhost:8912/docs#/

Интерпретация результатов API

/search_db_for_jobs_that_fit_my_resume

http://localhost:8912/static/search_db_for_jobs_that_fit_my_resume.html

[
    {
        "vacancy_id": 0, // ID вакансии (для просмотра на HH.ru: https://spb.hh.ru/vacancy/{vacancy_id})
        "score": 0, // Очки совпадения без учета личных предпочтений
        "score_preference": 0, // Очки совпадения с учетом личных предпочтений
        "common_tokens": "string", // Совпавшие с резюме токены (без учета порядка)
        "missing_tokens": "string", // Несовпавшие с резюме токены (без учета порядка)
        "job": "string", // Токенизированный текст вакансии (с учетом порядка)
        "job_text": "string" // Текст вакансии (с учетом порядка)
    }
]

Результаты сортируются по полю score_preference.

/find_out_the_statistics_of_frequent_skills

http://localhost:8912/static/find_out_the_statistics_of_frequent_skills.html

{
    "type_token": "string",
    "all_count": 0, // Общее количество уникальных слов
    "message": [
        {
            "name": "string", // Слово
            "count": 0, // Частота встречаемости во всех вакансиях
            "count_p": 0 // Процентное соотношение частоты
        }
    ]
}

Заключение

Разработка собственной рекомендательной системы вакансий может значительно повысить эффективность поиска работы, особенно для опытных разработчиков. Надеюсь, мой опыт вдохновит вас на создание собственных инструментов для оптимизации процесса трудоустройства.

Код проекта доступен на GitHub: https://github.com/denisxab/finding_favorite_job

Буду рад вашим комментариям и предложениям по улучшению системы!

Tags:
Hubs:
+9
Comments3

Articles