ATS-Resume-checker

ATS Resume Scorer

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.

Key Features

AI-Powered Skill Extraction

For Job Seekers

For Hiring Managers

Core Functionality

Tech Stack

Prerequisites

Installation

Basic Setup (Without AI)

  1. Clone the repository
    git clone https://github.com/prafullb3/ATS-Resume-checker.git
    cd ATS-Resume-checker
    
  2. Create virtual environment
    python -m venv .venv
    source .venv/bin/activate  # On Windows: .venv\Scripts\activate
    
  3. Install dependencies
    pip install -r requirements.txt
    
  4. Download NLTK data (required for text processing)
    python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
    
  5. Run the application
    python app.py
    

    Visit: http://localhost:5000

Advanced Setup (With Ollama AI)

For intelligent AI-powered skill extraction and analysis:

Option 1: macOS (Homebrew)

# 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

Option 2: Linux/Windows/Docker

Download and install from ollama.ai

# Start Ollama
ollama serve

# In another terminal, pull a model
ollama pull mistral

Option 3: Automated Setup (macOS/Linux)

# 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.

Install Python dependencies for Ollama support:

pip install requests>=2.31.0

Now the system will automatically use Ollama for AI features when available!

Usage

Running the Application

  1. Start the server
    python app.py
    
  2. Open in browser
    http://localhost:5000
    
  3. Optional: Start Ollama service (for AI features)
    # macOS
    ollama serve
       
    # Or if installed as service
    brew services start ollama
    

User Workflows

Job Seeker Portal (/)

  1. Upload your resume (PDF format)
  2. Paste target job description
  3. Click “Score Resume”
  4. Get detailed analysis with:
    • Overall ATS score
    • Matched skills
    • Missing skills
    • Improvement suggestions

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 Portal (/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

API Reference

POST /score

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:

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

Without Ollama (TF-IDF Fallback)

Job Description
       ↓
TF-IDF Analysis + Pattern Matching
       ↓
Extract high-frequency technical terms
- Fast extraction (instant)
- Still covers ~80% of important skills
- No AI required

Advanced Skill Matching

The system uses four levels of skill matching:

  1. Exact Match (Confidence: 1.0)
    • Word-for-word match with word boundaries
    • Example: “Python” matches “Python” but not “Jython”
  2. Partial Match (Confidence: 0.95)
    • All words in skill present in resume
    • Example: “REST API” matches resume containing both “REST” and “API”
  3. Fuzzy Match (Confidence: 0.6-0.9)
    • Similar spelling/abbreviations
    • Example: “JS” matches “JavaScript”, “AWS EC2” matches “Amazon EC2”
  4. Context Match (With Ollama)
    • Deep semantic understanding
    • Example: “Kubernetes” context matches “container orchestration”

Scoring Methodology

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)

Example Scoring

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”

Key Improvements Over Standard ATS

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

Key Files Breakdown

Core Scoring Engine

AI & Optimization

Flask Application

Setup & Configuration

Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Guidelines

Privacy & Security

Performance Metrics

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

⚙️ Configuration & Performance

Performance Modes

Choose based on your needs:

FAST Mode (10-15 seconds)

# 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

QUALITY Mode (40-60 seconds)

DEFAULT_MODE = PerformanceConfig.QUALITY

Features:
- Ollama LLM for intelligent extraction
- Full AI analysis and suggestions
- Best for single candidate deep review

Ollama Configuration

Model Selection

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

Customization

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

Predefined Skills Dictionary

System includes 60+ predefined skills across:

Azure

AWS

GCP

General DevOps

Troubleshooting

Ollama Not Detected

If you see “Ollama Status: disabled” in results:

  1. Check if Ollama is running
    curl http://localhost:11434/api/tags
    
  2. If not running, start it
    # macOS
    brew services start ollama
    ollama serve
       
    # Linux/Docker
    ollama serve
    
  3. Verify a model is pulled
    ollama list
    # Should show: mistral, neural-chat, or llama2
    
  4. If no models, pull one
    ollama pull mistral
    

Slow Performance

Resume Parsing Errors

Error: "Could not extract text from PDF"

Skills Not Being Extracted

  1. Check Ollama model is loaded
    ollama list
    
  2. Verify job description is clear
    • Use detailed, complete job descriptions
    • Include technical requirements section
  3. Try explicit skills instead
    • Enter skills directly in textarea
    • More reliable for critical skills

Documentation

Contributing

We welcome contributions! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Development Guidelines

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support & Contact


Quick Start Guide

For Job Seekers (5 minutes)

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!

For Hiring Managers (5 minutes)

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!

With Ollama AI (Optional, adds intelligence)

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