Skip to content

UC00208 Resume-to-Job Matching Assistant (Basil Behanan)#1743

Open
Basilbe wants to merge 13 commits intomasterfrom
Basil-Behanan
Open

UC00208 Resume-to-Job Matching Assistant (Basil Behanan)#1743
Basilbe wants to merge 13 commits intomasterfrom
Basil-Behanan

Conversation

@Basilbe
Copy link
Copy Markdown
Collaborator

@Basilbe Basilbe commented Apr 4, 2026

No description provided.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a notebook-based “Resume-to-Job Matching Assistant” prototype under Playground/Basil that compares a resume to job postings using TF‑IDF cosine similarity plus simple skill-overlap scoring, and exports ranked results.

Changes:

  • Added a Jupyter notebook implementing preprocessing, similarity scoring, skill extraction, ranking, and export.
  • Added sample input data (resume.txt, jobs.csv) and generated output artifacts (CSVs + chart).
  • Added project README and a minimal requirements.txt for running the notebook.

Reviewed changes

Copilot reviewed 8 out of 9 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
Playground/Basil/requirements.txt Adds Python dependencies needed to run the notebook.
Playground/Basil/Readme.md Documents the prototype, workflow, and expected inputs/outputs.
Playground/Basil/notebooks/resume_job_matching.ipynb Core implementation of preprocessing, matching/scoring, visualization, and exports.
Playground/Basil/data/resume.txt Provides a resume text input for matching (currently contains PII).
Playground/Basil/data/jobs.csv Provides sample job postings input data.
Playground/Basil/data/temp Adds an empty placeholder file.
Playground/Basil/outputs/ranked_jobs.csv Generated ranked job output (includes list-like fields).
Playground/Basil/outputs/final_prototype_results.csv Generated “final results” output (more presentation-friendly).
Playground/Basil/outputs/prototype_results_chart.png Generated visualization artifact.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +16 to +29
```text
resume_job_matcher/
├── data/
│ ├── jobs.csv
│ └── resume.txt
├── notebooks/
│ └── resume_job_matching.ipynb
├── outputs/
│ ├── final_prototype_results.csv
│ ├── ranked_jobs.csv
│ └── prototype_results_chart.png
├── src/
└── requirements.txt
```
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The README project structure block appears to describe a different top-level folder ("resume_job_matcher/") and includes a "src/" directory that doesn't exist under Playground/Basil. Please update the structure example to match the actual committed layout (or add the missing folder) to avoid misleading run instructions.

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +6
pandas
numpy
matplotlib
scikit-learn
nltk
jupyter No newline at end of file
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

requirements.txt lists unpinned dependencies. For reproducible notebooks (especially scikit-learn/nltk), please pin versions (or at least minimum versions) so results are stable across environments and future installs.

Suggested change
pandas
numpy
matplotlib
scikit-learn
nltk
jupyter
pandas==2.2.2
numpy==1.26.4
matplotlib==3.8.4
scikit-learn==1.4.2
nltk==3.8.1
jupyter==1.0.0

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +4
Tel: +61 468410310
Email: [email protected]
LinkedIn: LinkedIn
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file includes personal identifiable information (phone number, email). Please remove/redact PII before committing (e.g., replace with a synthetic/sample resume) to avoid leaking sensitive data in the repository history.

Suggested change
Tel: +61 468410310
Email: Basilbehanan5@gmail.com
LinkedIn: LinkedIn
Tel: +61 400 000 000
Email: sample.resume@example.com
LinkedIn: linkedin.com/in/sample-profile

Copilot uses AI. Check for mistakes.
Comment on lines +72 to +87
{
"name": "stdout",
"output_type": "stream",
"text": [
"Resume loaded successfully.\n",
"Resume preview:\n",
"Basil Behanan\n",
"Tel: +61 468410310\n",
"Email: [email protected]\n",
"LinkedIn: LinkedIn\n",
"\n",
"Career Profile\n",
"Final-year Computer Science student majoring in Data Science with experience applying data analytics, machine learning, and data engineering techniques to solve complex problems. Skilled in extracting,\n",
"\n",
"Jobs loaded successfully.\n"
]
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Notebook output logs print the resume preview including PII (name/phone/email). Please clear cell outputs before committing and avoid printing raw resume content (or use a redacted/synthetic sample) to prevent PII from being stored in git history.

Copilot uses AI. Check for mistakes.
Comment on lines +204 to +221
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package punkt to\n",
"[nltk_data] C:\\Users\\bazil\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package punkt is already up-to-date!\n",
"[nltk_data] Downloading package stopwords to\n",
"[nltk_data] C:\\Users\\bazil\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
}
],
"source": [
"nltk.download(\"punkt\")\n",
"nltk.download(\"stopwords\")\n",
"\n",
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The notebook currently contains environment-specific NLTK download output (including a local Windows user path). Consider clearing outputs before committing and making the downloads quieter/conditional (or documenting an offline setup) to keep the notebook reproducible and reduce noisy diffs.

Suggested change
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package punkt to\n",
"[nltk_data] C:\\Users\\bazil\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package punkt is already up-to-date!\n",
"[nltk_data] Downloading package stopwords to\n",
"[nltk_data] C:\\Users\\bazil\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
}
],
"source": [
"nltk.download(\"punkt\")\n",
"nltk.download(\"stopwords\")\n",
"\n",
"outputs": [],
"source": [
"def ensure_nltk_resource(resource_path, download_name):\n",
" try:\n",
" nltk.data.find(resource_path)\n",
" except LookupError:\n",
" nltk.download(download_name, quiet=True)\n",
"\n",
"ensure_nltk_resource(\"tokenizers/punkt\", \"punkt\")\n",
"ensure_nltk_resource(\"corpora/stopwords\", \"stopwords\")\n",
"\n",

Copilot uses AI. Check for mistakes.
@@ -0,0 +1 @@

Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The file data/temp is empty and looks like a placeholder/accidental artifact. Please remove it, or if it's meant to keep the directory in git, rename to a conventional placeholder like .gitkeep with an explanatory comment in the README.

Suggested change
This placeholder file exists only to keep the `data` directory in version control.
If repository-wide file operations are allowed, prefer renaming this file to `.gitkeep`
and documenting that convention in the README.

Copilot uses AI. Check for mistakes.
Comment on lines +464 to +476
"skill_list = [\n",
" \"python\", \"sql\", \"excel\", \"tableau\", \"power bi\", \"machine learning\",\n",
" \"deep learning\", \"data analysis\", \"data visualization\", \"nlp\",\n",
" \"computer vision\", \"opencv\", \"yolo\", \"pandas\", \"numpy\",\n",
" \"scikit-learn\", \"tensorflow\", \"pytorch\", \"git\", \"aws\",\n",
" \"feature engineering\", \"model evaluation\", \"dashboard\", \"reporting\",\n",
" \"statistics\", \"data preprocessing\", \"business intelligence\"\n",
"]\n",
"\n",
"def extract_skills(text, skills):\n",
" text = text.lower()\n",
" return sorted({skill for skill in skills if skill in text})\n",
"\n",
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skill extraction may miss skills containing punctuation because preprocessing strips punctuation (e.g., "scikit-learn" becomes "scikitlearn"), but skill_list still contains the hyphenated form. Normalize skill_list entries with the same preprocessing (or use token/regex-based matching) so skills like scikit-learn are detected reliably.

Copilot uses AI. Check for mistakes.
Comment on lines +874 to +909
"cell_type": "code",
"execution_count": 11,
"id": "817c377a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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PHiwsmfPLl9fX40cOdJuv5LUsmVL2Ww2870kffvtt3ruuefk6uqqQoUKadSoUYqPjzeX22w2zZ49W82bN5eHh4fGjh1rnp/58+crMDBQPj4+ateuna5evZquegEAAAA8+dIdur28vOTj45PmC9ZbvHixihcvruLFi6tjx44KDw+37Pb/oUOHatCgQYqOjlaxYsXUvn17M0hu3rxZPXv2VL9+/RQdHa169epp3Lhx993nhg0bdOTIEW3YsEGRkZGKiIiw++Cga9eu2rx5sxYtWqQ9e/aodevWatCggQ4dOiRJ2rt3r+rXr69WrVppz549Wrx4sX766Sf16dPHrp8pU6aodOnS2rlzp4YNG5buY46MjJSHh4e2bdumyZMna/To0Vq7dq0kKSoqSpIUHh6uuLg48/3q1avVsWNH9e3bV/v379cnn3yiiIiIZOdjxIgRat68ufbu3atu3bpJko4cOaJly5ZpxYoVWrFihTZt2qSJEyemu14AAAAATzabkY7E5uDgoNOnTyt37tyPoyakoXr16mrTpo369eun+Ph4+fn56fPPP1fdunUl3RmlLliwoH755ZdUJzELCQnRli1bkt1y/dFHH6lLly7mPubOnatXX31VkrR//36VKlVKMTExCgoKUrt27XTt2jWtWLHC3L5jx45asWKFLl26JOnOSPeyZcvM58tDQ0O1ceNGHTlyRFmyZJEktWnTRg4ODlq0aJGOHDmiokWL6vfff5e/v7+537p166py5coaP368OnfuLDc3N33yySfm8p9++km1atXS9evX5erqqsDAQJUvX15ff/11mucyNDRUly5dMp/RDgkJUUJCgn788UdzncqVK6tOnTpmELbZbPr666/tngWvWbOmGjZsqCFDhphtn332mQYPHqw//vjD3K5///567733zHVGjhypKVOm6PTp0/Ly8pIkDR48WD/88IN+/vnnFGu+efOmbt68ab6/cuWKAgICFNB/iRxcMvbxAABA+sVObJzZJQAAHrMrV67Ix8dHly9fNu8aTkm6nunmee4nw4EDB7R9+3YtXbpUkuTo6Ki2bdsqLCzMDN3p1aFDBw0dOtSu7d4PVYKDg83/9vPzkySdPXtWQUFBOnDggFq2bGm3fuXKle1CeEpKlSplBu6k/e7du1eStGvXLhmGoWLFitltc/PmTeXIkUOStHPnTh0+fFgL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",
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Chart saved to ../outputs/prototype_results_chart.png\n"
]
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"plt.barh(final_results[\"title\"], final_results[\"prototype_score\"])\n",
"plt.xlabel(\"Prototype Score (%)\")\n",
"plt.ylabel(\"Job Title\")\n",
"plt.title(\"Resume-to-Job Matching Prototype Results\")\n",
"plt.gca().invert_yaxis()\n",
"plt.tight_layout()\n",
"plt.savefig(\"../outputs/prototype_results_chart.png\")\n",
"plt.show()\n",
"\n",
"print(\"Chart saved to ../outputs/prototype_results_chart.png\")"
]
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The notebook includes a large embedded base64 image output and other executed cell outputs, which makes diffs noisy and increases repo size. Consider clearing outputs before committing (e.g., via nbstripout/jupyter "Clear All Outputs") and relying on the saved CSV/chart artifacts (or regenerate them during execution).

Copilot uses AI. Check for mistakes.
Comment on lines +927 to +928
"ranked_jobs.to_csv(\"../outputs/ranked_jobs.csv\", index=False)\n",
"final_results.to_csv(\"../outputs/final_prototype_results.csv\", index=False)\n",
Copy link

Copilot AI Apr 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ranked_jobs.csv is exported directly from jobs_df while it still contains Python list-valued columns (e.g., job_skills/matched_skills/missing_skills). In the CSV these become stringified lists (e.g., "['python', ...']"), which is harder to consume consistently. Consider normalizing these columns to a consistent serialized format (comma-separated strings or JSON) before exporting.

Suggested change
"ranked_jobs.to_csv(\"../outputs/ranked_jobs.csv\", index=False)\n",
"final_results.to_csv(\"../outputs/final_prototype_results.csv\", index=False)\n",
"import json\n",
"\n",
"def _serialize_list_columns_for_csv(df):\n",
" export_df = df.copy()\n",
" for column in export_df.columns:\n",
" if export_df[column].apply(lambda value: isinstance(value, list)).any():\n",
" export_df[column] = export_df[column].apply(\n",
" lambda value: json.dumps(value) if isinstance(value, list) else value\n",
" )\n",
" return export_df\n",
"\n",
"ranked_jobs_export = _serialize_list_columns_for_csv(ranked_jobs)\n",
"final_results_export = _serialize_list_columns_for_csv(final_results)\n",
"\n",
"ranked_jobs_export.to_csv(\"../outputs/ranked_jobs.csv\", index=False)\n",
"final_results_export.to_csv(\"../outputs/final_prototype_results.csv\", index=False)\n",

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants