核心系统 — 将 JDParser 解析的 JD 结构化数据清洗、建模后导入 Neo4j 图数据库,提供图谱查询接口。
JDGraphBuilder/
├── src/
│ ├── config.py # 全局配置
│ ├── cleaner/ # 数据清洗模块
│ │ ├── field_cleaner.py # 字段级清洗
│ │ ├── skill_cleaner.py # 技能去重与补全
│ │ ├── validator.py # 数据校验
│ │ └── pipeline.py # 清洗流水线
│ ├── modeler/ # 图建模模块
│ │ ├── schema.py # Schema 常量
│ │ ├── node_builder.py # 节点提取与去重
│ │ ├── relation_builder.py # 关系构建
│ │ └── co_occurrence.py # 技能共现计算
│ ├── loader/ # Neo4j 入库模块
│ │ ├── neo4j_client.py # 连接管理
│ │ ├── schema_initializer.py # Schema 初始化
│ │ └── batch_importer.py # 批量导入
│ ├── query/ # 查询模块
│ │ ├── job_query.py # 职位查询
│ │ ├── skill_query.py # 技能查询
│ │ ├── path_query.py # 路径分析
│ │ └── stats_query.py # 统计查询
│ └── cli/ # 命令行入口
│ ├── clean.py
│ ├── build.py
│ ├── query.py
│ └── stats.py
├── data/
│ ├── input/ # JDParser 输出的 JSON
│ ├── cleaned/ # 清洗后的 JSON
│ └── mappings/ # 字段映射表
├── scripts/ # Cypher 脚本
├── tests/ # 测试
└── docs/ # 文档
# 需要 uv (https://docs.astral.sh/uv/)
cd JDGraphBuilder
uv sync要求 Neo4j 5.0 及以上版本(本项目使用新版 CREATE FULLTEXT INDEX ... ON EACH 语法,Neo4j 4.x 不兼容)。
Neo4j — 使用 AuraDB 免费版或本地安装并启动。
必须复制 .env.example 为 .env 并填入真实连接信息,否则启动会报错:
cp .env.example .env
# 编辑 .env
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=<your-password>
NEO4J_DATABASE=neo4j可选参数:NEO4J_MAX_RETRIES / NEO4J_RETRY_BACKOFF / NEO4J_CONN_TIMEOUT / QUERY_CACHE_TTL(详见 .env.example)。
⚠️ HTTP 接口已迁移:自本版本起,JDGraphBuilder 不再提供 HTTP 服务(原serve.py已删除)。 可视化 API(/api/graph)与 AI 问答 API(/api/qa)统一由同级仓库../JDGraphMono的 FastAPI 后端对外暴露。 Builder 本仓库专注于:数据清洗 → 图建模 → 入库 → 库内查询(作为库 + CLI 被 Mono 复用)。
# 清洗 + 建模 + 导入 Neo4j(全量模式,默认)
uv run python -m src.cli.build --input data/input/_all.json
# 重置数据库后重新导入(full 模式下)
uv run python -m src.cli.build --input data/input/_all.json --reset
# 增量模式:只更新输入中出现的 source_file 对应的 Job 及其关系
uv run python -m src.cli.build --input data/input/_all.json --mode incremental
# 只执行清洗和建模(不连接 Neo4j)
uv run python -m src.cli.build --input data/input/_all.json --skip-importuv run python -m src.cli.clean --input data/input/_all.json --output data/cleaned/# 按技能匹配职位
uv run python -m src.cli.query --skill Python Django
# 按城市筛选
uv run python -m src.cli.query --location 北京
# 技能共现分析
uv run python -m src.cli.query --related Java
# 技能差距分析
uv run python -m src.cli.query --gap Python Django --target 后端开发
# 图谱统计
uv run python -m src.cli.statsuv run pytest详见 docs/schema.md。
5 种节点类型:Job、Skill、Location、Education、Category
7 种关系类型:REQUIRES_SKILL、PREFERS_SKILL、REQUIRES_EDUCATION、LOCATED_IN、BELONGS_TO、PARENT_OF、CO_OCCURS_WITH
- Python ≥ 3.12
- Neo4j ≥ 5.0 (Community Edition)
- JDParser — 上游项目,提供解析后的 JD 数据