【PDF识别提取表格】如何将PDF指定区域自动识别并提取数据到Excel 文件的详细开发步骤

部署运行你感兴趣的模型镜像

银行和金融机构有众多的金融文档PDF,如贷款申请表、财务报表等。从特定的表格区域或文本区域进行OCR识别,提取诸如客户账号、贷款金额、报告期等关键信息,并用于文件整理后输出表Excel表格文件,有助于金融机构更好地管理客户资料和财务数据。

以下是使用 Python 和飞桨(PaddlePaddle)将 PDF 指定区域自动 OCR 识别并提取数据到 Excel 文件的详细步骤:

一、安装所需的库

bash

pip install pdf2image
pip install paddlepaddle
pip install paddleocr
pip install pandas
pip install openpyxl

二、导入所需的库

python

import pdf2image
from paddleocr import PaddleOCR
import pandas as pd
import os

三、将 PDF 转换为图像

python

def pdf_to_images(pdf_path):
    images = pdf2image.convert_from_path(pdf_path)
    image_paths = []
    for i, image in enumerate(images):
        image_path = f'temp_image_{i}.jpg'
        image.save(image_path)
        image_paths.append(image_path)
    return image_paths

代码解释:

  • pdf2image.convert_from_path(pdf_path):将 PDF 文件转换为图像列表。
  • 对于每个转换后的图像,将其保存为一个临时的 JPG 文件,并将这些临时文件的路径存储在 image_paths 列表中,以便后续使用。

四、使用 PaddleOCR 对指定区域进行 OCR 识别

python

def ocr_on_images(image_paths, x0, y0, x1, y1):
    ocr = PaddleOCR()
    all_text = []
    for image_path in image_paths:
        result = ocr.ocr(image_path, cls=False)
        for line in result[0]:
            # 检查 OCR 结果是否在指定区域内
            if x0 <= line[0][0][0] <= x1 and y0 <= line[0][0][1] <= y1:
                all_text.append(line[1][0])
    return all_text

代码解释:

  • PaddleOCR():初始化 PaddleOCR 引擎。
  • ocr.ocr(image_path, cls=False):对图像进行 OCR 识别,cls=False 表示不进行方向分类。
  • 对于每个识别结果,检查其位置是否在指定的 (x0, y0, x1, y1) 区域内,如果在该区域内,将识别出的文本添加到 all_text 列表中。

五、处理提取的文本数据(根据实际情况)


假设提取的文本数据可以用换行符分隔:python

def process_text(all_text):
    text = '\n'.join(all_text)
    return text

代码解释:

  • '\n'.join(all_text):将提取的文本列表用换行符连接成一个完整的文本字符串。

六、将数据存储到 Excel 文件中

python

def save_to_excel(text, excel_path):
    df = pd.DataFrame([text.split('\n')])
    df.to_excel(excel_path, index=False, header=False)

代码解释:

  • pd.DataFrame([text.split('\n')]):将文本按换行符拆分成多行,并存储在一个 DataFrame 中。
  • df.to_excel(excel_path, index=False, header=False):将 DataFrame 中的数据存储到 Excel 文件中,不保存行索引和列名。

七、清理临时图像文件

python

def clean_up(image_paths):
    for image_path in image_paths:
        os.remove(image_path)

代码解释:

  • os.remove(image_path):删除临时生成的图像文件,避免占用过多磁盘空间。

八、完整的代码示例

python

import pdf2image
from paddleocr import PaddleOCR
import pandas as pd
import os


def pdf_to_images(pdf_path):
    images = pdf2image.convert_from_path(pdf_path)
    image_paths = []
    for i, image in enumerate(images):
        image_path = f'temp_image_{i}.jpg'
        image.save(image_path)
        image_paths.append(image_path)
    return image_paths


def ocr_on_images(image_paths, x0, y0, x1, y1):
    ocr = PaddleOCR()
    all_text = []
    for image_path in image_paths:
        result = ocr.ocr(image_path, cls=False)
        for line in result[0]:
            if x0 <= line[0][0][0] <= x1 and y0 <= line[0][0][1] <= y1:
                all_text.append(line[1][0])
    return all_text


def process_text(all_text):
    text = '\n'.join(all_text)
    return text


def save_to_excel(text, excel_path):
    df = pd.DataFrame([text.split('\n')])
    df.to_excel(excel_path, index=False, header=False)


def clean_up(image_paths):
    for image_path in image_paths:
        os.remove(image_path)


if __name__ == "__main__":
    # 替换为你的 PDF 文件路径
    pdf_path = 'example.pdf'
    # 替换为你想要保存的 Excel 文件路径
    excel_path = 'output.xlsx'
    # 指定区域的坐标 (x0, y0, x1, y1)
    x0, y0, x1, y1 = 100, 100, 300, 300
    image_paths = pdf_to_images(pdf_path)
    extracted_text = ocr_on_images(image_paths, x0, y0, x1, y1)
    processed_text = process_text(extracted_text)
    save_to_excel(processed_text, excel_path)
    clean_up(image_paths)

代码解释:

  1. PDF 转图像
    • pdf_to_images(pdf_path):将 PDF 转换为多个图像文件,并存储这些图像的路径。
  2. OCR 识别
    • ocr_on_images(image_paths, x0, y0, x1, y1):使用 PaddleOCR 对图像进行 OCR 识别,并筛选出指定区域内的文本。
  3. 文本处理
    • process_text(all_text):将提取的文本列表组合成一个完整的文本字符串。
  4. 存储到 Excel
    • save_to_excel(text, excel_path):将处理好的文本存储到 Excel 文件。
  5. 清理
    • clean_up(image_paths):删除临时生成的图像文件。

九、注意事项

  • 坐标系统
    • 请确保你使用的 (x0, y0, x1, y1) 坐标系统与 PaddleOCR 结果的坐标系统一致,可能需要根据不同的工具和库进行适当的调整。
  • OCR 性能
    • PaddleOCR 的性能和准确性可能会受到图像质量、字体、语言等多种因素的影响,对于一些复杂的文档,可能需要对图像进行预处理(如增强、降噪)来提高 OCR 效果。
  • 临时文件管理
    • 上述代码使用临时图像文件,在处理完成后会删除这些文件,确保你有足够的磁盘空间和文件权限。

通过上述步骤,你可以使用 Python 和 PaddlePaddle 从 PDF 的指定区域进行 OCR 识别,并将结果存储到 Excel 文件中。你可以根据实际情况调整和优化代码,以适应不同的 PDF 文件和 OCR 需求。

您可能感兴趣的与本文相关的镜像

PaddlePaddle-v3.3

PaddlePaddle-v3.3

PaddlePaddle

PaddlePaddle是由百度自主研发的深度学习平台,自 2016 年开源以来已广泛应用于工业界。作为一个全面的深度学习生态系统,它提供了核心框架、模型库、开发工具包等完整解决方案。目前已服务超过 2185 万开发者,67 万企业,产生了 110 万个模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值