Smart Resume Screening System with ATS (Advanced Version)
π Project Overview:
This is an advanced-level Smart Resume Screening System powered by ATS (Applicant Tracking System) techniques. It helps HR and recruiters to automatically screen, score, and shortlist resumes based on a given Job Description (JD). It also includes a Flask web interface, stores data in a SQLite database, and uses NLP and ML techniques like Named Entity Recognition (NER), TF-IDF, Cosine Similarity, and Job Role Classification using spaCy and other ML models.
π Project Structure:
resume_screening_system/
βββ app/
β βββ main.py # Main workflow script
β βββ parser.py # Extracts resume text
β βββ ats_scorer.py # Scores resumes based on job description
β βββ mailer.py # Sends emails to shortlisted candidates
β βββ file_manager.py # Handles file movements and storage
β βββ ner_extractor.py # Extracts name, email, skills using spaCy NER
β βββ role_classifier.py # Predicts job role category using ML model
β βββ database.py # SQLite database operations (insert, query, create)
β βββ flask_app.py # Flask UI for uploading and viewing results
βββ resumes/ # Raw resumes input folder
βββ shortlisted/ # Shortlisted resumes output folder
βββ data/
β βββ job_description.txt # Job Description for screening
β βββ ranked_candidates.csv # Output: ATS score and details
βββ utils/
β βββ text_cleaner.py # Text preprocessing
β βββ similarity.py # TF-IDF and cosine similarity
βββ logs/
β βββ ats_log.log # Logs for system events
βββ config/
β βββ email_config.json # SMTP configuration for email
βββ templates/
β βββ index.html # HTML template for Flask app
βββ static/ # CSS/JS if needed for Flask UI
βββ test/ # Unit test files
βββ requirements.txt # List of required packages
βββ README.md # Project documentation
βοΈ Workflow (Advanced Pipeline):
- User uploads resumes using the Flask UI.
parser.py
reads and extracts raw text from resumes.text_cleaner.py
preprocesses the text.job_description.txt
is also cleaned similarly.ner_extractor.py
extracts entities like name, email, skills using spaCy NER.role_classifier.py
predicts the job role category for each resume.ats_scorer.py
calculates ATS score using TF-IDF + Cosine Similarity.ranked_candidates.csv
stores all info: name, score, predicted role, etc.database.py
stores this data in a SQLite database.file_manager.py
moves top-scoring resumes to/shortlisted
.mailer.py
sends emails to shortlisted candidates.- Logs are written to
ats_log.log
.
π Flask UI:
- Upload resumes (PDF/DOCX)
- See real-time ATS score, extracted info, predicted role
- Search/filter resumes by score or role
π§ ML & NLP Features
NER Extraction using spaCy
for:
- Names
- Emails
- Phone Numbers
- Skills
ATS Scoring using:
TfidfVectorizer
cosine_similarity
Role Classification:
- Trained classifier (e.g., Logistic Regression or RandomForest)
- Input: Resume text β Output: Predicted job role
π§° Tools & Libraries
Feature | Libraries/Tools Used |
---|---|
Resume Parsing | pdfminer.six , python-docx , textract |
Text Cleaning | re , nltk , spacy , string |
NER | spaCy |
Similarity Matching | scikit-learn , TfidfVectorizer |
Classification | sklearn models, joblib |
Database | sqlite3 , pandas |
Web App | Flask , HTML , CSS , Jinja2 |
Emailing | smtplib , email.message , ssl |
Logging | Python logging module |
Testing | unittest , pytest |
π Setup Instructions
- Clone the repository
git clone https://github.com/yourusername/resume_screening_system.git
cd resume_screening_system
- Install requirements
pip install -r requirements.txt
- Download NLTK and spaCy models
import nltk
nltk.download('punkt')
nltk.download('stopwords')
python -m spacy download en_core_web_sm
- Run Flask Web App
python app/flask_app.py
π§ͺ Testing:
- Place test files in
/test/
- Run with:
pytest test/
β Future Improvements:
- Use MongoDB for large-scale resume data
- Integrate OpenAI embeddings for semantic similarity
- Add user authentication for HR dashboard
- Resume feedback system for candidates
π¬ Contact:
Developer: Mahboob Alam Email: [email protected] LinkedIn: https://www.linkedin.com/in/mahboob-alam-242342152
β Acknowledgments:
Thanks to the open-source libraries and online resources that helped shape this project!