Python实现分析pdf或者Word形式简历,并且保存到Excel中

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]
'''









猜你喜欢

转载自blog.csdn.net/BTUJACK/article/details/88072092