Python实现分析当前文件夹里面所有的pdf或者Word形式简历,并且保存到Excel中
# -*- coding:utf-8 -*-
#作者:公众号:湾区人工智能
#功能:实现分析pdf或者Word形式简历,并且保存到Excel中
#时间:2018年
import pdfplumber #解析pdf文件
from openpyxl import Workbook #读写Excel的文件
class Pdf:
# 解析:按照文字页边距判断级别(标题或内容)
def parse(self, path):
targets = {} #保存结果,key是简历左侧内容,value是简历右侧内容。
pdf = pdfplumber.open(path)
for page in pdf.pages:
words = page.extract_words(x_tolerance = 5) #两页,两个列表
distance = [int(word['x0']) for word in words] #对所有x0取整数,两个列表
print(distance)
min_dis = min(distance) #min 68
left_top = None #简历左侧top
left_text = None #简历左侧text
right_top = 0 #简历右侧高度
x_dis = 5 #简历左右内容距离
y_dis = 3 #同一行高度差在3以内
for word in words:
x0, top = word['x0'], word['top']
#print(x0, top)
text = word['text']
if abs(x0 - min_dis) < x_dis: #主要通过距离区分key 和value部分,这里求出key部分内容
targets[text] = ''
left_text = text #简历左侧内容
left_top = top #简历左侧top
elif left_top is not None and left_text is not None:
if abs(left_top - top) < y_dis: #在同一行内容相加
targets[left_text] += text
elif abs(right_top - top) < y_dis: #简历右侧同一高度添加到一起
targets[left_text] += ' ' + text #保证右侧内容能够放在一行,例如:硕士论文课题: „Tribologische Untersuchung strukturierter
else:
right_top = top
targets[left_text] += '\n' + text #保证右侧一个内容块的内容要添加,而不是只添加右侧第一行内容
return targets
# 保存
def save(self, targets, out_path, sheet_name='targets'):
wb = Workbook()
ws = wb.active
ws.title = sheet_name
ws.append(list(targets.keys()))
ws.append(list(targets.values()))
wb.save(out_path)
import docx
from docx import Document #导入库
from openpyxl import Workbook #读写Excel的文件
class Docx:
def parse(self, path):
document = Document(path) #读入文件
tables = document.tables #获取文件中的表格集
#print(len(tables))
table = tables[0]#获取文件中的第一个表格
targets = {}
for i in range(len(table.rows)):#循环读取表格数据
targets[table.cell(i,0).text] = table.cell(i,1).text
return targets
# 保存
def save(self, targets, out_path, sheet_name='targets'):
wb = Workbook()
ws = wb.active
ws.title = sheet_name
ws.append(list(targets.keys()))
ws.append(list(targets.values()))
wb.save(out_path)
# 主函数入口
import os
filenames = os.listdir(os.getcwd()) #all the filenames in the current folder
for filename in filenames:
#print(filename)
if '.docx' in filename:
obj_docx = Docx()
path_docx = filename #文件路径
out_path = path_docx.strip('.docx') + '.xlsx'
print(out_path)
docx_targets = obj_docx.parse(path_docx)
obj_docx.save(docx_targets, out_path)
if '.pdf' in filename:
obj_pdf = Pdf()
path_pdf = filename #文件路径
out_path = path_pdf.strip('.pdf') + '.xlsx'
print(out_path)
pdf_targets = obj_pdf.parse(path_pdf)
obj_pdf.save(pdf_targets, out_path)
'''
Python:解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比
pdfminer 对于表格的处理非常的不友好,能提取出文字,但是没有格式:
tabula 是专门用来提取PDF表格数据的,同时支持PDF导出为CSV、Excel格式,但是这工具是用 java 写的,依赖 java7/8。tabula-py 就是对它做了一层 python 的封装,所以也依赖 java7/8。
pdfplumber 是按页来处理 pdf 的,可以获得页面的所有文字,并且提供的单独的方法用于提取表格。
https://github.com/jsvine/pdfplumber
Python解析图片文字
from PIL import Image
import pytesseract
#上面都是导包,只需要下面这一行就能实现图片文字识别
text=pytesseract.image_to_string(Image.open('denggao.jpeg'),lang='chi_sim')
print(text)
①安装PIL:pip install Pillow(之前的博客中有写过)
②安装pytesser3:pip install pytesser3
③安装pytesseract:pip install pytesseract
④安装autopy3:
#2018-12-15 003810 December Saturday the 50 week, the 349 day SZ
pdfextractor
pdf2excel
python 解析pdf 文件
阿里云简历解析
https://edu.aliyun.com/certification/clda07
碰到的第一个麻烦:
耗费我大半天时间
用代码解析我的pdf,用WPS生成的,无论如何都没有结果
用同样代码解析别人的pdf,包括论文和简历,都没有问题
内容创造者:
Microsoft® Word 2010
WPS Office Alpha 生成的pdf无法破解,PDF必须遵守标准的Adobe规范
第二个麻烦:
生成的TXT文件,姓名和后面的内容分布在两行了
尝试的库:
PDFMiner
pdfplumber
'''
'''
words两列内容,
每页是一列内容;每个列表由无数个字典组成,每个字典由一些key,value对组成;简历里面的每个内容都会有一个字典包括,字典指明了这个内容的前后左右页边距;字典里text对应的value就是pdf内容了,提取出来就行。
x0是text内容左侧距离左边的距离,x1是text内容右侧距离左边的距离;如何保证把左侧放在表头,右侧放在表头下面呢?----------', 'valid': True}]
运行结束!
[Finished in 0.9s]
'''