The AI Powered Resume Screening System is a Python and Flask HR automation tool that screens multiple resumes against a job description and ranks every candidate by a weighted Job-Match Score. It parses PDF and DOCX resumes, extracts candidate details with spaCy NLP, and scores applicants using TF-IDF cosine similarity with optional BERT matching. Key features include automatic skill extraction, a Chart.js analytics dashboard, skill-gap analysis, one-click shortlist or reject, CSV and Excel export, and switchable SQLite or MySQL database support. Ideal for MCA, BCA, B.Tech and MBA final year students. Includes source code, report, synopsis and PPT.
The AI Powered Resume Screening System is a full-stack HR automation project built with Python, Flask, spaCy, and scikit-learn that solves a genuine business problem: manually reviewing hundreds of resumes for a single job opening. Recruiters upload resumes in PDF or DOCX format, define a job description with required skills, minimum experience, and education level, and the system parses every file, extracts structured candidate information, and ranks applicants by a weighted Job-Match Score percentage. Unlike a basic keyword tool, it uses TF-IDF and cosine similarity for semantic matching, with an optional BERT engine for deeper contextual understanding. The result is an enterprise-grade HR-Tech application combining NLP, machine learning, document parsing, REST APIs, and data visualisation.
| Component | Technology |
| Backend | Python 3, Flask (application-factory pattern) |
| ORM | SQLAlchemy with Flask-Migrate |
| NLP | spaCy (en_core_web_sm) with NER |
| Machine Learning | scikit-learn TF-IDF, optional sentence-transformers BERT |
| Document Parsing | PyMuPDF (fitz), python-docx |
| Frontend | HTML5, custom CSS design system, JavaScript, Chart.js |
| Export | openpyxl for Excel, built-in csv module |
| Database | SQLite (default), MySQL (production-ready) |
| Testing | pytest |
A recruiter creates a job description, and the system auto-detects the required skills from the text along with the minimum experience and education level. Uploaded resumes are converted to plain text by PyMuPDF or python-docx, then passed to the spaCy NER pipeline which extracts the candidate's name, contact details, skills, education, and years of experience. The match engine blends four signals into one score: skills overlap at 50 percent, experience at 20 percent, education at 15 percent, and TF-IDF or BERT semantic similarity at 15 percent. Every candidate is ranked by this percentage on the dashboard, where the recruiter can review skill gaps, shortlist or reject with one click, and export the final list.
This is an advanced-level project suited to MCA, BCA, B.Tech CS/IT, M.Tech, and MBA IT or HR students who want a final year submission that stands out. It covers artificial intelligence, natural language processing, machine learning, and full-stack web development in a single codebase, giving you plenty of material for viva questions on NER, TF-IDF, cosine similarity, and transformer models. It also doubles as a strong portfolio and interview project for AI, Data Science, and HR-Tech roles.
The project can be extended with recruiter and admin login with role-based access, automated email notifications to shortlisted candidates, resume ranking across multiple jobs at once, an interview scheduling module, bulk ZIP upload of resumes, cloud deployment on Render or Railway, and a fine-tuned transformer model for domain-specific skill extraction.
Watch the full project walkthrough and setup tutorial on our YouTube channel.
▶ Watch on YouTube – Decode It
For complete project details, source code, and setup guide, visit the official project page.
1. Download and extract the ZIP file 2. Open the project folder: cd Ai-Powered-Resume-Analyzer 3. Create a virtual environment: python -m venv venv Windows: venv\Scripts\activate macOS / Linux: source venv/bin/activate 4. Install dependencies: pip install -r requirements.txt 5. Download the spaCy English model: python -m spacy download en_core_web_sm (Optional - the app falls back to regex extraction without it) 6. Create the environment file: Windows: copy .env.example .env macOS / Linux: cp .env.example .env 7. Seed sample data (optional): python seed.py 8. Run the application: python run.py 9. Open the localhost URL shown in the terminal To use MySQL instead of SQLite: - Create the database: CREATE DATABASE resume_screening; - Set DATABASE_URL=mysql+pymysql://root:password@localhost:3306/resume_screening - Restart the app; tables are created automatically To enable BERT matching: - Uncomment sentence-transformers in requirements.txt and reinstall - Set MATCH_ENGINE=bert in .env
FAQ for this project coming soon.
No reviews yet. Be the first to review!