service/parser.js
从 JD 原始文本提取结构化字段,纯函数无副作用(Sprint 4)。
service/parser.js
层级:service/parser(依赖 config)
Sprint:S4
主函数
parseJD(rawText)
输入:JD 原始文本(任意格式)
输出:ParsedJD 结构体
纯函数,无网络请求、无副作用,同步执行。
字段提取策略
title — 职位名称
按优先级尝试以下正则:
职位/position/role/title: [...]招聘/hiring [...]- 第一行包含
engineer/developer/architect/manager的行 - Markdown 一级标题
# [...] - 兜底:取第一非空行
company — 公司名
requiredSkills vs niceSkills
段落定位策略:
若找不到"必须"段落,则全文扫描(所有识别到的技能都归为 required)。
若找不到"加分"段落,则 niceSkills = []。
minYears — 最低年限
扫描 6 条正则(中英文):
匹配不到则返回 -1(表示未提及)。
eduLevel — 学历要求
边界情况
| 情况 | 处理方式 |
|---|---|
| JD 无明确技能词 | requiredSkills = [],评分时给 70 分基准分 |
| JD 无年限要求 | minYears = -1,按实际年限给分 |
| JD 无学历要求 | eduLevel = 'any',满分 90 |
| 职位名过长 | 截断到 80 字符 |
| 公司名过长 | 截断到 60 字符 |