An intelligent Applicant Tracking System (ATS) Resume Scorer powered by local AI (Ollama) that analyzes resumes against job descriptions to provide comprehensive scoring, skill matching, and improvement recommendations. Built for both job seekers and hiring managers.
git clone https://github.com/prafullb3/ATS-Resume-checker.git
cd ATS-Resume-checker
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
python app.py
Visit: http://localhost:5000
For intelligent AI-powered skill extraction and analysis:
# Install Ollama
brew install ollama
# Start Ollama service
brew services start ollama
# Pull mistral model (recommended - 4GB, fast)
ollama pull mistral
# Or pull other models:
ollama pull llama2 # Larger, slower
ollama pull neural-chat # Smaller, faster
Download and install from ollama.ai
# Start Ollama
ollama serve
# In another terminal, pull a model
ollama pull mistral
# Run the automated setup script
python setup_ollama.py
# Or manually:
bash setup_ollama.sh
Verify Ollama is running:
curl http://localhost:11434/api/tags
Should return a JSON list of available models.
pip install requests>=2.31.0
Now the system will automatically use Ollama for AI features when available!
python app.py
http://localhost:5000
# macOS
ollama serve
# Or if installed as service
brew services start ollama
/)Example:
Resume: "5 years Python development, AWS experience, built REST APIs..."
Job: "Seeking Python developer with AWS and Docker skills..."
Result: Score 78/100, missing Docker, suggestions to add it
/hiring-manager)Option 1: With Explicit Skills (Fast)
1. Enter required skills: "Python, AWS, Docker, Kubernetes"
2. Upload candidate resume
3. Paste job description (optional, for context)
4. Click "Analyze"
5. Get skill matching results in 10-15 seconds
Option 2: With AI Extraction (Smart)
1. Leave "Required Skills" field EMPTY
2. Upload candidate resume
3. Paste full job description
4. Click "Analyze"
5. Ollama extracts 20-30 relevant skills automatically
6. Get intelligent matching results in 20-30 seconds
Option 3: Hybrid (Recommended)
1. Enter core skills: "Python, AWS"
2. Leave rest for AI extraction
3. Upload resume + paste job description
4. Get combined explicit + AI-discovered skills
Analyze a resume against job requirements.
Request:
curl -X POST http://localhost:5000/score \
-F "resume=@resume.pdf" \
-F "job_description=Job description text here" \
-F "required_keywords=Python,AWS,Docker"
Parameters:
resume (file): PDF resume file (required)job_description (string): Job requirements text (required)required_keywords (string, optional): Comma-separated skills
Response:
{
"score": 78.5,
"skills_score": 75.0,
"content_score": 85.0,
"matched_keywords": ["python", "aws", "rest api"],
"missing_keywords": ["docker", "kubernetes"],
"skills_matched": 3,
"total_skills": 5,
"skills_source": "user_provided",
"ollama_status": "enabled",
"suggestions": [
"Add Docker and Kubernetes experience to your resume...",
"Highlight your AWS certifications..."
]
}
#### With Ollama (AI-Powered)
Job Description ↓ Ollama LLM ↓ Extract 20-30 relevant skills
Job Description
↓
TF-IDF Analysis + Pattern Matching
↓
Extract high-frequency technical terms
- Fast extraction (instant)
- Still covers ~80% of important skills
- No AI required
The system uses four levels of skill matching:
Overall Score = (Skills Score × 0.90) + (Content Score × 0.10)
Where:
- Skills Score: Percentage of required skills found in resume
Calculation: (Matched Skills / Total Required Skills) × 100
- Content Score: TF-IDF cosine similarity
Calculation: Similarity between resume text and job description
- Weighting: 90% skills (technical fit)
10% content (contextual relevance)
Scenario: Python Developer Role
Required Skills: Python, Django, PostgreSQL, Docker, AWS, REST API (6 skills)
Resume mentions: Python, Django, PostgreSQL, REST API (4 skills)
Skills matched: 4/6 = 66.7%
Content similarity: 78%
Score = (66.7 × 0.90) + (78 × 0.10)
= 60.0 + 7.8
= 67.8/100
Missing skills: Docker, AWS Suggestions: “Add Docker containerization and AWS deployment experience”
Intelligent Detection: Not just keyword matching
Fuzzy Matching: Handles abbreviations and variations
Multi-word Skills: Understands “REST API”, “Machine Learning”, etc.
Context Aware: Uses Ollama for semantic understanding
Industry Agnostic: Works across all technical fields
Adaptive: Skills extracted from actual job descriptions
Core Scoring Engine
scorer.py (14KB) - Main scoring algorithm with weighted skill matchingskill_weights.py (7.2KB) - 179 skills organized by category with importance weightsAI & Optimization
ollama_scorer.py (6.2KB) - Local LLM integration for intelligent skill extractioncache.py (8.5KB) - Intelligent caching (job descriptions, resumes, skills)utils.py (7.5KB) - Shared utilities (text processing, JSON parsing, error handling)Flask Application
app.py (3.9KB) - Flask routes, endpoints, form handlingpdf_parser.py (238B) - PDF text extractionSetup & Configuration
performance_config.py (1.7KB) - Performance modes (FAST, BALANCED, QUALITY)setup_ollama.py (5.3KB) - Automated Ollama installation and setupWe welcome contributions! Please follow these steps:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)| Metric | FAST | BALANCED | QUALITY |
|---|---|---|---|
| Speed | 10-15s | 20-30s | 40-60s |
| Skill Extraction | TF-IDF | TF-IDF or User | Ollama LLM |
| Accuracy | 80% | 85% | 90%+ |
| AI Analysis | None | Optional | Full |
| Best For | Batch | General Use | Deep Review |
Choose based on your needs:
# In performance_config.py or app.py
DEFAULT_MODE = PerformanceConfig.FAST
Features:
- TF-IDF skill extraction only
- No Ollama calls
- Best for batch processing
DEFAULT_MODE = PerformanceConfig.BALANCED
Features:
- User-provided or TF-IDF skills (fast)
- Optional Ollama for deep analysis
- Good balance of speed and intelligence
DEFAULT_MODE = PerformanceConfig.QUALITY
Features:
- Ollama LLM for intelligent extraction
- Full AI analysis and suggestions
- Best for single candidate deep review
Mistral (Recommended - 4GB)
ollama pull mistral
# Fast, efficient, good quality
# Best for most use cases
Neural Chat (Lightweight - 2.7GB)
ollama pull neural-chat
# Fastest extraction
# Good for high-volume processing
Llama 2 (Powerful - 7GB)
ollama pull llama2
# Better quality, slower
# Best for complex analysis
Environment variables in app.py:
OLLAMA_HOST = "http://localhost:11434" # Ollama service address
OLLAMA_TIMEOUT = 10 # Timeout in seconds
OLLAMA_MODEL = "mistral" # Model to use
SKILL_EXTRACTION_MODEL = "mistral" # Can differ if needed
System includes 60+ predefined skills across:
Azure
AWS
GCP
General DevOps
If you see “Ollama Status: disabled” in results:
curl http://localhost:11434/api/tags
# macOS
brew services start ollama
ollama serve
# Linux/Docker
ollama serve
ollama list
# Should show: mistral, neural-chat, or llama2
ollama pull mistral
Error: "Could not extract text from PDF"
ollama list
We welcome contributions! Please follow these steps:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
1. Start app: python app.py
2. Go to: http://localhost:5000
3. Upload your resume (PDF)
4. Paste a job description
5. Get your ATS score and improvement tips!
1. Start app: python app.py
2. Go to: http://localhost:5000/hiring-manager
3. Option A - Enter skills: "Python, AWS, Docker"
Option B - Leave empty for AI extraction
4. Upload resume + paste job description
5. Get comprehensive candidate evaluation!
1. Install: brew install ollama (macOS)
2. Pull model: ollama pull mistral
3. Run: ollama serve
4. Now app uses AI for skill extraction!
5. Try both options above again - notice better results!
Made with ❤️ for hiring teams and job seekers worldwide