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 resumenormalized: Standardized skill nameproficiency: basic | intermediate | advanced | expertcategory: Skill category (e.g., "Programming Languages")skill_type: hard | softconfidence: 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).