AI Resume Screening & Skill Matching Engine
An end-to-end NLP pipeline parsing unstructured candidate resumes (PDF/DOCX), extracting technical skill entities, and computing cosine similarity against job descriptions with FastAPI.
Problem Statement & Objectives
Modern corporate recruiting portals receive thousands of heterogeneous resumes per opening. Manual candidate screening causes severe evaluation delays, keyword-matching bias, and missed qualified candidates whose resumes use synonym terminology rather than literal exact strings.
Key Project Objectives:
- •Build a robust file-parsing subsystem that reliably extracts plain text from varied PDF and DOCX document layouts.
- •Implement an entity-extraction pipeline that isolates technical skills, years of experience, and degrees without relying on brittle regex alone.
- •Vectorize candidate profiles and target job descriptions using dense text embeddings to evaluate conceptual semantic fit.
- •Provide a high-throughput, asynchronous REST API delivering scored match rankings and missing skill gap insights.
System Architecture
The system follows a modular pipeline architecture. The Ingestion Layer ingests resumes via FastAPI multipart endpoints and extracts raw text via PyMuPDF. The NLP Engine cleans the text, tokenizes, removes stopwords, and performs custom spaCy NER to extract hard technical skills and qualifications. The Vector Matcher converts candidate text and job descriptions into high-dimensional vectors, calculating cosine similarity. Results are persisted to SQLite/PostgreSQL with candidate rank scores.
+-------------------------------------------------------------------------+
| CLIENT / RECRUITER UI |
+-------------------------------------------------------------------------+
| (PDF/DOCX Upload + Job Spec)
v
+-------------------------------------------------------------------------+
| FASTAPI INGESTION API |
| (Async Multipart Validation & Queueing) |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| DOCUMENT EXTRACTION LAYER |
| (PyMuPDF / pdfplumber Text & Structure Normalizer) |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| NLP PROCESSING PIPELINE |
| - spaCy Named Entity Recognition (Skill & Education Extraction) |
| - Tokenization & Lemmatization |
| - Sentence-Transformers / TF-IDF Vectorizer |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| MATCHING & SCORING ENGINE |
| - Cosine Similarity Computation (Candidate Vector vs Job Vector) |
| - Skill Gap Penalty Matrix Calculation |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| PERSISTENCE & RANKING STORE |
| (SQLite / PostgreSQL: Candidates, JobSpecs, MatchLogs) |
+-------------------------------------------------------------------------+Database Design (Relational (SQLite / PostgreSQL))
Stores candidates, structured extracted skill sets, posted job criteria, and scoring execution history.
Master record of processed applicants.
Target job criteria with required and optional skills.
Computed compatibility scores between candidates and jobs.
REST API Specifications
Accepts multipart/form-data PDF resume and returns extracted text and candidate ID.
{
"candidate_id": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"status": "parsed",
"detected_skills": ["Python", "FastAPI", "Docker", "PostgreSQL"]
}Ranks uploaded candidates against the specified job description.
{
"job_id": "e3b0c442-98fc-1c14-9afb-4c8996fb9242",
"rankings": [
{
"candidate_id": "9b1deb4d",
"score": 88.5,
"matched": ["Python", "FastAPI"],
"missing": ["Kubernetes"]
}
]
}Step-by-Step Implementation Guide
Step 1: Document Parsing & Text Extraction Setup
Set up a virtual environment and configure PyMuPDF (fitz) to read raw streams from PDF uploads, handling multi-column reading order.
Step 2: Skill Entity Matching with spaCy PhraseMatcher
Load an English spaCy model and initialize PhraseMatcher with pre-compiled technical terminology tokens to extract technology entities with zero false positives.
Step 3: Vector Similarity Engine & FastAPI Endpoint
Implement cosine similarity computation using scikit-learn's TfidfVectorizer or sentence-transformers, exposed through an asynchronous FastAPI route.
Placement Viva & Technical Questions
Questions commonly asked by college examiners and product company interviewers regarding this project architecture.