Best View in Light Mode and Desktop Site (Recommended)
A Tool for Resume Analysis, Predictions and Recommendations
A tool which parses information from a resume using natural language processing and finds the keywords, cluster them onto sectors based on their keywords. And lastly show recommendations, predictions, analytics to the applicant / recruiter based on keyword matching.
i. Transforming all resume data into a structured tabular format and CSV enables organizations to utilize the information for analytical purposes.
ii. Users can enhance their resumes by receiving recommendations, predictions, and an overall score through our tool, allowing for continuous testing and improvement.
iii. The user section's enhanced features can contribute to increased traffic on our tool.
iv. Colleges can utilize the tool to gain insights into students' resumes before placements.
v. Obtain analytics on the roles most sought after by users.
vi. Continuous improvement of the tool is facilitated through user feedback.
Frontend
Modules
Database
- SQLite (default, file-based)
-
Utilizing Parsing Techniques to Retrieve Location and Miscellaneous Data
- Extracting Basic Info, Skills, and Keywords
-
New: Paste a Job Description (JD) and see a JD-match score with top missing keywords
-
New: DOCX upload support (PDF and DOCX are both supported)
-
New: Refreshed UI/theme for better readability
Employing logical programs to provide recommendations on:
- Additional skills
- Predicted job role
- Relevant courses and certificates
- Resume tips and ideas
- Overall Score
- Access to Interview & Resume tip videos
- Local persistence via SQLite (no external DB needed by default)
- Visitor counter with DB tracking and session-based fallback
- Upload & Pre-processing
- User uploads a resume as PDF or DOCX. PDFs are previewed inline; DOCX is parsed directly.
- Text is extracted via pdfminer.six (PDF) or docx2txt (DOCX).
- pyresparser + spaCy (en_core_web_sm) + NLTK tokenize and extract: name, email, phone, degree, skills, and page count.
- Skill & Field Inference
- Extracted skills are matched against curated keyword lists to infer a likely field (e.g., Data Science, Web, Android, iOS, UI/UX).
- Based on the inferred field, the app recommends additional skills and relevant courses (from
App/Courses.py
).
- Resume Heuristics Scoring
- A ruleset checks for presence of common sections: Objective/Summary, Education, Experience/Internships, Skills, Hobbies/Interests, Achievements, Certifications, Projects.
- A progress bar visualizes the computed score.
- JD Match Scoring (Optional)
- User pastes a Job Description (JD). The app tokenizes JD text, removes stopwords, and compares against resume tokens + extracted skills.
- It outputs a JD-match percentage and a list of top missing keywords to add to the resume.
- Results & Extras
- Displays extracted basics, score, recommendations, and two helpful videos (resume tips and interview tips).
- Data can be stored to the local SQLite DB for admin analytics (optional).
- UI: Streamlit app (
App/App.py
) - Parsing Layer:
- PDF: pdfminer.six
- DOCX: docx2txt
- NLP: spaCy (en_core_web_sm), NLTK (stopwords)
- pyresparser for entity/skill extraction (uses spaCy internally)
- Heuristics & Recommendations: Python rule-based logic + keyword lists
- Storage: SQLite (
resume_reviewer.db
) created at runtime (no external setup) - Visualization: Plotly for charts (admin/feedback analytics)
- Streamlit, Python 3.10+
- spaCy, NLTK, pyresparser
- pdfminer.six, docx2txt
- pandas, plotly, streamlit-tags
- SQLite (default) or MySQL (optional, if you re-enable connector)
- PII (name, email, phone) may be parsed for display and optional storage.
- By default, data is stored locally in SQLite; for production, use a managed DB and restrict access.
- Avoid uploading confidential documents to public deployments.
- No third-party API calls are required for core functionality.
- Streamlit Community Cloud: simplest. Connect GitHub repo and deploy.
- Render/Railway/Fly.io: containerize (Docker) if you need more control or background workers.
- Vercel (not recommended for Streamlit directly): use only if you split into a FastAPI backend + Next.js frontend.
- OCR for image-based/scanned PDFs not enabled (could add Tesseract + pytesseract).
- JD match uses keyword overlap; a semantic matcher (e.g., embeddings) could improve quality.
- Multilingual resumes are not deeply supported; add locale detection and language-specific models for best results.
-
Aggregating all applicant data in a tabular format
-
Downloading user data in CSV format
-
Viewing all saved uploaded PDFs in the Uploaded Resume folder
-
Collecting user feedback and ratings
Generating Pie Charts for: -
-
Ratings
-
Predicted fields/roles
-
Experience levels
-
Resume scores
-
User counts
-
City, State, and Country breakdown
- Easy-to-fill forms
- Rating scale from 1 to 5
- Displaying an overall ratings pie chart
- Providing a history of past user comments
- Python 3.10+ (3.11–3.13 recommended): Download Python
- Visual Studio Code (Preferred Code Editor): Download VS Code
To run this project, perform the following tasks 😨
Download the code file manually or via git
git clone https://github.com/1e9abhi1e10/AI-Based-Resume-Reviewer.git
Create a virtual environment and activate it (recommended)
Open your terminal and change your project directory to AI-Based-Resume-Reviewer
and run the following:
python -m venv venv
# macOS/Linux
source venv/bin/activate
# Windows (PowerShell)
venv\Scripts\Activate.ps1
Install dependencies (minimal set to run the app):
cd App
pip install streamlit pandas plotly streamlit-tags docx2txt nltk pyresparser pdfminer.six geopy geocoder
# Models/data downloads
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('stopwords')"
Run the app:
streamlit run App.py
Notes:
- The app defaults to SQLite (creates a local file automatically). No DB setup needed.
- If you want to use MySQL instead, restore the original connector in
App/App.py
and ensure credentials/DB exist.
- After the setup it will do stuff's automatically
- You just need to upload a resume and see it's magic
- Try first with my resume uploaded in
Uploaded_Resumes
folder - Admin userid is
admin
and password isadmin@resume-Reviewer
- Paste a JD in the new textarea to see the JD match score and missing keywords.
- Upload DOCX or PDF; PDFs show inline preview, DOCX is analyzed without preview.
- The sidebar theme is dark with improved contrast for selections.
- If you see spaCy or NLTK errors, re-run:
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('stopwords')"
- If
pyresparser
throws model/config warnings, they are safe; we load the standard spaCy model by default.