Skills Normalization

How intelligent skills matching works

All parsed resumes include normalized skills matched against a 32,000+ skill taxonomy.

How It Works

1. Skill Extraction

The AI model extracts skills from:

  • Explicit skills sections
  • Job descriptions
  • Project descriptions
  • Certifications

2. Normalization

Each extracted skill is matched to our standard taxonomy:

  • Exact matches: "JavaScript" → "JavaScript"
  • Aliases: "React JS", "ReactJS" → "React"
  • Semantic matching: "Node development" → "Node.js"

3. Proficiency Levels

Skills include proficiency based on context:

  • Basic: "familiar with", "exposure to"
  • Intermediate: "working knowledge", "proficient"
  • Advanced: "strong experience", "skilled"
  • Expert: "expert", "mastery", "architected"

Proficiency considers:

  • Frequency of mentions
  • Recency of experience
  • Context words (senior, lead, expert)

Output Format

{
  "skills": [
    {
      "skill": "JavaScript programming",
      "normalized": "JavaScript",
      "proficiency": "expert",
      "category": "Programming Languages",
      "skill_type": "hard",
      "confidence": 0.95
    }
  ]
}

Fields

  • skill: Original text from resume
  • normalized: Standardized skill name
  • proficiency: basic | intermediate | advanced | expert
  • category: Skill category (e.g., "Programming Languages")
  • skill_type: hard | soft
  • confidence: Match confidence (0-1)

Skill Categories

Common categories include:

  • Programming Languages
  • Web Frameworks
  • Databases
  • Cloud Platforms
  • DevOps Tools
  • Project Management
  • Communication
  • Leadership

Benefits

Consistency

Different candidates writing "React", "ReactJS", "React.js" all normalize to "React" for easy comparison.

Searchability

Search your candidate database by normalized skills, not fragmented variants.

Analytics

Track skill trends and demands using consistent taxonomy.

Accuracy

  • Match rate: >95% of skills successfully normalized
  • Confidence threshold: Only matches >0.75 confidence included
  • Fallback: Unmatched skills included as-is with flag

Using Normalized Data

Compare Candidates

// Both candidates have same normalized skill
candidate1.skills.find(s => s.normalized === "React")
candidate2.skills.find(s => s.normalized === "React")

Filter by Proficiency

// Find expert-level candidates
const experts = candidates.filter(c =>
  c.skills.some(s =>
    s.normalized === "React" &&
    s.proficiency === "expert"
  )
)

Aggregate Skills

// Count skill frequency across all resumes
const skillCounts = resumes
  .flatMap(r => r.skills)
  .reduce((acc, s) => {
    acc[s.normalized] = (acc[s.normalized] || 0) + 1
    return acc
  }, {})

Coming Soon

Custom skills taxonomy for Professional tier subscribers (define your own mappings and categories).