㊙️【教你用python挣零花钱】自动化简历内推,学弟直呼牛逼!!

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

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

二 开始解析

2.1 获取简历文件

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

2.2 解析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

2.3 解析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 ''

2.4 完整代码

# 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/494739.shtml

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

相关文章

MySQL流浪记(六)—— CONCAT到GROUP_CONCAT的沿途风景(图文详解)

本文中的案例如下,可以自己测试一下,有问题可以留言哦。 CREATE TABLE staff (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),job_id INT, joindate DATE,salary DECIMAL(7,2) ); INSERT INTO staff(name,job_id,joindate,salary) VALUES (孙悟…

收藏!最新大数据产业地图 十大生态金矿百大公司起底【附下载】

来源:智东西人工智能的崛起,加速了大数据技术的应用落地。据中国大数据产业生态联盟调查显示,国内大数据企业年营业额4000万人民币以上的已经超过40%,这意味着,这些企业已经度过生存期,开始进入应用落地和品…

【一鸣离职,左晖去世】互联网老兵给大家的三个建议

2021年5月20日,除了娱乐圈的分分合合,互联网圈发生了两件大事: 1、字节跳动创始人张一鸣发布内部全员信,宣布卸任CEO一职。 2、贝壳发布讣告,公司创始人兼董事长左晖先生因疾病意外恶化于2021年5月20日…

MySQL流浪记(七)—— MySQL删除表数据

删除全表数据: delete from [表名]:会生成日志   truncate table [表名]:不会生成日志 删除表中部分数据 delete from [表名] where … :删除表中的部分数据只能使用delete where 不能使用truncate。 区别 从效果上看&#x…

Android布局

1. xml: 静态、较确定; 2. view:runtime动态改变; 3. Adapter:把datasource绑定到AdapterView的子类;如:从array获取数据,convert每项data为一个可以加到AdapterView layout 中的view&#xff1…

科大讯飞:让世界听见AI的声音

来源:华为怀揣着“让世界聆听我们的声音”的梦想,科大讯飞依托世界领先的核心技术,引领智能浪潮,服务亿万用户,从中国语音产业的拓荒者一跃成为世界人工智能产业的领军者,而最初科大讯飞把语音作为切入点却…

Linux中的chmod详解

chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令。Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。只有…

hdu 3999The order of a Tree

题目地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3999 本题为简单二叉排序树&#xff0c;先按排序树创建树&#xff0c;然后先序遍历二叉树&#xff0c;输出的时候最后一个数字后面没有空格。 数组实现&#xff1a; #include<stdio.h> #include<strin…

【程序员薪资】2021年04月新鲜出炉,看看你拖后腿了吗?

程序员一直都是一个备受人们关注的群体。据IDC统计&#xff0c;全球约有1850万名程序员&#xff08;数据还在持续增长&#xff09;&#xff0c;中国占10%左右。随着近年全国互联网创业热潮的兴起&#xff0c;“互联网”、“云计算”以及“智能硬件”等领域发展迅速&#xff0c;…

CICC科普栏目|神经网络浅讲:从神经元到深度学习

图1 人脑神经网络来源&#xff1a; 计算机的潜意识摘要&#xff1a;神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的…

linux安装Redis(超详细,只要三分钟,每一步命令都有命令截图及运行截图)

Redis redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及取…

鬼才!用Python计算圆周率 π

目录 一、圆周率的历史发展 1、中国 2、印度 3、欧洲 二、用python计算圆周率 A货&#xff1a;什么&#xff01;你不会背圆周率&#xff08;鄙夷的眼神&#xff09; 3.1415926535 8979323846 26433... 桥哥&#xff1a;我会算呀 &#xff01;&#xff01;&#xff01; 一…

一个简单WCF项目的建立 by wsz

由于搬砖的需要&#xff0c;不得不学一点与WCF有关的东西。具体是因为前几周在64位环境下写的一个dll不能被集成到合作伙伴的32位工程中&#xff0c;但是要修改文件实在是划不来&#xff0c;一个压缩后600M的文件搬来搬去的也是让人蛋碎。因此想到了WCF。这样只要提供一个servi…

大数据常见问题:数据倾斜

offer收割系列介绍&#xff1a; 1、分享桥哥本人或小伙伴在面试大厂时遇到的真题&#xff0c;并给出参考答案&#xff01;&#xff01;如果能帮到大家&#xff0c;点赞、收藏、评论是对我最大的支持&#xff01;&#xff01; 2、涉及岗位&#xff1a;主要为大数据开发、数据仓…

一图看懂新一代人工智能知识体系大全

来源&#xff1a;财经头条摘要&#xff1a;人工智能的发展离不开基础支持层和技术层&#xff0c;基础支持层包括大数据、计算力和算法&#xff1b;技术层包括计算机视觉、语音识别和自然语言处理。人工智能的技术本质是什么&#xff0c;本文会详细分析。人工智能的发展离不开基…

Redis是单线程为什么还那么快?

Redis为什么还那么快 基于内存   Redis完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;Redis将数据存储在内存中&#xff0c;读写数据的时候不会受到硬盘I/O速度的限制&#xff08;内存速度为什么比硬盘快&#xff1f;&#xff09;&#xff0c;类似于Hash…

iPhone是否越狱的检测方法

今天项目中要用到检查iPhone是否越狱的方法。 Umeng统计的Mobclick.h里面已经包含了越狱检测的代码&#xff0c;可以直接使用 /*方法名:* isJailbroken*介绍:* 类方法&#xff0c;判断设备是否越狱&#xff0c;判断方法根据 apt和Cydia.app的path来判断*参数说明…

阿里、字节offer收割系列:数据仓库岗(面试真题,建议收藏)

【offer收割系列介绍】 1、分享桥哥本人或小伙伴在面试大厂时遇到的真题&#xff0c;并给出参考答案&#xff01;&#xff01; 2、涉及岗位&#xff1a;主要为大数据开发、数据仓库&#xff08;桥哥干过的&#xff09;&#xff0c;其它岗位也可参考 3、涵盖技术&#xff1a;mys…

MIT新开发的 AI 模型有望改进恶性脑瘤治疗

来源&#xff1a;人工智能和大数据美国研究人员新近开发出一种人工智能模型&#xff0c;能够为胶质母细胞瘤患者设计出最小剂量给药方案&#xff0c;在缩小肿瘤的同时减少药物带来的毒副作用&#xff0c;改进患者生活质量。胶质母细胞瘤是一种常见的恶性脑瘤&#xff0c;常见疗…

git远程分支修改名字

本地分支重命名(还没有推送到远程) git branch -m oldName newName远程分支重命名 重命名远程分支对应的本地分支 git branch -m oldName newName删除远程分支 git push --delete origin oldName上传新命名的本地分支 git push origin newName把修改后的本地分支与远程分支关联…