# gopi-410/ai-resume-screener-nlp architecture

> Architecture diagram of the GitHub repository gopi-410/ai-resume-screener-nlp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gopi-410/ai-resume-screener-nlp
- Repository: https://github.com/gopi-410/ai-resume-screener-nlp

## Overview

This Flask application screens a resume against a job description. The main workflow accepts pasted text or a PDF/DOCX upload, extracts and preprocesses content, evaluates similarity, skills, and experience, then returns a score, recommendation, and improvement feedback for display. The implementation is concentrated in app.py, so analysis stages are logical responsibilities within that file rather than separate modules. README documents several stages whose implementation was not included in the excerpts; those relationships are cited to the README, not presented as inspected source calls.

Main entry points: [`app.py`](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py) (Score and Recommendation), [`templates/index.html`](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/templates/index.html) (Screening Form), [`static/script.js`](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/script.js) (Form Submission), [`static/graphs.html`](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/graphs.html) (Graphs Page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User Interface"]
  node_screening_form["Screening Form<br/>[index.html]"]
  node_browser_submit["Form Submission<br/>[script.js]"]
  node_results_view["Results Display<br/>[script.js]"]
  node_graphs_page["Graphs Page<br/>[graphs.html]"]
end

subgraph group_analysis["Resume Analysis"]
  node_analyze_route["Analysis Endpoint<br/>[app.py]"]
  node_document_text["Document Text Extraction<br/>[app.py]"]
  node_text_preprocessing["Text Preprocessing<br/>[app.py]"]
  node_candidate_info["Candidate Information<br/>[app.py]"]
  node_skill_extraction["Skill Extraction<br/>[app.py]"]
end

subgraph group_evaluation["Scoring and Feedback"]
  node_semantic_eval["Semantic Similarity<br/>[app.py]"]
  node_tfidf_eval["TF-IDF Similarity<br/>[app.py]"]
  node_skill_eval["Skill Matching<br/>[app.py]"]
  node_experience_eval["Experience Comparison<br/>[app.py]"]
  node_score_recommendation["Score and Recommendation<br/>[app.py]"]
  node_suggestions["Improvement Suggestions<br/>[app.py]"]
end

subgraph group_results["Results"]
  node_analysis_response["Analysis Response<br/>[app.py]"]
end

node_user(("Candidate or Recruiter"))

node_user -->|"enters resume and job"| node_screening_form
node_screening_form -->|"submits form"| node_browser_submit
node_browser_submit -->|"posts analysis request"| node_analyze_route
node_analyze_route -->|"extracts uploaded text"| node_document_text
node_document_text -->|"preprocesses text"| node_text_preprocessing
node_text_preprocessing -->|"extracts profile"| node_candidate_info
node_text_preprocessing -->|"extracts skills"| node_skill_extraction
node_text_preprocessing -->|"compares embeddings"| node_semantic_eval
node_text_preprocessing -->|"compares keywords"| node_tfidf_eval
node_skill_extraction -->|"matches required skills"| node_skill_eval
node_analyze_route -->|"compares experience"| node_experience_eval
node_semantic_eval -->|"contributes similarity"| node_score_recommendation
node_tfidf_eval -->|"contributes similarity"| node_score_recommendation
node_skill_eval -->|"contributes skill score"| node_score_recommendation
node_experience_eval -->|"contributes experience match"| node_score_recommendation
node_score_recommendation -->|"guides feedback"| node_suggestions
node_analyze_route -->|"returns analysis"| node_analysis_response
node_candidate_info -->|"includes profile"| node_analysis_response
node_score_recommendation -->|"includes scores and status"| node_analysis_response
node_suggestions -->|"includes suggestions"| node_analysis_response
node_analysis_response -->|"renders results"| node_results_view
node_user -.->|"opens graphs"| node_graphs_page

click node_screening_form "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/templates/index.html"
click node_browser_submit "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/script.js"
click node_results_view "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/script.js"
click node_graphs_page "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/graphs.html"
click node_analyze_route "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_document_text "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_text_preprocessing "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_candidate_info "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_skill_extraction "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_semantic_eval "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_tfidf_eval "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_skill_eval "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_experience_eval "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_score_recommendation "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_suggestions "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"
click node_analysis_response "https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py"

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_screening_form,node_browser_submit,node_results_view,node_graphs_page toneBlue
class node_analyze_route,node_document_text,node_text_preprocessing,node_candidate_info,node_skill_extraction toneAmber
class node_semantic_eval,node_tfidf_eval,node_skill_eval,node_experience_eval,node_score_recommendation,node_suggestions toneMint
class node_analysis_response toneRose
class node_user toneIndigo
```

## Components

### User Interface

- [Screening Form](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/templates/index.html): `templates/index.html`
- [Form Submission](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/script.js): `static/script.js`
- [Results Display](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/script.js): `static/script.js`
- [Graphs Page](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/static/graphs.html): `static/graphs.html`

### Resume Analysis

- [Analysis Endpoint](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Document Text Extraction](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Text Preprocessing](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Candidate Information](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Skill Extraction](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`

### Scoring and Feedback

- [Semantic Similarity](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [TF-IDF Similarity](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Skill Matching](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Experience Comparison](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Score and Recommendation](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`
- [Improvement Suggestions](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`

### Results

- [Analysis Response](https://github.com/gopi-410/ai-resume-screener-nlp/blob/main/app.py): `app.py`

### Other components

- **Candidate or Recruiter**

## Connections

- Candidate or Recruiter → Screening Form: enters resume and job (evidence: `README.md`)
- Screening Form → Form Submission: submits form (evidence: `static/script.js`)
- Form Submission → Analysis Endpoint: posts analysis request (evidence: `static/script.js`)
- Analysis Endpoint → Document Text Extraction: extracts uploaded text (evidence: `README.md`)
- Document Text Extraction → Text Preprocessing: preprocesses text (evidence: `README.md`)
- Text Preprocessing → Candidate Information: extracts profile (evidence: `README.md`)
- Text Preprocessing → Skill Extraction: extracts skills (evidence: `README.md`)
- Text Preprocessing → Semantic Similarity: compares embeddings (evidence: `README.md`)
- Text Preprocessing → TF-IDF Similarity: compares keywords (evidence: `README.md`)
- Skill Extraction → Skill Matching: matches required skills (evidence: `README.md`)
- Analysis Endpoint → Experience Comparison: compares experience (evidence: `README.md`)
- Semantic Similarity → Score and Recommendation: contributes similarity (evidence: `README.md`)
- TF-IDF Similarity → Score and Recommendation: contributes similarity (evidence: `README.md`)
- Skill Matching → Score and Recommendation: contributes skill score (evidence: `README.md`)
- Experience Comparison → Score and Recommendation: contributes experience match (evidence: `README.md`)
- Score and Recommendation → Improvement Suggestions: guides feedback (evidence: `README.md`)
- Analysis Endpoint → Analysis Response: returns analysis (evidence: `app.py`)
- Candidate Information → Analysis Response: includes profile (evidence: `app.py`)
- Score and Recommendation → Analysis Response: includes scores and status (evidence: `README.md`)
- Improvement Suggestions → Analysis Response: includes suggestions (evidence: `README.md`)
- Analysis Response → Results Display: renders results (evidence: `static/script.js`)
- Candidate or Recruiter → Graphs Page: opens graphs
