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

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

 

第一步:需要导入的包

# encoding: utf-8
import os, sys
import docx
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator

第二步:读文件

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

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


def pdf_reader(file):fp = open(file, "rb")# 创建一个与文档相关联的解释器parser = PDFParser(fp)# PDF文档对象doc = PDFDocument(parser)# 链接解释器和文档对象parser.set_document(doc)# doc.set_paeser(parser)# 初始化文档# doc.initialize("")# 创建PDF资源管理器resource = PDFResourceManager()# 参数分析器laparam = LAParams()# 创建一个聚合器device = PDFPageAggregator(resource, laparams=laparam)# 创建PDF页面解释器interpreter = PDFPageInterpreter(resource, device)# 使用文档对象得到页面集合res = ''for page in PDFPage.create_pages(doc):# 使用页面解释器来读取interpreter.process_page(page)# 使用聚合器来获取内容layout = device.get_result()for out in layout:if hasattr(out, "get_text"):res = res + '' + out.get_text()return res

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

def word_reader(file):try:# docx 直接读if 'docx' in file:res = ''f = docx.Document(file)for para in f.paragraphs:res = res + '\n' +para.textelse:# 先转格式doc>docxos.system("textutil -convert docx '%s'"%file)word_reader(file+'x')res = ''f = docx.Document(file+'x')for para in f.paragraphs:res = res + '\n' +para.textreturn resexcept:# print(file, 'read failed')return ''

完整代码

# encoding: utf-8
import os, sys
import docx
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregatordef get_files(path):res = []for i in os.listdir(path):# 去掉临时文件if os.path.isfile(path+i) and '~$' not in i and '.DS' not in i:# 去重 1.doc 和 1.docxif (path+i).split(".")[0] not in str(res):res.append(path+i)return resdef pdf_reader(file):fp = open(file, "rb")# 创建一个与文档相关联的解释器parser = PDFParser(fp)# PDF文档对象doc = PDFDocument(parser)# 链接解释器和文档对象parser.set_document(doc)# doc.set_paeser(parser)# 初始化文档# doc.initialize("")# 创建PDF资源管理器resource = PDFResourceManager()# 参数分析器laparam = LAParams()# 创建一个聚合器device = PDFPageAggregator(resource, laparams=laparam)# 创建PDF页面解释器interpreter = PDFPageInterpreter(resource, device)# 使用文档对象得到页面集合res = ''for page in PDFPage.create_pages(doc):# 使用页面解释器来读取interpreter.process_page(page)# 使用聚合器来获取内容layout = device.get_result()for out in layout:if hasattr(out, "get_text"):res = res + '' + out.get_text()return resdef word_reader(file):try:# docx 直接读if 'docx' in file:res = ''f = docx.Document(file)for para in f.paragraphs:res = res + '\n' +para.textelse:# 先转格式doc>docxos.system("textutil -convert docx '%s'"%file)word_reader(file+'x')res = ''f = docx.Document(file+'x')for para in f.paragraphs:res = res + '\n' +para.textreturn resexcept:# print(file, 'read failed')return ''def file_reader(file):if 'doc' in file:res = word_reader(file)elif 'pdf' in file:res = pdf_reader(file)else:res = '不是doc,也不是pdf,文件格式不支持!'return resif __name__ == '__main__':path = "/Users/XXXXX/Mine/XXXXX/"abs_files = get_files(path)print(abs_files)for file in abs_files:file_text = file_reader(file)print(file_text)

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国韩国科学家纷纷开发出电子机器人“皮肤”,据称具有比人类更好的触觉...

来源:机器人创新生态摘要:我们已经听说过柔性电子“皮肤”可以让机器人或假肢具有类似人类的触觉。然而,现在德克萨斯大学阿灵顿分校的科学家们声称他们开发的“皮肤”比具有比人类更好的触觉敏感。由Zeynep ?elik-Butler教授领导的团队创建…

解决FileUpload控件上传大文件被拒问题时

在使用Asp.Net自带的服务器端控件Fileupload上传文件时&#xff0c;如果上传的文件比较大&#xff0c;可能会遇到服务器的拒绝服务攻击&#xff0c;此时可以通过在<system.web>中添加&#xff1a; <httpRuntime maxRequestLength"2097151" executionTimeout…

MySQL流浪记(三)—— Linux安装MySQL数据库5.7.30(亲测有效3分钟即可)

下载 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压 tar -xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gztar命令集合&#xff08;详解&#xff09; 将安装包进行移动并重命名&#xff08;需要在root权限下进行&#xff09;。 m…

爬虫神器Requests: 让 HTTP 服务人类

Requests 唯一的一个非转基因的 Python HTTP 库&#xff0c;人类可以安全享用。 警告&#xff1a;非专业使用其他 HTTP 库会导致危险的副作用&#xff0c;包括&#xff1a;安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。 loook&#xff0c;这就是…

ANSI/UTF-8/UCS2(UTF-16),以及回车换行

最近遇到一个linux 平台上invisible character (0x1d)引起的数据装载失败问题&#xff0c;正好借此机会整理一下字符编码的相关知识。 回车/换行&#xff1a; 顾名思义&#xff0c;回车和换行是两个不同的控制字符: -回车(Carriage Return)即\r&#xff0c;ascii码13(0x0d)&am…

自动驾驶的大脑——芯片简介

来源&#xff1a;智车科技汽车电子发展初期以分布式ECU架构为主流&#xff0c;芯片与传感器一一对应&#xff0c;后来&#xff0c;中心化架构DCU、MDC逐步成为了发展趋势&#xff1b;随着汽车辅助驾驶功能渗透率越来越高&#xff0c;传统CPU算力不足过去&#xff0c;在自动驾驶…

MySQL流浪记(四)—— DDL和DML区别与介绍

DDL与DML的区别 DDL&#xff1a;数据定义语言&#xff0c;对于数据库、表、图、索引等进行操作。 具体操作有&#xff1a;CREATE&#xff08;创建&#xff09;、ALTER&#xff08;修改&#xff09;、DROP/TRUNCATE&#xff08;删除&#xff09; DML&#xff1a;数据操纵语言&am…

数据仓库面试题集锦(附答案和数仓知识体系)

【数据仓库系列文章 - 传送门】 一篇文章搞懂数据仓库&#xff1a;三种事实表&#xff08;设计原则&#xff0c;设计方法&#xff09;一篇文章搞懂数据仓库&#xff1a;三种事实表&#xff08;设计原则&#xff0c;设计方法、对比&#xff09;_不吃西红柿-CSDN博客_事实表三种…

pidgin-qq可以使用QQ2012协议了

前几个月前还用过pidgin-qq登录过QQ&#xff0c;当时用的还是2010协议。可不久就发现2010协议已经变得不可用了&#xff0c;之后也尝试过各种webqq协议的方案&#xff0c;什么gtkqq,pidgin-lwqq,可能是webqq协议功能不完善吧&#xff0c;用起来总觉得跟我想要的qq功能相差太远。…

2018全球科技中心报告

来源&#xff1a;CB Insights、数据局摘要&#xff1a;CB Insights 近日发布的《全球科技中心报告》&#xff08; Global Tech Hubs report&#xff09;在全球范围一共遴选了25座城市作为「全球科技中心」&#xff0c;其中&#xff0c;中国仅有北京和上海入选&#xff0c;而热门…

还在为520礼物发愁吗?教你用python撩女朋友

用python撩女朋友&#xff0c;你要的温暖都在生活的细节中。学会制造惊喜&#xff0c;一起牵手走向更加美好的生活。 其实&#xff0c;大多数人的爱情都是有事没事的瞎扯&#xff0c;可对于我们该怎样瞎扯来表达自己的心意却又都摸不着头脑。 所以&#xff0c;情侣之间要学会一…

键盘上的反引号怎么打

今天在学习数据库的时候突然要用到反引号&#xff0c;反引号&#xff1f;第一次听说反引号这个符号 几经周折&#xff0c;找到这个反引号&#xff0c;分享给大家。 在英文状态下&#xff0c;数字1的左边&#xff0c;Esc的下面&#xff0c;也就是中文的省略号。

(转)用 Asterisk 搭建自己的免费 VoIP 服务器

原文链接&#xff1a;http://www.yaoblog.info/?p5021 1. 这里以 Debian 为例子&#xff0c;安装 Asterisk apt-get update apt-get install asterisk 2. 预设置 Asterisk&#xff0c;修改 sip.conf 和 extensions.conf 文件&#xff0c;是为了创建两个可供测试的 SIP 账号 na…

解密美国五角大楼人工智能中心

选自 I thebulletin 编译 I 网易智能 参与 I Rosie2016年10月&#xff0c;新成立的国防创新委员会首次提出了一系列建议&#xff08;该委员会是美国国防部高级领导的顾问机构&#xff0c;成员包括来自私营部门、学术界和非营利组织的代表&#xff09;。其中一项建议是&#xff…

一篇文章搞定一个大数据组件:kudu知识点全集

目录 1、kudu的定位 2、kudu基本概念 3、存储架构 3.1 储存架构&#xff1a;Tablet 3.2 储存架构&#xff1a;RowSets 3.3 储存架构&#xff1a;DiskRowSets 4、kudu工作原理 4.1 Compaction 4.2 Tablet切分规则 4.3 kudu写过程&#xff1a;insert 4.4 kudu写过程&a…

MySQL流浪记(五)—— MySQL中常见函数的使用(笔记)

MySQL函数是MySQL数据库提供的内部函数。这些内部函数可以帮助用户更加方便的处理表中的数据。本文将简单的介绍MySQL中一些常见的函数&#xff0c;方便之后查阅。总结了SQL语句中常见的五种函数&#xff0c;分别是&#xff1a; 字符函数&#xff1a;对字符串、二进制数据或表…

区分Activity的四种加载模式-activity

转载&#xff1a;http://marshal.easymorse.com/archives/2950 在多Activity开发中&#xff0c;有可能是自己应用之间的Activity跳转&#xff0c;或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例&#xff0c;而不是产生大量重复的Activity。 这需要为…

Nature:AI为什么总是歧视重重?

来源&#xff1a;网络大数据摘要&#xff1a;当使用谷歌翻译将西班牙语的新闻翻译为英语时&#xff0c;涉及到女性的短语通常都会翻译为“他说”或“他写道”。当使用谷歌翻译将西班牙语的新闻翻译为英语时&#xff0c;涉及到女性的短语通常都会翻译为“他说”或“他写道”。常…

※【python自学】7个Python生态系统核心库,你值得拥有

无论你是想快速入手Python&#xff0c;还是想成为数据分析大神或者机器学习大佬&#xff0c;亦或者对Python代码进行优化&#xff0c;本文的python库都能为你提供一些帮助。 一 概述 Python生态系统的一些核心基础数据分析库&#xff1a; NumPy&#xff1a;支持大量的维度数…

Eclipse编写Java程序

Eclipse的Java开发工具(JDT),允许用户使用它的环境进行编辑、调试及运行Java程序。1. Java运行环境设置 指定JRE的版本。Eclipse设置默认的运行环境的JRE设置成当前配置&#xff0c;用户可以修改多个JRE版本的运行环境&#xff0c;并选择符合其需求的运行环境。[窗口 Window]…