name: resume-parser-hr description: 自动解析、批量筛选和评估 HR 招聘简历,适用于 PDF、Word、文本简历和岗位 JD。用于生成结构化候选人卡片、标准化岗位经历、正式工作/实习/项目分项工龄、JD 匹配排序、销售岗证据强度评估、履历稳定性和 Gap 分、强推荐/待审核/暂不推荐分层、时间线重叠、低可信经历、频繁跳槽等人工复核提示;仅做推荐排序,不做自动淘汰。
HR 简历解析、批量筛选与岗位匹配
目标
把简历解析拆成三个确定性模块:
- 模块 A:简历解析增强,输出可信的结构化候选人卡片。
- 模块 B:推荐分层引擎,按证据强度输出强推荐、待审核、暂不推荐。
- 模块 C:异常校验引擎,兜住履历时间线、低可信经历、岗位跳跃、频繁跳槽、学历缺失等低级误判。
- 模块 D:批量岗位匹配,对简历包和目标 JD 输出 HR 可复核的排序表。
默认场景是销售岗 HR 快筛;其他岗位也可使用通用解析、工龄和异常能力。
快速使用
单份解析
python3 scripts/parse_resume.py path/to/resume.txt --jd path/to/jd.txt --job-title 销售
也可以在代码中调用:
from scripts.parse_resume import parse_resume_text
candidate = parse_resume_text(resume_text, jd_text=jd_text, job_title="电话销售")
主入口会依次完成文本抽取、基本信息解析、经历切分、岗位标准化、经历分类、时长计算、重叠标记、可信度评分、稳定性/GAP 评分、异常校验和推荐分层。
批量筛选
python3 scripts/batch_screen_resumes.py path/to/resumes --jd path/to/jd.txt --job-title 电话销售
批量入口会扫描目录中的 .pdf、.docx、.txt、.md 简历,逐份调用单份解析引擎,并输出推荐排序表。图片类简历(.jpg/.jpeg/.png)先标记为“需 OCR/人工处理”,不强行解析。
可选参数:
--weights path/to/评分维度权重.docx:读取批量排序权重,读取失败时使用默认权重。--output result.md|result.csv|result.json:保存 Markdown、CSV 或 JSON;不传则打印 Markdown 表。
默认批量排序权重仅用于匹配分,不覆盖推荐分层引擎的强判据:JD 相关经验 35%、技能/关键词命中 25%、学历达标 15%、履历稳定性与 Gap 15%、解析置信度 10%。
输出字段
候选人卡片至少包含:
basic_info:姓名、年龄、手机、邮箱、出生日期、languages(语言能力,未提及写“未说明”)。education:学校、学历、专业、起止时间。experiences:经历类型、公司、原岗位、标准岗位、起止日期、月数、可信度分、重叠标记、描述。tenure_summary:full_time_months、internship_months、project_months、freelance_months、pending_months、full_time_years。stability_scores:履历稳定分、Gap 分、稳定性标签、Gap 标签、gap_summary(空窗总体说明)、gap_details(逐段空窗明细)、平均/中位在岗月数、短任职占比、最长 Gap、近 5 年 Gap。resume_recency:简历时效——latest_year_in_text、years_since_latest、has_ongoing、is_stale。anomalies:P0/P1/P2 异常、描述和动作。recommendation:推荐等级、理由、置信度、目标岗位、强/弱/降权细节。parsing_confidence:解析置信度。
单份卡片末尾固定输出一张总结表(见 assets/candidate_card_template.md),至少含推荐等级、综合评分、正式工龄、稳定分、Gap 分及说明、简历时效、语言、解析置信度;缺失项写“未说明”,不要留空。
批量筛选表至少包含:候选人、推荐等级、匹配分、解析置信度、学历、相关经验月数、技能/关键词命中、不匹配项、人工复核原因、50 字以内评语。
核心规则
A. 简历解析增强
- 岗位标准化:用
scripts/standardize_job_title.py合并同义岗位。销售相关岗位要区分电话销售、面销、大客户销售、渠道销售、商务拓展、客服等;岗位相近度用于推荐匹配。 - 经历类型先分类再计算:每段经历必须是正式工作、实习、校园项目、自由职业/创业或待确认。只把正式工作累计为主工龄,实习和项目单独统计。
- 时间按月计算:缺失日期不能默认为至今;时间倒置要进异常。多段重叠经历不得简单累加,主经历按最长正式经历优先,其他标记为
重叠经历。 - 稳定性和 Gap:销售岗必须输出履历稳定分和 Gap 分。短任职、最近两段在岗时长、近 5 年 Gap、最长 Gap 和 Gap 解释会影响推荐。Gap 不能只给分数,必须配
gap_summary与逐段gap_details(前后公司、起止年月、空窗月数、是否有说明)具体说明。 - 语言能力:提取候选人语言及证书/等级(如英语 CET-6、日语 N2),写入
basic_info.languages;未提及写“未说明”。 - 简历时效:取简历文本最新年份,距今 ≥ 约 2 年(在职简历放宽到 ≥ 3 年)时提醒“简历信息可能未更新”(P2),写入
resume_recency。 - 解析置信度:由关键字段完整度和低可信经历比例计算。
B. 推荐分层
推荐不能只看关键词,要看证据强度。
强推荐销售候选人应同时满足:
- 学历达到 JD 最低要求,若 JD 写不限则不拦截。
- 有足够中高可信销售/电销/面销/客户转化类经验,默认至少 6 个月。
- 最近一段经历与销售相关。
- 销售经历不是只有一行岗位名,至少有职责、客户对象、结果指标或可验证时长。
- 履历稳定分 ≥ 60,Gap 分 ≥ 70。
- 无 P0 异常,P1 异常不超过 1 项。
弱判据包括客户沟通经验、简历完整、稳定性尚可、业务结果指标、行业或职能可迁移。
降权因子包括低可信相关经历、相关经历久远、时间线异常、近期频繁跳槽、稳定分低、Gap 分低。
C. 异常校验
异常不等于淘汰,只决定是否人工复核、是否降权、是否增加追问。
- P0 拦截类:同期多段全职、同期 3 段经历、时间倒置、近期极频繁跳槽。
- P1 降权类:低可信经历、全职和实习重叠、岗位跳跃、学历层级缺失、近期跳槽偏高。
- P2 提示类:时间缺失、项目重叠、学校缺失、跨职能变化、轻度频繁变动、简历信息可能未更新(最新信息距今约 2 年以上)、候选人自述年龄与履历时间线明显不一致。
D. 业务红线
- 不做自动淘汰,只输出推荐排序、匹配证据和人工复核提示。
- 不将性别、年龄、籍贯、婚育、民族、照片、院校歧视等敏感属性纳入评分或排序。
- 年龄只可在候选人主动提供且与履历时间线明显矛盾时作为人工复核提示,默认不参与匹配分和推荐分层。
- 不主动联系候选人,不代发面试或拒绝通知。
资源导航
- 解析细则:
references/parsing_guidelines.md - 推荐逻辑:
references/recommendation_logic.md - 异常和稳定性规则:
references/validation_rules.md - 批量筛选工作流:
references/batch_screening_workflow.md - 合规规则:
references/compliance_policy.md - 岗位词典说明:
references/job_title_synonyms.md - 候选人展示模板:
assets/candidate_card_template.md - 批量筛选表模板:
assets/screening_table_template.md - 输出样例:
assets/output_example.json
验收指标
- 解析字段准确率:姓名、联系方式、教育、经历起止时间、岗位字段。
- 工龄计算正确率:正式工作、实习、项目分项月数,重叠不重复累计。
- 异常命中率:时间重叠、低可信、频繁跳槽、学历缺失、合规复核提示。
- 人工复核纠正率:P0/P1 是否真正帮助 HR 定位争议点。
- 强推荐命中率和误强推率:重点监控“一行销售经历误强推”。
- 批量排序可解释性:每个候选人的命中点、不匹配项、复核原因都能追溯到候选人卡片或 JD。