Resume Job Matcher is an end-to-end NLP project that extracts skills from resumes and matches them against job descriptions to provide a skill match score. This project demonstrates hands-on experience in Natural Language Processing, MLOps, CI/CD pipelines, containerization, and cloud deployment.
The service is deployed on Railway as a live API that can process resumes in PDF and TXT formats and return matched and missing skills for any job description.
-
NLP-based Skill Extraction:
Extracts technical and soft skills from resumes using a custom NER-inspired pipeline withspaCyandPhraseMatcher. -
Job Matching:
Compares extracted resume skills against job descriptions to calculate a match score, highlight matched skills, and identify missing skills. -
Preprocessing Pipeline:
Cleans and normalizes text from resumes and job descriptions to ensure consistent matching. -
REST API with FastAPI:
Exposes a/matchendpoint for uploading resumes and job descriptions viaPOSTrequests. -
Streamlit UI:
Provides an interactive web interface for uploading resumes, submitting job descriptions, and viewing match results. -
Dockerized Deployment:
Fully containerized with aDockerfilefor consistent environments and easy deployment. -
CI/CD Pipeline (GitHub Actions):
- Automatically builds and installs dependencies on each push or pull request.
- Runs tests to ensure reliability before deployment.
- Demonstrates professional MLOps and automation skills.
-
Supports Multiple File Formats:
.pdfand.txtresume files..txtjob descriptions.
-
Cloud Deployment:
- Live API hosted on Railway for real-time testing and demonstration.
Resume-Job-Matcher/
│
├─ src/
│ ├─ api/ # FastAPI app
│ ├─ ingestion/ # Resume/job description loader
│ ├─ matching/ # Skill matching logic
│ ├─ ner/ # Skill extraction and normalization
│ ├─ pipeline/ # End-to-end pipeline
│ └─ preprocessing/ # Text cleaning and preprocessing
│
├─ data/ # Sample resumes and job descriptions
├─ tests/ # (Optional) Unit tests for CI
├─ tmp_uploads/ # Temporary uploaded files for API
├─ Dockerfile # Container configuration
├─ requirements.txt # Python dependencies
├─ .github/workflows/ # CI/CD pipeline
├─ README.md
└─ LICENSE
- Clone the repository:
git clone https://github.com/theHoodguy4587/Resume-Job-Matcher.git
cd Resume-Job-Matcher- Install dependencies:
pip install -r requirements.txt
python -m spacy download en_core_web_sm- Run locally:
uvicorn src.api.main:app --reloadVisit http://127.0.0.1:8000/docs for Swagger UI.
Build and run the Docker container:
docker build -t resume-job-matcher .
docker run -p 8000:8000 resume-job-matcherThis project is deployed on Railway: https://resume-job-matcher-production.up.railway.app/docs#/default/match_resume_job_match_post
Live app: https://thehoodguy4587-resume-job-matcher-srcapp-eiggvh.streamlit.app/
Run locally:
streamlit run src/app.py-
The project includes GitHub Actions for automated testing and deployment:
-
Runs tests for skill extraction and preprocessing
-
Builds Docker image on push
-
Deploys automatically to Railway
-
Python 3.10
-
FastAPI for API
-
spaCy for NLP / NER
-
Docker for containerization
-
GitHub Actions for CI/CD
-
Railway for cloud deployment
-
Upload a resume (.pdf or .txt) and a job description.
-
Pipeline processes text: cleaning → skill extraction → normalization → matching.
-
Returns a JSON with:
-
Resume skills
-
Job description skills
-
Matched skills
-
Missing skills
-
Match score
-
Add authentication and role-based access for the UI.
-
Expand NER model for more advanced skill extraction.
-
Integrate resume scoring and ranking for multiple candidates.
-
Add multi-language support.
MIT License © 2026 Senitha Gunathilaka



