一个薪资double的捷径:自动化简历内推工具

举报
不吃西红柿 发表于 2021/07/15 01:46:26 2021/07/15
【摘要】 最近,小编在处理简历时,发现大量简历需要一个个打开文件,复制姓名、邮箱、电话号码、学历等关键信息,效率特别低且部分文件无法直接复制。于是,小编便写了文件阅读工具的脚本,支持文件格式有:doc,docx,pdf。 通过脚本自动匹配各种简历的文件格式,并解析出用户名、邮箱、电话号码、学历等关键信息。然后调用企业微信,使用正则过滤简历,使用request一键内推到企微。 ps....

最近,小编在处理简历时,发现大量简历需要一个个打开文件,复制姓名、邮箱、电话号码、学历等关键信息,效率特别低且部分文件无法直接复制。于是,小编便写了文件阅读工具的脚本,支持文件格式有:doc,docx,pdf

通过脚本自动匹配各种简历的文件格式,并解析出用户名、邮箱、电话号码、学历等关键信息。然后调用企业微信,使用正则过滤简历,使用request一键内推到企微。

ps. 上月战绩,内推400+人,内推成功8人,入职5人,收米8000*2+5000*3=31000。

{'感谢您的投递': 331, '简历处理中': 19, '简历初筛': 5, '本轮通过': 6, 'Offer已发放': 1, '进行中': 2, '拒绝Offer': 3, '接受Offer': 5} 

 

脚本功能:提取简历文本

输入:要解析的文件路径

输出:解析的内容,包括不限于姓名、邮箱、电话号码、学历等信息。

环境:python 3.6 、mac(doc转docx是mac写法,windows更简单,导入win32的包即可)

 

第一步:需要导入的包


  
  1. # encoding: utf-8
  2. import os, sys
  3. import docx
  4. from pdfminer.pdfparser import PDFParser
  5. from pdfminer.pdfdocument import PDFDocument
  6. from pdfminer.pdfpage import PDFPage
  7. from pdfminer.pdfinterp import PDFResourceManager
  8. from pdfminer.pdfinterp import PDFPageInterpreter
  9. from pdfminer.layout import LAParams
  10. from pdfminer.converter import PDFPageAggregator

第二步:读文件


  
  1. def get_files(path):
  2. res = []
  3. for i in os.listdir(path):
  4. # 去掉临时文件
  5. if os.path.isfile(path+i) and '~$' not in i and '.DS' not in i:
  6. # 去重 1.doc 和 1.docx
  7. if (path+i).split(".")[0] not in str(res):
  8. res.append(path+i)
  9. return res

第三步:读PDF,得到res文本后,可以通过正则,匹配出邮箱,手机号,学历等


  
  1. def pdf_reader(file):
  2. fp = open(file, "rb")
  3. # 创建一个与文档相关联的解释器
  4. parser = PDFParser(fp)
  5. # PDF文档对象
  6. doc = PDFDocument(parser)
  7. # 链接解释器和文档对象
  8. parser.set_document(doc)
  9. # doc.set_paeser(parser)
  10. # 初始化文档
  11. # doc.initialize("")
  12. # 创建PDF资源管理器
  13. resource = PDFResourceManager()
  14. # 参数分析器
  15. laparam = LAParams()
  16. # 创建一个聚合器
  17. device = PDFPageAggregator(resource, laparams=laparam)
  18. # 创建PDF页面解释器
  19. interpreter = PDFPageInterpreter(resource, device)
  20. # 使用文档对象得到页面集合
  21. res = ''
  22. for page in PDFPage.create_pages(doc):
  23. # 使用页面解释器来读取
  24. interpreter.process_page(page)
  25. # 使用聚合器来获取内容
  26. layout = device.get_result()
  27. for out in layout:
  28. if hasattr(out, "get_text"):
  29. res = res + '' + out.get_text()
  30. return res

第四步:读word格式文件。待优化:word中如果包含execl,暂时读不出来。


  
  1. def word_reader(file):
  2. try:
  3. # docx 直接读
  4. if 'docx' in file:
  5. res = ''
  6. f = docx.Document(file)
  7. for para in f.paragraphs:
  8. res = res + '\n' +para.text
  9. else:
  10. # 先转格式doc>docx
  11. os.system("textutil -convert docx '%s'"%file)
  12. word_reader(file+'x')
  13. res = ''
  14. f = docx.Document(file+'x')
  15. for para in f.paragraphs:
  16. res = res + '\n' +para.text
  17. return res
  18. except:
  19. # print(file, 'read failed')
  20. return ''

完整代码


  
  1. # encoding: utf-8
  2. import os, sys
  3. import docx
  4. from pdfminer.pdfparser import PDFParser
  5. from pdfminer.pdfdocument import PDFDocument
  6. from pdfminer.pdfpage import PDFPage
  7. from pdfminer.pdfinterp import PDFResourceManager
  8. from pdfminer.pdfinterp import PDFPageInterpreter
  9. from pdfminer.layout import LAParams
  10. from pdfminer.converter import PDFPageAggregator
  11. def get_files(path):
  12. res = []
  13. for i in os.listdir(path):
  14. # 去掉临时文件
  15. if os.path.isfile(path+i) and '~$' not in i and '.DS' not in i:
  16. # 去重 1.doc 和 1.docx
  17. if (path+i).split(".")[0] not in str(res):
  18. res.append(path+i)
  19. return res
  20. def pdf_reader(file):
  21. fp = open(file, "rb")
  22. # 创建一个与文档相关联的解释器
  23. parser = PDFParser(fp)
  24. # PDF文档对象
  25. doc = PDFDocument(parser)
  26. # 链接解释器和文档对象
  27. parser.set_document(doc)
  28. # doc.set_paeser(parser)
  29. # 初始化文档
  30. # doc.initialize("")
  31. # 创建PDF资源管理器
  32. resource = PDFResourceManager()
  33. # 参数分析器
  34. laparam = LAParams()
  35. # 创建一个聚合器
  36. device = PDFPageAggregator(resource, laparams=laparam)
  37. # 创建PDF页面解释器
  38. interpreter = PDFPageInterpreter(resource, device)
  39. # 使用文档对象得到页面集合
  40. res = ''
  41. for page in PDFPage.create_pages(doc):
  42. # 使用页面解释器来读取
  43. interpreter.process_page(page)
  44. # 使用聚合器来获取内容
  45. layout = device.get_result()
  46. for out in layout:
  47. if hasattr(out, "get_text"):
  48. res = res + '' + out.get_text()
  49. return res
  50. def word_reader(file):
  51. try:
  52. # docx 直接读
  53. if 'docx' in file:
  54. res = ''
  55. f = docx.Document(file)
  56. for para in f.paragraphs:
  57. res = res + '\n' +para.text
  58. else:
  59. # 先转格式doc>docx
  60. os.system("textutil -convert docx '%s'"%file)
  61. word_reader(file+'x')
  62. res = ''
  63. f = docx.Document(file+'x')
  64. for para in f.paragraphs:
  65. res = res + '\n' +para.text
  66. return res
  67. except:
  68. # print(file, 'read failed')
  69. return ''
  70. def file_reader(file):
  71. if 'doc' in file:
  72. res = word_reader(file)
  73. elif 'pdf' in file:
  74. res = pdf_reader(file)
  75. else:
  76. res = '不是doc,也不是pdf,文件格式不支持!'
  77. return res
  78. if __name__ == '__main__':
  79. path = "/Users/XXXXX/Mine/XXXXX/"
  80. abs_files = get_files(path)
  81. print(abs_files)
  82. for file in abs_files:
  83. file_text = file_reader(file)
  84. print(file_text)

本期实现:任何格式的简历,解析成文本,便于后续筛选优质简历。

下期揭晓:简历过滤,包括学历,稳定性,年龄,工龄与职级匹配度等,全自动化内推代码。

 

文章来源: notomato.blog.csdn.net,作者:kissme丶,版权归原作者所有,如需转载,请联系作者。

原文链接:notomato.blog.csdn.net/article/details/115457881

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。