AI-powered Resume Screening System built using Streamlit and NLP techniques. It analyzes resumes against a job description using a Hybrid Scoring approach and provides decision support, skill gap analysis, and explainability.
This application ranks resumes by computing a weighted Hybrid Score from three independent metrics:
| Component | Weight | Description |
|---|---|---|
| Semantic Similarity | 50 % | TF-IDF cosine similarity between resume and JD |
| Skill Category Match | 30 % | Match across technical, soft, domain, and tools |
| Mandatory Skill Coverage | 20 % | Coverage of "must have" / "required" skills |
Decision thresholds: ≥ 75 % → Shortlist · 50-74 % → Review · < 50 % → Reject
- 📊 Hybrid Scoring Algorithm — weighted multi-signal scoring
- 🤖 ML Model Integration — RandomForest regression prediction score
- 🔍 Mandatory Skill Extraction — NLP-based phrase detection
- 📈 Visual Analytics — score distribution, radar charts, ranking bars
⚠️ Keyword Gap Analysis — missing vs matching keyword breakdown- 🏆 Resume Ranking System — auto-sorted candidate table
- 💡 Explainability Panel — human-readable decision explanations
- 🎨 Dark AI Dashboard Theme — polished, accessible dark UI
Resume Screening System/
├── app.py # Main Streamlit application (~250 lines)
├── config.py # Centralized configuration (weights, thresholds, skills)
├── train_model.py # ML training pipeline (synthetic data + RandomForest)
├── requirements.txt # Python dependencies
│
├── utils/ # Core NLP & scoring logic
│ ├── __init__.py
│ ├── pdf_parser.py # PDF text extraction with error handling
│ ├── text_processing.py # Text preprocessing & stopword removal
│ └── similarity.py # Scoring engine (semantic, category, hybrid, decisions)
│
├── ui/ # Streamlit UI components
│ ├── __init__.py
│ ├── styles.py # All CSS themes & accessibility styles
│ └── components.py # Reusable UI components (hero, sidebar, reports)
│
├── visualization/ # Chart generation
│ ├── __init__.py
│ └── charts.py # Bar charts, histograms, radar charts
│
├── models/ # Trained ML artefacts (generated by train_model.py)
│ ├── resume_screening_model.pkl
│ └── tfidf_vectorizer.pkl
│
├── tests/ # Unit tests
│ ├── __init__.py
│ ├── test_text_processing.py
│ ├── test_similarity.py
│ └── test_pdf_parser.py
│
└── README.md
| Layer | Technology |
|---|---|
| Frontend | Streamlit |
| NLP | scikit-learn (TF-IDF), NLTK |
| ML Model | RandomForestRegressor (scikit-learn) |
| PDF Parsing | PyPDF2 |
| Visualisation | Matplotlib |
| Serialisation | Joblib |
# 1. Clone the repository
git clone https://github.com/YOUR_USERNAME/Resume_screening_system.git
cd Resume_screening_system
# 2. Create virtual environment (optional but recommended)
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS / Linux
# 3. Install dependencies
pip install -r requirements.txtThe training script generates a synthetic dataset of resume–JD pairs and trains a RandomForestRegressor:
python train_model.pyThis will output evaluation metrics (MAE, R²) and save two files:
models/resume_screening_model.pklmodels/tfidf_vectorizer.pkl
streamlit run app.pyThen open your browser at http://localhost:8501.
python -m pytest tests/ -vHybrid Score = 0.5 × Semantic Similarity
+ 0.3 × Skill Category Match
+ 0.2 × Mandatory Coverage
All weights and thresholds are configurable in config.py.
This project is for educational purposes.