ATS resume analyzer for keyword matching and scoring
Project description
ats-resume-checker
A lightweight Python package that scores resumes against job descriptions for ATS (Applicant Tracking System) compatibility — runs fully locally, no external AI APIs required.
Features
- Multi-format support — PDF, DOCX, and plain TXT resumes
- TF-IDF similarity scoring — more accurate than simple word-count matching
- Smart keyword extraction — lemmatization, bigrams, and a built-in library of 30+ recognized multi-word skills (
"machine learning","rest api","data analysis", etc.) - Keyword gap analysis — shows exactly which JD keywords are present or missing in the resume
- Keyword match rate — percentage of job description keywords covered
- Resume word count — flags resumes that are too short or too long
- Actionable suggestions — concrete tips to improve ATS compatibility
- CLI — run analysis directly from your terminal without writing any code
Installation
pip install ats-resume-checker
Quick Start
from ats_resume_checker import analyze_resume
result = analyze_resume(
"resume.pdf", # supports .pdf, .docx, and .txt
"Looking for a Python developer with SQL and machine learning experience."
)
print(result)
Output
{
"ats_score": 54.30, # TF-IDF cosine similarity score (0–100)
"match_rate": 66.7, # % of JD keywords found in the resume
"matched_keywords": [
"data analysis",
"machine learning",
"python",
"sql"
],
"missing_keywords": [
"communication",
"developer",
"problem solving"
],
"resume_word_count": 520,
"suggestions": [
"Include more job-specific keywords. Missing: communication, developer, problem solving.",
"Quantify achievements where possible (e.g. 'Improved performance by 30%')."
]
}
Python API
analyze_resume(resume_path, job_description)
| Parameter | Type | Description |
|---|---|---|
resume_path |
str |
Path to the resume file (.pdf, .docx, or .txt) |
job_description |
str |
Plain-text job description |
Returns a dict with ats_score, match_rate, matched_keywords, missing_keywords, resume_word_count, suggestions.
Utility functions
from ats_resume_checker import extract_text, extract_keywords, get_keyword_set
# Extract text from any supported file type
text = extract_text("resume.pdf")
# Get a ranked list of keywords (includes bigrams and known phrases)
keywords = extract_keywords(text, top_n=30)
# Get a clean keyword set (unigrams + known phrases only, no noise)
kw_set = get_keyword_set(text, top_n=50)
Command-Line Interface
After installation the ats-check command is available in your terminal:
# Job description as a string
ats-check resume.pdf "Python developer with SQL and machine learning skills"
# Job description as a .txt file
ats-check resume.docx job_description.txt
# Output as JSON (useful for scripts and pipelines)
ats-check resume.pdf "Data engineer with Spark experience" --json
Example output
==============================================
ATS RESUME ANALYSIS REPORT
==============================================
ATS Score : 54.30%
Keyword Match : 66.7%
Resume Words : 520
Matched Keywords (4):
+ data analysis
+ machine learning
+ python
+ sql
Missing Keywords (3):
- communication
- developer
- problem solving
Suggestions:
* Include more job-specific keywords. Missing: communication, developer, problem solving.
* Quantify achievements where possible.
==============================================
Dependencies
| Package | Purpose |
|---|---|
PyPDF2 |
PDF text extraction |
python-docx |
DOCX text extraction |
scikit-learn |
TF-IDF vectorization and cosine similarity |
nltk |
Lemmatization, stopwords, tokenization |
All dependencies are installed automatically with pip install ats-resume-checker.
License
MIT © Vidhi Bhutia
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ats_resume_checker-0.2.0.tar.gz.
File metadata
- Download URL: ats_resume_checker-0.2.0.tar.gz
- Upload date:
- Size: 8.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84fd314d810c7e5c9ebc09a760953e77d9be40b36d1a166300099a6155e9e0df
|
|
| MD5 |
af76e1106ca934b96e9cf246687dd17d
|
|
| BLAKE2b-256 |
1ef60d0bc02cb8361a258ed6230dc16bf2abc545ccd78e91638865896b478683
|
File details
Details for the file ats_resume_checker-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ats_resume_checker-0.2.0-py3-none-any.whl
- Upload date:
- Size: 9.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36510c6207f7168917963f532ef0256ea411b7f7e4401d87ef86bb6439ba4962
|
|
| MD5 |
cfddcaa1053b239277bee840b190dc22
|
|
| BLAKE2b-256 |
fccc24e99c3a538660c0b69b6dc4058ec640913834c29343610081a2eea8670c
|