python解析pdf文件_抽img_text(pymupdf)

pymupdf官方文档:https://pymupdf.readthedocs.io/en/latest/textpage.html#TextPage.extractDICT
代码:

# 证书  留学背景  工作时间
import base64
import json
import os
import re

import xlwt

base_211 = ['北京理工大学', '北京航空航天大学', '北京化工大学', '北京邮电大学', '对外经济贸易大学', '中国传媒大学', '中央民族大学', '中国矿业大学',
            '中央财经大学', '中国政法大学', '中国石油大学', '中央音乐学院', '北京体育大学', '北京外国语大学', '北京交通大学', '北京科技大学',
            '北京林业大学', '中国农业大学', '北京中医药大学', '华北电力大学', '北京师范大学', '中国地质大学', '清华大学', '北京大学', '中国人民大学',
            '北京工业大学', '复旦大学', '华东师范大学', '上海外国语大学', '上海大学', '同济大学', '华东理工大学', '东华大学', '上海财经大学'
    , '上海交通大学', '南开大学', '天津大学', '天津医科大学', '河北工业大学', '重庆大学', '西南大学', '华北电力大学', '太原理工大学', '内蒙古大学', '大连理工大学', '东北大学',
            '辽宁大学',
            '大连海事大学', '吉林大学',
            '东北师范大学', '延边大学', '东北农业大学', '东北林业大学', '哈尔滨工业大学', '哈尔滨工程大学', '南京大学', '东南大学', '苏州大学',
            '河海大学', '中国药科大学', '中国矿业大学(徐州)', '南京师范大学', '南京理工大学', '南京航空航天大学', '江南大学',
            '南京农业大学浙江大学安徽大学', '合肥工业大学', '中国科学技术大学厦门大学', '福州大学南昌大学山东大学', '中国海洋大学',
            '中国石油大学(华东)', '郑州大学', '武汉大学', '华中科技大学', '中国地质大学(武汉)', '华中师范大学', '华中农业大学',
            '中南财经政法大学', '武汉理工大学', '湖南大学', '中南大学', '湖南师范大学', '中山大学', '暨南大学', '华南理工大学', '华南师范大学',
            '广西大学', '四川大学', '西南交通大学', '电子科技大学', '西南财经大学', '四川农业大学', '云南大学', '贵州大学', '西北大学',
            '西安交通大学', '西北工业大学', '陕西师范大学', '西北农林科大',
            '西安电子科技大学',
            '长安大学',
            '兰州大学', '新疆大学',
            '石河子大学', '海南大学', '宁夏大学', '青海大学', '西藏大学', '第二军医大学',
            '第四军医大学', '国防科学技术大学', ]

base_985 = ['清华大学', '北京大学', '厦门大学', '中国科学技术大学', '南京大学', '复旦大学', '天津大学', '哈尔滨工业大学', '浙江大学', '南开大学', '西安交通大学', '华中科技大学',
            '东南大学', '武汉大学', '上海交通大学', '中国海洋大学', '山东大学', '湖南大学', '中国人民大学', '北京理工大学', '吉林大学', '重庆大学', '电子科技大学', '大连理工大学',
            '四川大学', '中山大学', '华南理工大学', '北京航空航天大学', '兰州大学', '东北大学', '西北工业大学', '北京师范大学', '同济大学', '中南大学', '中国农业大学',
            '国防科技大学', '西北农林科技大学', '华东师范大学']
import fitz

def pdf_img(path):
    doc = fitz.open(path)
    # pdf中图片的正则表达式
    checkXO = r"/Type(?= */XObject)"
    checkIM = r"/Subtype(?= */Image)"
    # 21是找出的固定的某个图片的pdf位置id
    text = doc._getXrefString(21)
    isXObject = re.search(checkXO, text)
    # 使用正则表达式查看是否是图片
    isImage = re.search(checkIM, text)
    # 如果不是对象也不是图片,不做处理
    if not isXObject or not isImage:
        pass
    else:
        # 根据位置索引生成图像
        pix = fitz.Pixmap(doc, 21)
        # 根据pdf的路径生成图片的名称
        save_path = path.replace('.pdf','.png')
        # 如果pix.n<5,可以直接存为PNG
        if pix.n < 5:
            pix.writePNG(save_path)
        # 否则先转换CMYK
        else:
            pix0 = fitz.Pixmap(fitz.csRGB, pix)
            pix0.writePNG(save_path)
            pix0 = None
        # 释放资源
        pix = None

def pdf_text(path):
    doc = fitz.open(path)
    # print(doc)
    lenXREF = doc._getXrefLength()
    req_text = []
    for page in doc:
        blocks = page.getText('dict').get("blocks")
        # print(len(blocks))
        for i in blocks:
            if i.get('type') == 0:
                lines = i.get("lines")
                if len(lines) == 1:
                    spans = lines[0].get('spans')
                    if len(spans) == 1:
                        req_text.append(spans[0].get("text"))
                else:
                    for j in lines:
                        spans = j.get('spans')
                        if len(spans) == 1:
                            req_text.append(spans[0].get('text'))
                        else:
                            for k in spans:
                                req_text.append(k.get("text"))
    # print(req_text)
    jianli_ID = []
    ry = []
    shulian = []
    jt = []
    gs = []
    xw = []
    gztime = []
    xm = []
    jy = []
    zs = []
    by = []
    ld = []

    for i in range(0, len(req_text) - 1):
        if req_text[i] == "学\u3000校:":
            xx = req_text[i + 1]
            if xx in base_211 and xx in base_985:
                by.append("毕业于: %s 985和211院校 " % xx)
            elif xx in base_211:
                by.append("毕业于: %s  211院校" % xx)
            elif xx in base_985:
                by.append("毕业于: %s  985院校" % xx)
            else:
                by.append("毕业于: %s " % xx)
        elif req_text[i] == "证书":
            zs.append("证书:%s  %s" % (req_text[i + 1], req_text[i + 2]))
        elif req_text[i] == "公\u3000司:":
            gs.append("公司:%s" % req_text[i + 1])
        elif req_text[i] == "学位:":
            xw.append("学位: %s" % req_text[i + 1])
        elif req_text[i] == "工作经验":
            gztime.append("最近一段工作时间: %s %s" % (req_text[i + 1], req_text[i + 2]))
        elif req_text[i] == "熟练":
            shulian.append("熟练: %s" % req_text[i - 1])
        elif req_text[i] == "精通":
            jt.append("精通:%s" % req_text[i - 1])
        elif req_text[i] == "教育经历":
            jy.append("教育经历:%s %s" % (req_text[i + 1], req_text[i + 2]))
        elif req_text[i] == "项目经验":
            xm.append("项目经验:%s %s %s" % (req_text[i + 1], req_text[i + 2], req_text[i + 3]))
        elif req_text[i] == "校内荣誉":
            ry.append("校内荣誉:%s  %s%s%s%s%s " % (
            req_text[i + 1], req_text[i + 2], req_text[i + 3], req_text[i + 4], req_text[i + 5], req_text[i + 6]))
        elif req_text[i] == "ID":
            jianli_ID.append("简历ID: %s" % req_text[i + 2])
    ld.append(jianli_ID[0])
    ld.extend(by)
    ld.extend(xw)
    ld.extend(jy)
    if len(zs) >= 1:
        ld.extend(zs)
    else:
        ld.append([])
    if len(ry) >= 1:
        ld.extend(ry)
    else:
        ld.append([])
    ld.extend(gs)
    ld.extend(xm)
    ld.extend(shulian[:3])
    ld.extend(jt)
    return ld


# pdf_text('D:/51job/_2020-09-21_141211/806152512.pdf')


def data_write(write_path, datas):
    f = xlwt.Workbook()
    sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True)  # 创建sheet

    # 将数据写入第 i 行,第 j 列
    i = 0
    for data in datas:
        for j in range(len(data)):
            sheet1.write(i, j, data[j])
            j += 1
        i += 1

    f.save(write_path)  # 保存文件


def main(file_dir, write_path):
    filenames = []
    datas = []
    for root, dirs, files in os.walk(file_dir):
        for file in files:
            if file.split('.')[-1] in ['pdf']:
                filenames.append(file)
    for filename in filenames:
        datas.append(pdf_text(file_dir + filename))
        pdf_img(file_dir+filename)
    data_write(write_path, datas)


if __name__ == '__main__':
    file_dir = "D:\\51job\\python_2020-09-22_095655\\"
    write_path = file_dir + "jx.xlsx"

    main(file_dir, write_path)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值