Skip to content

Resume Analyzer is an AI-powered MLOps platform that optimizes your resume for Applicant Tracking Systems (ATS). Get instant ATS scoring, keyword analysis, skill gap insights, and smart job matching powered by enterprise-grade ML models. Built with Python, Flask, and production-ready architecture - helping job seekers land more interviews.

License

Notifications You must be signed in to change notification settings

ananttripathi/Resume-Analyzer-MLOps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Intelligent Resume Analyzer + Job Match Recommendation System

HuggingFace Spaces FastAPI Python 3.9+ License: MIT

πŸ“– Overview

An end-to-end AI-powered system that analyzes resumes, extracts key information, and provides intelligent job matching recommendations. Built with MLOps best practices, featuring automated CI/CD pipelines and deployed on HuggingFace Spaces.

✨ Key Features

  • πŸ“„ PDF Resume Parsing: Intelligent extraction of text from PDF resumes
  • 🧠 NLP-Powered Analysis: Uses transformer models for skill extraction and summarization
  • 🎯 ATS Score Calculation: Evaluates resume compatibility with Applicant Tracking Systems
  • πŸ” Job Matching: Semantic similarity matching using sentence embeddings
  • πŸ“Š Skill Gap Analysis: Identifies missing skills for target roles
  • πŸ’‘ Smart Recommendations: Suggests improvements and suitable job roles
  • πŸ“ˆ MLOps Pipeline: Complete CI/CD, model versioning, and monitoring

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Upload    │────▢│   FastAPI    │────▢│   ML Models β”‚
β”‚  Resume PDF β”‚     β”‚   Backend    β”‚     β”‚  (HF Hub)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚
                            β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚   Gradio UI  β”‚
                    β”‚   Frontend   β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ Tech Stack

AI/ML

  • Transformers: HuggingFace transformers for NLP tasks
  • Sentence-Transformers: Semantic similarity and embeddings
  • spaCy: Named Entity Recognition and text processing
  • PyPDF2: PDF text extraction

Backend

  • FastAPI: High-performance API framework
  • Pydantic: Data validation and settings management
  • Python 3.9+: Core programming language

Frontend

  • Gradio: Interactive web interface
  • Plotly: Data visualization

MLOps

  • GitHub Actions: CI/CD pipeline
  • HuggingFace Hub: Model versioning and storage
  • HuggingFace Spaces: Deployment platform
  • Docker: Containerization (optional)
  • Pytest: Testing framework
  • Black & Flake8: Code quality tools

πŸ“¦ Installation

Local Setup

# Clone the repository
git clone https://github.com/yourusername/Resume_Analyzer_MLOps.git
cd Resume_Analyzer_MLOps

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Download spaCy model
python -m spacy download en_core_web_sm

# Run the application
python app.py

Docker Setup

# Build the image
docker build -t resume-analyzer .

# Run the container
docker run -p 7860:7860 resume-analyzer

πŸš€ Usage

Web Interface

  1. Launch the application: python app.py
  2. Open your browser at http://localhost:7860
  3. Upload a PDF resume
  4. Optionally paste a job description
  5. Click "Analyze Resume"
  6. View results including:
    • ATS Score
    • Extracted Skills
    • Job Matches
    • Skill Gap Analysis
    • Improvement Recommendations

API Usage

import requests

# Upload resume
with open("resume.pdf", "rb") as f:
    files = {"file": f}
    data = {"job_description": "Python developer with ML experience"}
    response = requests.post(
        "http://localhost:8000/api/analyze",
        files=files,
        data=data
    )
    
print(response.json())

πŸ“‚ Project Structure

Resume_Analyzer_MLOps/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ resume_parser.py       # PDF parsing and text extraction
β”‚   β”œβ”€β”€ nlp_processor.py       # NLP models and skill extraction
β”‚   β”œβ”€β”€ job_matcher.py         # Embedding-based job matching
β”‚   β”œβ”€β”€ ats_scorer.py          # ATS score calculation
β”‚   └── utils.py               # Helper functions
β”œβ”€β”€ models/
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── model_loader.py        # Model loading and caching
β”œβ”€β”€ api/
β”‚   β”œβ”€β”€ __init__.py
β”‚   └── main.py                # FastAPI endpoints
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ test_parser.py
β”‚   β”œβ”€β”€ test_nlp.py
β”‚   └── test_api.py
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ sample_resumes/        # Sample resumes for testing
β”‚   └── job_database.json      # Sample job descriptions
β”œβ”€β”€ logs/
β”‚   └── app.log                # Application logs
β”œβ”€β”€ .github/
β”‚   └── workflows/
β”‚       └── ci.yml             # GitHub Actions CI/CD
β”œβ”€β”€ app.py                     # Main Gradio application
β”œβ”€β”€ requirements.txt           # Python dependencies
β”œβ”€β”€ Dockerfile                 # Docker configuration
β”œβ”€β”€ .gitignore                 # Git ignore rules
β”œβ”€β”€ README.md                  # This file
└── LICENSE                    # MIT License

πŸ§ͺ Testing

# Run all tests
pytest tests/ -v

# Run with coverage
pytest tests/ --cov=src --cov-report=html

# Run specific test
pytest tests/test_parser.py -v

πŸ“Š MLOps Features

1. Model Versioning

  • Models stored on HuggingFace Hub
  • Version-controlled model artifacts
  • Easy rollback capabilities

2. CI/CD Pipeline

  • Automated testing on push
  • Code quality checks (Black, Flake8)
  • Automatic deployment to HF Spaces

3. Monitoring & Logging

  • Request/response logging
  • Performance metrics tracking
  • Error monitoring and alerting

4. Reproducibility

  • Pinned dependencies
  • Seed setting for deterministic results
  • Documented model versions

🎯 How It Works

1. Resume Parsing

# Extract text from PDF
resume_text = parse_resume("resume.pdf")

2. Skill Extraction

# Use NER and pattern matching
skills = extract_skills(resume_text)
experience = extract_experience(resume_text)
education = extract_education(resume_text)

3. ATS Scoring

# Calculate ATS compatibility
ats_score = calculate_ats_score(
    resume_text,
    formatting_score,
    keyword_match,
    section_completeness
)

4. Job Matching

# Generate embeddings and find similar jobs
resume_embedding = model.encode(resume_text)
job_embeddings = model.encode(job_descriptions)
similarities = cosine_similarity(resume_embedding, job_embeddings)

5. Skill Gap Analysis

# Compare resume skills with job requirements
missing_skills = required_skills - resume_skills
recommendations = generate_recommendations(missing_skills)

🌐 Deployment

HuggingFace Spaces

  1. Create a new Space on HuggingFace
  2. Connect your GitHub repository
  3. Configure Space settings:
    • SDK: Gradio
    • Python version: 3.9
  4. Push to main branch - auto-deployment triggers!

Environment Variables

HF_TOKEN=your_huggingface_token  # For model access
LOG_LEVEL=INFO                    # Logging level
MAX_FILE_SIZE=10                  # Max upload size (MB)

πŸ“ˆ Performance Metrics

  • Resume Processing: ~2-3 seconds per resume
  • ATS Score Calculation: <1 second
  • Job Matching: ~1-2 seconds for 100 jobs
  • API Response Time: <5 seconds average

🀝 Contributing

Contributions are welcome! Please follow these steps:

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

πŸ“ License

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

πŸ™ Acknowledgments

  • HuggingFace for model hosting and deployment
  • Sentence-Transformers team for embedding models
  • FastAPI team for the excellent framework
  • Gradio team for the UI framework

πŸ“§ Contact

Your Name - [Your Email]

Project Link: https://github.com/yourusername/Resume_Analyzer_MLOps


Made with ❀️ and πŸ€– by [Your Name]

About

Resume Analyzer is an AI-powered MLOps platform that optimizes your resume for Applicant Tracking Systems (ATS). Get instant ATS scoring, keyword analysis, skill gap insights, and smart job matching powered by enterprise-grade ML models. Built with Python, Flask, and production-ready architecture - helping job seekers land more interviews.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors