# chenxin1209/fusioncareer-algorithm architecture

> Architecture diagram of the GitHub repository chenxin1209/fusioncareer-algorithm, 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/chenxin1209/fusioncareer-algorithm
- Repository: https://github.com/chenxin1209/fusioncareer-algorithm

## Overview

FusionCareer-Algorithm combines job-post structuring and deduplication, resume parsing, and conversational job recommendation. The main job workflow turns Markdown articles into structured, deduplicated CSV/JSON; resume inputs are extracted to text and parsed into structured JSON; recommendation gathers user preferences and returns ranked job results. The README also documents an admin parsing service and optional backend upload. Sampled source confirms only parts of these paths, so uncertain service wiring is omitted.

Main entry points: [`resume_parser/parser.py`](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/parser.py) (Resume parser), [`pipeline/run_pipeline.py`](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/pipeline/run_pipeline.py) (Batch pipeline), [`job_structuring/engine.py`](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/engine.py) (Extract and deduplicate), [`job_recommend/serve.py`](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/serve.py) (Recommendation service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_jobs["Job structuring"]
  node_pipeline["Batch pipeline<br/>[run_pipeline.py]"]
  node_engine["Extract and deduplicate<br/>[engine.py]"]
  node_prefilter["Keyword prefilter<br/>[prefilter.py]"]
  node_job_csv["Positions CSV"]
  node_export["JSON export<br/>[export.py]"]
  node_job_json["Positions JSON"]
end

subgraph group_resumes["Resume parsing"]
  node_resume_parser["Resume parser<br/>[parser.py]"]
  node_extractors["File extractors"]
  node_ocr["Image OCR"]
  node_deepseek["DeepSeek client<br/>[deepseek_client.py]"]
  node_resume_json["Structured resume"]
end

subgraph group_recommend["Job recommendation"]
  node_recommend_api["Recommendation service<br/>[serve.py]"]
  node_dialogue["Preference dialogue<br/>[dialogue.py]"]
  node_filters["Filter query<br/>[filters.py]"]
  node_rank["Job ranking<br/>[rank.py]"]
end

subgraph group_services["Service and export"]
  node_admin["Admin parsing<br/>[admin_parse.py]"]
  node_job_api["Job service<br/>[serve.py]"]
  node_backend_upload["Backend upload"]
  node_resume_api["Resume API<br/>[main.py]"]
  node_resume_routes["Resume routes"]
end

node_article_source["Markdown articles"]
node_llm_jobs{{"LLM service"}}
node_backend{{"Java backend"}}
node_resume_user(("Resume submitter"))
node_deepseek_service{{"DeepSeek API"}}
node_job_seeker(("Job seeker"))

node_article_source -->|"provides articles"| node_pipeline
node_pipeline -->|"runs batch"| node_engine
node_engine -->|"checks keywords"| node_prefilter
node_engine -->|"extracts fields"| node_llm_jobs
node_engine -->|"writes rows"| node_job_csv
node_pipeline -->|"deduplicates"| node_job_csv
node_pipeline -->|"exports CSV"| node_export
node_export -->|"writes JSON"| node_job_json
node_admin -->|"parses fields"| node_llm_jobs
node_backend_upload -.->|"uploads positions"| node_backend
node_resume_user -->|"submits resume"| node_resume_api
node_resume_api -->|"dispatches requests"| node_resume_routes
node_resume_routes -->|"parses resume"| node_resume_parser
node_resume_parser -->|"extracts text"| node_extractors
node_resume_parser -->|"reads images"| node_ocr
node_resume_parser -->|"sends text"| node_deepseek
node_deepseek -->|"requests JSON"| node_deepseek_service
node_resume_parser -->|"normalizes output"| node_resume_json
node_job_seeker -->|"requests matches"| node_recommend_api
node_recommend_api -->|"collects preferences"| node_dialogue
node_dialogue -->|"builds query"| node_filters
node_recommend_api -->|"ranks jobs"| node_rank

click node_pipeline "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/pipeline/run_pipeline.py"
click node_engine "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/engine.py"
click node_prefilter "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/prefilter.py"
click node_export "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/export.py"
click node_admin "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/admin_parse.py"
click node_job_api "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/serve.py"
click node_backend_upload "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/pipeline/upload_to_backend.py"
click node_resume_api "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/main.py"
click node_resume_routes "https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/routers"
click node_resume_parser "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/parser.py"
click node_extractors "https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/extractors"
click node_ocr "https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/ocr"
click node_deepseek "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/llm/deepseek_client.py"
click node_recommend_api "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/serve.py"
click node_dialogue "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/dialogue.py"
click node_filters "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/filters.py"
click node_rank "https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/rank.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_pipeline,node_engine,node_prefilter,node_job_csv,node_export,node_job_json toneBlue
class node_resume_parser,node_extractors,node_ocr,node_deepseek,node_resume_json toneAmber
class node_recommend_api,node_dialogue,node_filters,node_rank,node_deepseek_service toneMint
class node_admin,node_job_api,node_backend_upload,node_resume_api,node_resume_routes toneRose
class node_article_source,node_llm_jobs,node_backend,node_resume_user,node_job_seeker toneIndigo
```

## Components

### Job structuring

- [Batch pipeline](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/pipeline/run_pipeline.py): `pipeline/run_pipeline.py`
- [Extract and deduplicate](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/engine.py): `job_structuring/engine.py`
- [Keyword prefilter](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/prefilter.py): `job_structuring/prefilter.py`
- **Positions CSV**
- [JSON export](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/export.py): `job_structuring/export.py`
- **Positions JSON**

### Resume parsing

- [Resume parser](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/parser.py): `resume_parser/parser.py`
- [File extractors](https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/extractors): `resume_parser/extractors`
- [Image OCR](https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/ocr): `resume_parser/ocr`
- [DeepSeek client](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/llm/deepseek_client.py): `resume_parser/llm/deepseek_client.py`
- **Structured resume**

### Job recommendation

- [Recommendation service](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/serve.py): `job_recommend/serve.py`
- [Preference dialogue](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/dialogue.py): `job_recommend/dialogue.py`
- [Filter query](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/filters.py): `job_recommend/filters.py`
- [Job ranking](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_recommend/rank.py): `job_recommend/rank.py`

### Service and export

- [Admin parsing](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/admin_parse.py): `job_structuring/admin_parse.py`
- [Job service](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/job_structuring/serve.py): `job_structuring/serve.py`
- [Backend upload](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/pipeline/upload_to_backend.py): `pipeline/upload_to_backend.py`
- [Resume API](https://github.com/chenxin1209/fusioncareer-algorithm/blob/main/resume_parser/main.py): `resume_parser/main.py`
- [Resume routes](https://github.com/chenxin1209/fusioncareer-algorithm/tree/main/resume_parser/routers): `resume_parser/routers`

### Other components

- **Markdown articles**
- **LLM service**
- **Java backend**
- **Resume submitter**
- **DeepSeek API**
- **Job seeker**

## Connections

- Markdown articles → Batch pipeline: provides articles
- Batch pipeline → Extract and deduplicate: runs batch
- Extract and deduplicate → Keyword prefilter: checks keywords
- Extract and deduplicate → LLM service: extracts fields
- Extract and deduplicate → Positions CSV: writes rows
- Batch pipeline → Positions CSV: deduplicates
- Batch pipeline → JSON export: exports CSV
- JSON export → Positions JSON: writes JSON
- Admin parsing → LLM service: parses fields
- Backend upload → Java backend: uploads positions
- Resume submitter → Resume API: submits resume
- Resume API → Resume routes: dispatches requests
- Resume routes → Resume parser: parses resume
- Resume parser → File extractors: extracts text
- Resume parser → Image OCR: reads images
- Resume parser → DeepSeek client: sends text
- DeepSeek client → DeepSeek API: requests JSON
- Resume parser → Structured resume: normalizes output
- Job seeker → Recommendation service: requests matches
- Recommendation service → Preference dialogue: collects preferences
- Preference dialogue → Filter query: builds query
- Recommendation service → Job ranking: ranks jobs
