Artificial Intelligence project 05
AI Resume and Job Match Assistant Project
Build a complete resume-job match assistant workflow with reproducible Python code, transparent inputs, reviewable output, and responsible-use limits.
Explore AI training in VizagView all project ideas
AI objective
Help a candidate compare wording and identify explicitly mentioned matched and missing skills.
Data or knowledge source
A user-provided resume and job description plus a transparent list of eight example technical skills.
Requirements
- Python 3.10 or later
- A terminal or command prompt
python -m pip install scikit-learn- About 45-60 minutes to build and review
How the system works
Calculate TF-IDF cosine similarity and independently extract exact skill phrases using escaped word-boundary patterns.
Validation checklist
- Similarity stays between zero and one
- Skill matches are inspectable rather than inferred secretly
- Missing skills come only from the stated job text
- The result is framed as a candidate self-check
Complete Python code
Save the program as ai_resume_job_match_assistant.py. The code runs locally and requires no paid API key or model download.
"""Compare a resume with a job description using transparent text similarity."""
from __future__ import annotations
import re
from dataclasses import dataclass
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
SKILLS = {"python", "sql", "pandas", "power bi", "excel", "statistics", "machine learning", "git"}
@dataclass(frozen=True)
class MatchResult:
similarity: float
matched_skills: tuple[str, ...]
missing_skills: tuple[str, ...]
def mentioned_skills(text: str) -> set[str]:
lower = re.sub(r"\s+", " ", text.lower())
return {skill for skill in SKILLS if re.search(r"\b" + re.escape(skill) + r"\b", lower)}
def compare(resume: str, job: str) -> MatchResult:
matrix = TfidfVectorizer(stop_words="english", ngram_range=(1, 2)).fit_transform([resume, job])
score = float(cosine_similarity(matrix[0], matrix[1])[0, 0])
resume_skills, required = mentioned_skills(resume), mentioned_skills(job)
return MatchResult(score, tuple(sorted(resume_skills & required)), tuple(sorted(required - resume_skills)))
def main() -> None:
resume = "Built Python and pandas reports, wrote SQL queries, and used Git for team projects."
job = "Seeking an analyst with Python, SQL, pandas, Power BI, statistics, and Git experience."
print(compare(resume, job))
print("Use as a candidate self-check only, never as an automated hiring decision.")
if __name__ == "__main__":
main()
Run the project
- Create and activate a virtual environment.
- Install dependencies with
python -m pip install scikit-learnwhen packages are required. - Run
python ai_resume_job_match_assistant.py. - Review confidence, fallbacks, sources, or error metrics rather than accepting output automatically.
- Test additional normal, edge, unsupported, and adversarial inputs.
Expected output
Text similarity, matched skills, and job-mentioned skills absent from the resume.
Accuracy, privacy, and responsible-use limits
Never use this small text score to screen, rank, reject, or make employment decisions. Wording similarity can reproduce bias and ignores experience quality, accessibility, and potential.
Ways to extend the project
Let candidates edit the skill dictionary, add synonym mappings, explain every match, remove personal data, and test accessibility and subgroup impacts.
Continue learning Artificial Intelligence
Try the next project, return to the Softenant project library, or explore the AI training in Vizag for guided NLP, retrieval, evaluation, automation, and responsible AI practice.