一个薪资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.docx
-
if (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.text
-
else:
-
# 先转格式doc>docx
-
os.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.text
-
return res
-
except:
-
# 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 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.docx
-
if (path+i).split(".")[0] not in str(res):
-
res.append(path+i)
-
return 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
-
-
-
def word_reader(file):
-
try:
-
# docx 直接读
-
if 'docx' in file:
-
res = ''
-
f = docx.Document(file)
-
for para in f.paragraphs:
-
res = res + '\n' +para.text
-
else:
-
# 先转格式doc>docx
-
os.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.text
-
return res
-
except:
-
# 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 res
-
-
-
if __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)
本期实现:任何格式的简历,解析成文本,便于后续筛选优质简历。
下期揭晓:简历过滤,包括学历,稳定性,年龄,工龄与职级匹配度等,全自动化内推代码。
文章来源: notomato.blog.csdn.net,作者:kissme丶,版权归原作者所有,如需转载,请联系作者。
原文链接:notomato.blog.csdn.net/article/details/115457881
- 点赞
- 收藏
- 关注作者
评论(0)