# jatharthan/resume-to-job-matcher-spacy- architecture

> Architecture diagram of the GitHub repository jatharthan/resume-to-job-matcher-spacy-, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jatharthan/resume-to-job-matcher-spacy-
- Repository: https://github.com/jatharthan/resume-to-job-matcher-spacy-

## Overview

This is a notebook-derived spaCy prototype for reciprocal resume/job recommendations. The user-facing workflow extracts skills from a resume or job description, compares them with the opposite-side collection, and ranks matches; the script also converts annotated data, trains and evaluates a named-entity model, and loads saved model artifacts. The main implementation is concentrated in `final_research.py`. The README describes the recommendation goal, but the excerpts do not show a deployed interface or a separate production service.

Main entry points: [`final_research.py`](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py) (Research script), [`five_class_entitydata/model2`](https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/model2) (Saved spaCy model), [`five_class_entitydata/traindata_3withmyannotation.json`](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/traindata_3withmyannotation.json) (Annotated examples), [`five_class_entitydata/3class_test_data.json`](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/3class_test_data.json) (Test examples)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_training["NER training"]
  node_convert["Annotation conversion<br/>[final_research.py]"]
  node_clean["Span cleanup<br/>[final_research.py]"]
  node_train["NER training<br/>[final_research.py]"]
  node_evaluate["Model evaluation<br/>[final_research.py]"]
  node_model["Saved spaCy model"]
end

subgraph group_matching["Matching workflow"]
  node_research["Research script<br/>[final_research.py]"]
  node_ner["Skill extraction<br/>[final_research.py]"]
  node_jobset["Job collection<br/>[final_research.py]"]
  node_cvset["Resume collection<br/>[final_research.py]"]
  node_rank["Match ranking<br/>[final_research.py]"]
  node_results["Ranked matches<br/>[final_research.py]"]
end

subgraph group_corpora["Input corpora"]
  node_annotations["Annotated examples"]
  node_testdata["Test examples"]
  node_jobfiles["Job descriptions"]
  node_cvfiles["Resume texts"]
end

node_seeker(("Job seeker"))
node_employer(("Employer"))

node_annotations -->|"reads"| node_convert
node_convert -->|"formats"| node_clean
node_clean -->|"supplies spans"| node_train
node_train -->|"saves model"| node_model
node_testdata -->|"supplies examples"| node_evaluate
node_model -->|"loads model"| node_evaluate
node_research -->|"calls"| node_convert
node_research -->|"calls"| node_train
node_research -->|"calls"| node_evaluate
node_research -->|"calls"| node_ner
node_jobfiles -->|"reads"| node_jobset
node_cvfiles -->|"reads"| node_cvset
node_research -->|"builds"| node_cvset
node_research -->|"builds"| node_jobset
node_cvset -->|"extracts skills"| node_ner
node_research -->|"calls"| node_rank
node_rank -->|"extracts skills"| node_ner
node_rank -->|"compares skills"| node_jobset
node_rank -->|"compares skills"| node_cvset
node_rank -->|"returns scores"| node_results
node_seeker -->|"provides resume"| node_research
node_employer -->|"provides job text"| node_research
node_research -->|"prints matches"| node_results

click node_research "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_convert "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_clean "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_train "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_evaluate "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_ner "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_jobset "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_cvset "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_rank "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_results "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py"
click node_annotations "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/traindata_3withmyannotation.json"
click node_testdata "https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/3class_test_data.json"
click node_jobfiles "https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/jobs"
click node_cvfiles "https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/cv"
click node_model "https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/model2"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_convert,node_clean,node_train,node_evaluate,node_model toneBlue
class node_research,node_ner,node_jobset,node_cvset,node_rank,node_results toneAmber
class node_annotations,node_testdata,node_jobfiles,node_cvfiles toneMint
class node_seeker,node_employer toneIndigo
```

## Components

### NER training

- [Annotation conversion](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Span cleanup](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [NER training](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Model evaluation](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Saved spaCy model](https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/model2): `five_class_entitydata/model2`

### Matching workflow

- [Research script](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Skill extraction](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Job collection](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Resume collection](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Match ranking](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`
- [Ranked matches](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/final_research.py): `final_research.py`

### Input corpora

- [Annotated examples](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/traindata_3withmyannotation.json): `five_class_entitydata/traindata_3withmyannotation.json`
- [Test examples](https://github.com/jatharthan/resume-to-job-matcher-spacy-/blob/master/five_class_entitydata/3class_test_data.json): `five_class_entitydata/3class_test_data.json`
- [Job descriptions](https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/jobs): `five_class_entitydata/jobs`
- [Resume texts](https://github.com/jatharthan/resume-to-job-matcher-spacy-/tree/master/five_class_entitydata/cv): `five_class_entitydata/cv`

### Other components

- **Job seeker**
- **Employer**

## Connections

- Annotated examples → Annotation conversion: reads
- Annotation conversion → Span cleanup: formats
- Span cleanup → NER training: supplies spans
- NER training → Saved spaCy model: saves model
- Test examples → Model evaluation: supplies examples
- Saved spaCy model → Model evaluation: loads model
- Research script → Annotation conversion: calls
- Research script → NER training: calls
- Research script → Model evaluation: calls
- Research script → Skill extraction: calls
- Job descriptions → Job collection: reads
- Resume texts → Resume collection: reads
- Research script → Resume collection: builds
- Research script → Job collection: builds
- Resume collection → Skill extraction: extracts skills
- Research script → Match ranking: calls
- Match ranking → Skill extraction: extracts skills
- Match ranking → Job collection: compares skills
- Match ranking → Resume collection: compares skills
- Match ranking → Ranked matches: returns scores
- Job seeker → Research script: provides resume
- Employer → Research script: provides job text
- Research script → Ranked matches: prints matches
