UC00208 Resume-to-Job Matching Assistant (Basil Behanan)#1743
UC00208 Resume-to-Job Matching Assistant (Basil Behanan)#1743
Conversation
Added detailed project information, including structure, workflow, requirements, and matching logic.
There was a problem hiding this comment.
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.txtfor 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.
| ```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 | ||
| ``` |
There was a problem hiding this comment.
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.
| pandas | ||
| numpy | ||
| matplotlib | ||
| scikit-learn | ||
| nltk | ||
| jupyter No newline at end of file |
There was a problem hiding this comment.
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.
| 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 |
| Tel: +61 468410310 | ||
| Email: [email protected] | ||
| LinkedIn: LinkedIn |
There was a problem hiding this comment.
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.
| 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 |
| { | ||
| "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" | ||
| ] |
There was a problem hiding this comment.
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.
| "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", |
There was a problem hiding this comment.
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.
| "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", |
| @@ -0,0 +1 @@ | |||
|
|
|||
There was a problem hiding this comment.
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.
| 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. |
| "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", |
There was a problem hiding this comment.
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.
| "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\")" | ||
| ] |
There was a problem hiding this comment.
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).
| "ranked_jobs.to_csv(\"../outputs/ranked_jobs.csv\", index=False)\n", | ||
| "final_results.to_csv(\"../outputs/final_prototype_results.csv\", index=False)\n", |
There was a problem hiding this comment.
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.
| "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", |
No description provided.