python读取pdf文件提取关键信息到Excel中

以前做过的一个项目,需要从pdf格式的检查报告提取关键信息到Execl中

import numpy as np
import pandas as pd
import re
import pdfplumber
import os
from tqdm import tqdm

pd.set_option('max_row',None)
pd.set_option('max_columns',None)

a = 0
xuejian_list = []
xuejian_id_list = []
#shunde_file = []
#shunde_id_file = []

#读取路径下的所有pdf文件
for root,dirs,files in os.walk(r'C:\Users\XX'):
    for file1 in files:
        if file1.endswith('.pdf') or file1.endswith('.PDF'):
            file2 = re.search('(.+?).[pdf,PDF]',file1)
            xuejian_id_list.append(file2.group(1))
            file = os.path.join(root,file1)
            xuejian_list.append(file)
            '''if file2.group(1) in shunde_id_list:
                shunde_file.append(file)
                shunde_id_file.append(file2.group(1))'''
            #print(file)
#print(xuejian_id_list)
num = len(xuejian_list)

def pdf_to_excel(file):
    pdf = pdfplumber.open(file)

    a = 0
    dist = {}
    dist['id'] = xuejian_id_list[x]
    
    pdf_table_path = pd.DataFrame(None)
    for page in pdf.pages:
        a = a + 1
        if a == 1:
            #print(page.extract_text())
            pdf_text = page.extract_text()

            #诊断结果1
            result1 = re.search('结果[:,:,:,\s]{1,}(.+?)[\。]{0,}[\n,\s]',pdf_text)
            if result1 != None:
                l5 = result1.group(1)
                dist['result1'] = l5
            else:
                result1 = re.search('结果[:,:,\s]{0,}(.+?)\。',pdf_text)
                l5 = result1.group(1)
                dist['result1'] = l5

            #诊断结果2,无规则可循,考虑其他读取pdf包
            result2 = re.search('(本次[\s\S]+?)[\n,\s]{0,}主[\s]{0,}治[\s]{0,}医[\s]{0,}生',pdf_text)
            if result2 != None:
                l6 = result2.group(1).replace('\s','').replace('\n','')
                dist['result2'] = l6
            else:
                result2 = re.search('(本次[\s\S]+?)[\n,\s]{0,}检[\s]{0,}验[\s]{0,}者',pdf_text)
                l6 = result2.group(1).replace('\s','').replace('\n','')
                l66 = re.search('(.+\。)',l6)
                dist['result2'] = l66.group(1)

            dist_new = pd.DataFrame.from_dict(dist,orient='index').T
            #print(dist_new)


        #表格提取为pd.DataFrame
        for pdf_table in page.extract_tables():
            pdf_table = np.array(pdf_table)
            pdf_table = pd.DataFrame(pdf_table[1:],columns=pdf_table[0])
        if str(pdf_table_path.empty) == 'False':
            pdf_table = pd.concat([pdf_table_path,pdf_table],axis=0)
        pdf_table_path = pdf_table.copy()
            #print(pdf_table)
            #print('/n')
    pdf_table = pdf_table.reset_index(drop=True)
    pdf_table1 = pd.DataFrame(pdf_table['检测结果'].values)
    pdf_table1.index = pd.Series(pdf_table['英文缩写'].values)

    #pdf_table2 = pd.pivot_table(pdf_table1,columns=['英文缩写'],values=['检测结果'],aggfunc=[np.sum],fill_value=np.nan)

    #数据合并
    pdf_data = pd.concat([dist_new,pdf_table1.T],axis=1)
    #print(pdf_data)
    #pdf_data_columns = pdf_data.columns.values.tolist()

    pdf.close()
    return pdf_data

#xuejian_dict = {}
xuejian_path = pd.DataFrame(None)
false_file = []
for x in tqdm(range(len(xuejian_list))):
    try:
        #xuejian_dict['id'] = xuejian_id_list[x]
        pdf_data = pdf_to_excel(xuejian_list[x])
        if str(xuejian_path.empty) == 'False':
               pdf_data = pd.concat([xuejian_path,pdf_data],axis=0)
        xuejian_path = pdf_data.copy()
            
    except:
        false_file.append(xuejian_list[x])

pdf_data1 = pdf_data.reset_index(drop=True)
pdf_data1.to_csv(r'xx.csv',encoding="gbk",index=False)
false_file1 = pd.DataFrame(false_file,columns=['file_name'])
false_file1.to_csv(r'xx',encoding='gbk',index=False)
print("总pdf文件数:{}".format(len(xuejian_list)))
print("已提取的pdf文件数:{}".format(len(pdf_data1)))
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值