HHHunter

50/100
HHHunter bot

hhhunter/scorer.py

def score(vacancy, profile, w):
    # 1. Навыки: доля профильных навыков, найденных в key_skills вакансии
    vac_skills = {s.lower() for s in skill_names(vacancy)}
    matched = [s for s in profile.skills if s.lower() in vac_skills]
    skill_pts = (len(matched) / len(profile.skills)) * w.skill_weight   # вес 60

    # 2. Ключевые слова в названии + сниппете
    text = (vacancy["name"] + snippet(vacancy)).lower()
    hits = [k for k in profile.keywords if k.lower() in text]
    kw_pts = (len(hits) / len(profile.keywords)) * w.keyword_weight     # вес 25

    # 3. Зарплата: проходит планку → полный балл; нет данных → половина
    floor = salary_floor(vacancy)
    if floor is None:      salary_pts = w.salary_weight * 0.5
    elif floor >= w.floor: salary_pts = w.salary_weight               # вес 15
    else:                  salary_pts = 0

    total = round(skill_pts + kw_pts + salary_pts)
    return ScoreResult(total=max(0, min(100, total)), matched=matched)