Skip to content

vishantrathi/AI-Resume-and-Job-Matching-System-using-NLP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AI Resume and Job Matching System using NLP

An intelligent web application that automatically matches candidates with suitable job opportunities using Natural Language Processing and semantic similarity algorithms. Features real-time job discovery, a Python NLP microservice, and a professional SaaS-style dashboard.

Features

  • πŸ“„ Resume Upload & Parsing β€” Upload PDF/DOCX resumes; AI extracts skills, experience, education, and certifications
  • 🧠 NLP Skill Extraction β€” Tokenisation, stop-word removal, named entity recognition (spaCy), and keyword extraction
  • 🎯 Semantic Job Matching β€” Cosine similarity scoring with sentence-transformers for deep semantic understanding
  • 🌐 Real-Time Job Discovery β€” When no DB jobs match, automatically scrapes RemoteOK and other sources
  • πŸ“Š Skill Gap Analysis β€” Visual breakdown of matched vs missing skills with learning suggestions
  • πŸ’Ό Job Recommendations β€” Ranked job listings based on resume match score
  • 🏒 Recruiter Dashboard β€” Post jobs, browse candidates, compare match scores
  • πŸ‘€ Candidate Dashboard β€” Resume insights, top matches, skill cloud visualization
  • πŸ” JWT Authentication β€” Secure login/register with rate limiting and input validation
  • 🐳 Docker Support β€” Full stack deployable with docker-compose

Tech Stack

Layer Technology
Frontend React.js 19, Tailwind CSS v3, React Router v6, Axios
Backend Node.js, Express.js
Database MongoDB (Mongoose)
NLP / AI Python microservice: spaCy, sentence-transformers (all-MiniLM-L6-v2), Flask
Matching Node.js: Skill overlap + Jaccard similarity; Python: Cosine similarity on embeddings
Auth JWT (jsonwebtoken), bcryptjs
File Parsing pdf-parse, mammoth (DOCX)
Job Discovery RemoteOK public API, fallback template generation
Deployment Docker, docker-compose, Vercel (frontend), Render/Railway (backend)

Project Structure

β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ config/              # MongoDB connection
β”‚   β”œβ”€β”€ controllers/         # Business logic (auth, resume, job, match, scrape)
β”‚   β”œβ”€β”€ middleware/           # Auth, file upload, rate limiter
β”‚   β”œβ”€β”€ models/              # Mongoose schemas (User, Resume, Job, Match, ScrapedJob)
β”‚   β”œβ”€β”€ routes/              # Express API routes
β”‚   β”œβ”€β”€ tests/               # Jest unit tests (28 tests)
β”‚   β”œβ”€β”€ utils/               # NLP processor, semantic matcher, job scraper
β”‚   └── server.js
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/      # Navbar (with mobile menu), PrivateRoute
β”‚   β”‚   β”œβ”€β”€ context/         # AuthContext (JWT state)
β”‚   β”‚   β”œβ”€β”€ pages/           # Home, Dashboard, ResumeUpload, JobRecommendations,
β”‚   β”‚   β”‚                    # SkillAnalysis, SavedJobs, JobList, PostJob, ...
β”‚   β”‚   β”œβ”€β”€ api.js           # Axios instance with auth interceptor
β”‚   β”‚   └── App.js           # Router & layout
β”‚   β”œβ”€β”€ tailwind.config.js
β”‚   └── package.json
β”œβ”€β”€ nlp-service/             # Python NLP microservice
β”‚   β”œβ”€β”€ app.py               # Flask app: /parse-resume, /match, /extract-skills
β”‚   β”œβ”€β”€ requirements.txt
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── README.md
β”œβ”€β”€ docker-compose.yml       # Full stack deployment
└── README.md

Getting Started

Option A β€” Docker Compose (Recommended)

git clone <repo>
cd AI-Resume-and-Job-Matching-System-using-NLP

# Start all services
docker-compose up --build

Services start at:

Option B β€” Manual Setup

Prerequisites

  • Node.js 18+
  • MongoDB (local or Atlas)
  • Python 3.11+ (for NLP service, optional)

Backend

cd backend
cp .env.example .env      # edit MONGO_URI and JWT_SECRET
npm install
npm start                 # production
npm run dev               # development (nodemon)
npm test                  # run 28 unit tests

Python NLP Service (optional)

cd nlp-service
pip install -r requirements.txt
python -m spacy download en_core_web_sm
python app.py             # starts on port 8000

Frontend

cd frontend
npm install
npm start                 # development server (port 3000)
npm run build             # production build

API Endpoints

Authentication

Method Path Description
POST /api/auth/register Register user
POST /api/auth/login Login β€” returns JWT token
GET /api/auth/profile Get current user profile

Resume

Method Path Description
POST /api/resume/upload Upload and parse PDF/DOCX resume
GET /api/resume/me Get own parsed resume

Jobs

Method Path Description
GET /api/jobs List all active jobs
POST /api/jobs Create job posting (recruiter)
POST /api/jobs/match Compute match scores vs all jobs
GET /api/jobs/recommendations Ranked recommendations (auto-discovers if empty)
POST /api/jobs/scrape Trigger real-time job discovery from web
GET /api/jobs/scraped List all discovered jobs (with search/filter)

Candidate

Method Path Description
GET /api/candidate/profile Dashboard data
GET /api/candidate/skill-gap/:jobId Skill gap analysis for a specific job
GET /api/candidate/recruiter/candidates All candidates (recruiter only)

Job Discovery Pipeline

Resume Upload
     ↓
NLP Parsing (skills, experience, education)
     ↓
Search DB Jobs (MongoDB)
     ↓
IF jobs exist β†’ semantic matching β†’ return ranked results
     ↓
IF no jobs β†’ trigger web scraping (RemoteOK API)
     ↓
Store scraped jobs in MongoDB (ScrapedJob collection)
     ↓
Run semantic matching
     ↓
Return ranked results

NLP Architecture

Node.js NLP Processor

  1. Tokenisation β€” Lowercase, strip punctuation, split into tokens
  2. Stop-word removal β€” Filter 80+ common English stop words
  3. Skill extraction β€” Match against 150+ technical skills (multi-word aware)
  4. Section parsing β€” Heuristic detection for Experience, Education, Certifications, Projects
  5. Semantic matching β€” Skill overlap (80%) + Jaccard token similarity (20%)
  6. Alias normalisation β€” "nodejs" ≑ "node.js" ≑ "node", "reactjs" ≑ "react"

Python NLP Service

  1. spaCy NER β€” Named entity recognition (ORG, GPE, DATE, PERSON)
  2. Sentence Transformers β€” all-MiniLM-L6-v2 generates dense 384-dim embeddings
  3. Semantic scoring β€” Cosine similarity: 60% semantic + 40% skill overlap
  4. Graceful degradation β€” Works without heavy dependencies, with reduced quality

Environment Variables

Backend (.env)

PORT=5000
MONGO_URI=mongodb://localhost:27017/ai_resume_matching
JWT_SECRET=your_long_random_secret_here
REDIS_URL=redis://localhost:6379
NLP_SERVICE_URL=http://localhost:8000

NLP Service (.env)

PORT=8000
DEBUG=false

About

The AI Resume and Job Matching System using NLP analyzes resumes and job descriptions to identify relevant skills and qualifications. Using semantic analysis, it matches candidates with suitable jobs and suggests improvements or missing skills, making recruitment faster, smarter, and more accurate for recruiters and job seekers.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors