AI Resume and Job Match Assistant Project

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

  1. Create and activate a virtual environment.
  2. Install dependencies with python -m pip install scikit-learn when packages are required.
  3. Run python ai_resume_job_match_assistant.py.
  4. Review confidence, fallbacks, sources, or error metrics rather than accepting output automatically.
  5. 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.