最近有朋友进入公司实习,抱怨工作太累。她的工作内容是把很多人的工作简历信息,按照条目输入电脑的 excel 表里,简单,但是量大。正好,我们昨天才介绍了 python识别图中的文字,所以决定做一个自动工作帮帮她。
python实战项目,识别简历,并且填入 excel 总体流程
其实流程很简单,就是将简历拍照,发送给程序,程序识别出文字,正则匹配出相关信息,填写入 excel 对应栏目。
由于之前的几篇博客,已经比较清晰的介绍了 python识别图中的文字 和 python正则表达式的使用,所以,咱们只详细介绍一下 python操作excel
和整体流程。
python实战项目,操作 excel
python 操作 excel 的方法还是非常多的。这里介绍使用 python 的 xlwt
库。
1. xlwt 库的安装
xlwt 库的安装非常简单,执行
pip install xlwt
即可,测试能否正常导入,发现是正常的。
$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import xlwt
>>> exit()
2. xlwt 的使用
本着实用性原则,因为咱们将只用到写入,所以只介绍写入,以 代码+注释
的形式介绍,会比较清楚:
# -*- coding: utf-8 -*-
#文件名 test.py
#导入xlwt模块
import xlwt
# 创建一个Workbook对象,这就相当于创建了一个Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
# 在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
# 向表test中添加数据
sheet.write(0, 0, 'www.xrkzn.cn') # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
sheet.write(1, 0, 'xrkzn')
txt1 = '向日葵智能'
sheet.write(0, 1, txt1.decode('utf-8')) # 此处需要将中文字符串解码成unicode码,否则会报错
txt2 = 'python实战项目'
sheet.write(1, 1, txt2.decode('utf-8'))
# 最后,将以上操作保存到指定的Excel文件中
book.save(r'./test1.xls') # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错
在执行脚本前,我们先创建一个 execl 文件 test1.xls
放在 test.py 文件同目录,然后运行脚本,得到:
python实战项目,识别简历,自动填写 excel
1. 识别简历内容
这个,咱们前面的博客已经说的比较清楚了,可以再翻回去看看:python识别图中的文字。这里咱们做一下小小的改动,将文字集中在一起:
# encoding:utf-8
import base64
import urllib
import urllib2, json
from token import GetToken
'''
文字识别
'''
url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
def OcrRecg(fileName):
# 二进制方式打开图片文件
f = open(fileName, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
params = urllib.urlencode(params)
access_token = GetToken()
request_url = url + "?access_token=" + access_token
print request_url
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib2.urlopen(request)
content = response.read()
res = ""
if content:
js = json.loads(content)
for i in range(0, js['words_result_num']):
res = res + (js['words_result'][i]['words'])
return res
return None
2. 保存到 excel 表
按照上面的 python 操作 excel 示例,咱们这里把存到 excel 的动作,写成一个函数,最终,全部代码如下,值得说明的是,这里只是示范,代码只是 demo 级,希望和大家交流,也算是做个笔记。提取信息的部分,用到了 python正则表达式。
# encoding:utf-8
import base64
import xlwt, re
import urllib
import urllib2, json
from token import GetToken
'''
文字识别
'''
url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
def OcrRecg(fileName):
# 二进制方式打开图片文件
f = open(fileName, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
params = urllib.urlencode(params)
access_token = GetToken()
request_url = url + "?access_token=" + access_token
print request_url
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/x-www-form-urlencoded')
response = urllib2.urlopen(request)
content = response.read()
res = ""
if content:
js = json.loads(content)
for i in range(0, js['words_result_num']):
res = res + (js['words_result'][i]['words'])
return res
return None
def SaveExcel(content):
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('test', cell_overwrite_ok=True)
sheet.write(0, 0, "姓名") # 提取这几条信息为示范
sheet.write(0, 1, "出生年月")
sheet.write(0, 2, "毕业院校")
sheet.write(0, 3, "专业")
sheet.write(0, 4, "电话")
# pattern = re.compile(u'姓名:(.*?)性别', re.S);
pattern = re.compile(u'姓名:(.*?)性别.*?出生年月:(.*?)学历.*?毕业院校:(.*?)专业:(.*?)现居住地.*?电话:(.*?)Q', re.S);
result = pattern.findall(content)
i = 0
for item in result[0]:
print item
sheet.write(1, i, item)
i = i+1
book.save(r'./test1.xls') #保存到 test1.xls
if __name__ == "__main__":
pic = "pic/2.jpg" # 这里写咱们要识别的图片名字
res = OcrRecg(pic)
# print res
SaveExcel(res)
3. 测试
代码写完了,可以测试了,找到一张简历如图:
运行咱们的脚本,发现想要的简历信息提取出来了,并且自动存到 excel 表里了。
感谢分享,目前市面上有类似的自动识别App吗?
我也没有在市面上发现类似的商用 app,计划后续增加更加简单易用的 app,就发在这里吧。。。看看啥时候有时间