企业 简历 OCR

Odoo 企业版简历 OCR 为什么不是“上传附件自动填候选人”:extract 状态、validation 字段与主附件回写讲透

基于 hr_recruitment_extract 源码,讲清简历 OCR 何时允许触发、回填哪些字段、怎样处理主附件,以及自动发送 digitization 的门槛。

人力资源 企业
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 3 阅读

“上传 PDF,系统自己填候选人”听起来很美,但企业版的 hr_recruitment_extract 并没有这么鲁莽。enterprise/hr_recruitment_extract/models/hr_applicant.py 显示,这个模块更像一套受控 digitization 流程:先判断候选人是否处在可抽取阶段,再把主附件送去 OCR,最后只回填一组明确校验过的字段。

一、不是任何阶段都允许抽取

_compute_is_in_extractable_state() 会按职位查默认招聘阶段,只有 applicant 还停留在“首个有效阶段”时,is_in_extractable_state 才为真。源码甚至给了明确错误文案:You cannot send a CV for an applicant who's not in first stage!

这一步是在防止两个问题:

  1. 候选人已经走到后面阶段,HR 又上传新简历把核心字段覆盖;
  2. 一条申请被反复 OCR,流程证据和当前信息口径混乱。

换句话说,OCR 被设计成“初筛入口增强”,不是“任意阶段的字段覆盖工具”。

二、回填字段非常克制,只处理最基础的识别项

_get_validation_fields() 只返回 emailnamephone_fill_document_with_results() 也只优先写入 partner_nameemail_frompartner_phone;如果装了 hr_recruitment_skills,再额外从全文里匹配技能词。

这个范围看起来保守,实际上非常合理。简历 OCR 的准确率最能支撑的,就是基础识别和技能提示;如果一上来就试图自动填住址、学历、职位偏好,误识别成本会比省下的录入时间更高。

三、自动送 OCR 是绑定在“主附件设置”上的

_message_set_main_attachment_id() 在完成父类逻辑后会调用 _autosend_for_digitization()。而 _autosend_for_digitization() 又取决于公司级配置 recruitment_extract_show_ocr_option_selection 是否设为 auto_send

这说明企业版不是“看见附件就 OCR”,而是“当附件被确认为主简历附件,而且公司允许自动送检时,才进入 digitization 流程”。这条边界很重要,因为招聘对话里经常会有补充材料、作品集、证书截图,它们并不都应该拿去当简历解析对象。

四、OCR 结果不是数据库真相,只是候选资料的第一层草稿

_contact_iap_extract() 会把版本号和 IAP token 带去远端 extract.api.odoo.com,说明 OCR 本身是一个外部能力调用;_get_validation()_get_validation_fields() 则告诉我们,系统知道它需要验证,并非盲信结果。

对业务来说,这意味着 OCR 最适合做三件事:

  • 帮 HR 在海量投递里减少手工录入;
  • 帮初筛阶段快速拿到联系方式和姓名;
  • 帮技能模块做“建议”,而不是替人做最终判断。

五、实战注意事项

  1. 把 OCR 放在首阶段:越往后阶段越不适合自动覆盖候选基础信息。
  2. 区分主附件与普通附件:只有真正的简历附件才应该触发 OCR。
  3. 把 OCR 结果当建议,不当真理:特别是手机号、邮箱格式异常时,要让 HR 复核。
  4. 技能提取要看词库质量:源码是从全文 token 里匹配 hr.skill,词库质量会直接决定结果质量。

新手误区

  • 误以为任何阶段都能重新 OCR。
  • 误以为 OCR 结果可以全量覆盖现有候选资料。
  • 误以为所有附件都适合送 digitization。
  • 误以为技能识别是语义理解,实际上这里更接近关键词匹配。

主要源码参考

  • enterprise/hr_recruitment_extract/models/hr_applicant.py

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。