Python PDF识别之文本内容与表格提取方法总结

 更新时间:2025年08月21日 10:23:13   作者:幸福清风  
这篇文章主要带大家深入探讨多种PDF文本与表格提取方法,结合实际代码示例,为大家呈现一份全面的PDF提取指南,希望对大家有所帮助

一、前言

在数字化办公的浪潮中,PDF文件以其格式稳定、兼容性强等优点,成为文档存储与传输的重要载体。然而,当我们需要从PDF中提取文本和表格进行进一步处理或分析时,却常常面临诸多挑战。

不同的PDF文件类型、复杂的排版布局、扫描版PDF的图像识别等问题,都可能成为提取过程中的“拦路虎”。本文将深入探讨多种PDF文本与表格提取方法,结合实际代码示例,为大家呈现一份全面的PDF提取指南。

二、文本提取方法

1. pdfplumber:精准提取文本与表格

pdfplumber是一个功能强大的Python库,尤其在处理包含表格的PDF文件时表现出色。通过pdfplumber,我们不仅能提取文本,还能对表格进行精确解析。

import pdfplumber

pdf_path = "你的PDF文件路径"

with pdfplumber.open(pdf_path) as pdf:
    text = ""
    for page in pdf.pages:
        page_text = page.extract_text()
        text += page_text
        print(page_text)

2. fitz(PyMuPDF):快速提取文本与图像

fitz,即PyMuPDF,以其高效性著称。它不仅能够快速提取PDF中的文本,还能处理PDF中的图像内容。

import fitz

doc = fitz.open(pdf_path)
text = ""
for page in doc:
    page_text = page.get_text()
    text += page_text
    print(page_text)

3. PyPDF2:简单文本提取的利器

PyPDF2是一个广为人知的PDF处理库,虽然其功能相对基础,但对于简单的文本提取任务已经足够。

import PyPDF2

def extract_text_from_pdf(pdf_path):
    pdfReader = PyPDF2.PdfReader(pdf_path)
    text = ""
    for page_num in range(len(pdfReader.pages)):
        page = pdfReader.pages[page_num]
        text += page.extract_text()
    return text

print(extract_text_from_pdf(pdf_path))

4. pdfminer:深度自定义提取逻辑

pdfminer是一个高度可定制的PDF处理库,适用于需要深度自定义提取逻辑的场景。

from pdfminer.high_level import extract_text

def extract_text_from_pdf(pdf_path):
    text = extract_text(pdf_path)
    return text

print(extract_text_from_pdf(pdf_path))

5. pdfquery:提取特定区域文本

pdfquery通过坐标定位,能够精确提取指定区域的文本内容。
 

import pdfquery

def extract_specific_text_from_pdf(pdf_path):
    pdf = pdfquery.PDFQuery(pdf_path)
    pdf.load()
    text = pdf.pq('LTTextLineHorizontal:in_bbox("100, 500, 400, 600")').text()
    return text

print(extract_specific_text_from_pdf(pdf_path))

6. pytesseract与PaddleOCR:攻克扫描版PDF

对于扫描版PDF或图像型PDF,可以使用pytesseract和PaddleOCR进行OCR识别。

pytesseract:

from pdf2image import convert_from_path
import pytesseract

def extract_text_from_scanned_pdf(pdf_path):
    pages = convert_from_path(pdf_path)
    text = ""
    for page in pages:
        text += pytesseract.image_to_string(page, lang='chi_sim') + "\n"
    return text

print(extract_text_from_scanned_pdf(pdf_path))

PaddleOCR

from pdf2image import convert_from_path
from paddleocr import PaddleOCR

def extract_text_from_scanned_pdf(pdf_path, lang='ch'):
    ocr = PaddleOCR(use_angle_cls=True, lang=lang)
    pages = convert_from_path(pdf_path)
    text = ""
    for page in pages:
        result = ocr.ocr(page, cls=True)
        for idx in range(len(result)):
            res = result[idx]
            for line in res:
                text += line[1][0] + "\n"
    return text

print(extract_text_from_scanned_pdf(pdf_path))

7. aspose.pdf:商业应用的高质量选择

aspose.pdf是一个商业库,提供了高质量的文本和表格提取功能。

from aspose.pdf import Document
from aspose.pdf.text import TextFragmentAbsorber

def extract_text_from_pdf(pdf_path):
    pdf_doc = Document(pdf_path)
    absorber = TextFragmentAbsorber()
    text = ""
    for page in pdf_doc.pages:
        page.accept(absorber)
        for fragment in absorber.text_fragments:
            text += fragment.text + "\n"
        absorber.text_fragments.clear()
    return text

print(extract_text_from_pdf(pdf_path))

8. textract:简化文本提取流程

textract是一个简洁高效的文本提取库,能够快速实现文本提取功能。

import textract

def extract_text_from_pdf(pdf_path):
    text = textract.process(pdf_path, method='pdfminer')
    print("-----------textract--------------------")
    print(text.decode('utf-8'))
    return text.decode('utf-8')

print(extract_text_from_pdf(pdf_path))

三、表格提取方法

1. pdfplumber:精确表格提取

pdfplumber不仅擅长文本提取,还能精确提取PDF中的表格数据。

import pdfplumber

with pdfplumber.open(pdf_path) as pdf:
    for page in pdf.pages:
        table = page.extract_table()
        if table:
            for row in table:
                print(row)

2. camelot:智能表格提取

camelot是一个专门用于从PDF中提取表格数据的Python库,它能够智能地识别PDF中的表格结构。

import camelot
import pandas as pd

def extract_tables_from_pdf(pdf_path):
    tables = camelot.read_pdf(pdf_path, flavor='stream')
    combined_df = pd.concat([table.df for table in tables])
    print("-----------camelot--------------------")
    return combined_df

tables_df = extract_tables_from_pdf(pdf_path)
print(tables_df)

3. aspose.pdf:高质量表格提取

aspose.pdf库也提供了表格提取的功能,适合商业应用。

from aspose.pdf import Document
from aspose.pdf.text import TextFragmentAbsorber

def extract_tables_from_pdf(pdf_path):
    pdf_doc = Document(pdf_path)
    absorber = TextFragmentAbsorber()
    tables = []
    for page in pdf_doc.pages:
        page.accept(absorber)
        for fragment in absorber.text_fragments:
            # 处理表格数据
            pass
    return tables

print(extract_tables_from_pdf(pdf_path))

四、总结

在PDF文本与表格提取的征程中,我们遇到了各种挑战,也探索了多种解决方案。每种方法都有其独特的适用场景和优缺点:

  • 简单文本提取:PyPDF2和fitz是不错的选择,简单易用,适合初学者快速上手。
  • 表格与精确文本提取:pdfplumber在处理表格方面表现出色,能够满足对文本和表格精确提取的需求。
  • 复杂PDF处理:pdfminer的灵活性使其能够应对复杂的PDF结构,适合需要深度自定义提取逻辑的场景。
  • 扫描PDF处理:pytesseract和PaddleOCR是OCR技术的代表,能够攻克扫描版PDF的难题,但对图像质量有一定要求。
  • 商业应用:aspose.pdf以其高质量的提取效果和稳定性,成为商业应用中的优选,尽管需要考虑成本因素。
  • 简化提取流程:textract通过封装底层逻辑,提供了简洁高效的文本提取方式,适合快速开发。
  • 智能表格提取:camelot在表格提取方面表现出色,能够智能识别PDF中的表格结构,提高提取效率。

到此这篇关于Python PDF识别之文本内容与表格提取方法总结的文章就介绍到这了,更多相关Python PDF识别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现不同数据库间数据同步功能

    python实现不同数据库间数据同步功能

    这篇文章主要介绍了python实现不同数据库间数据同步功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python实现的二叉树算法和kmp算法实例

    python实现的二叉树算法和kmp算法实例

    最近重温数据结构,又用python,所以就用python重新写了数据结构的一些东西,以下是二叉树的python写法
    2014-04-04
  • Opencv python 图片生成视频的方法示例

    Opencv python 图片生成视频的方法示例

    这篇文章主要介绍了Opencv python 图片生成视频的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python递归全排列实现方法

    python递归全排列实现方法

    这篇文章主要为大家详细介绍了python递归全排列实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • python requests使用socks5的例子

    python requests使用socks5的例子

    今天小编就为大家分享一篇python requests使用socks5的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python/MySQL实现Excel文件自动处理数据功能

    Python/MySQL实现Excel文件自动处理数据功能

    在没有服务器存储数据,只有excel文件的情况下,如何利用SQL和python实现数据分析和数据自动处理的功能?本文就来和大家聊聊解决办法
    2023-02-02
  • Python Pandas学习之series的二元运算详解

    Python Pandas学习之series的二元运算详解

    二元运算是指由两个元素形成第三个元素的一种规则,例如数的加法及乘法;更一般地,由两个集合形成第三个集合的产生方法或构成规则称为二次运算。本文将详细讲讲Pandas中series的二元运算,感兴趣的可以了解一下
    2022-09-09
  • Python中的pickle模块常用函数

    Python中的pickle模块常用函数

    这篇文章主要介绍了Python中的pickle模块常用函数,pickle模块使用的数据格式是python专用的,能够把python对象直接保存到文件,而不需要转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中,需要的朋友可以参考下
    2023-09-09
  • python Matplotlib数据可视化(2):详解三大容器对象与常用设置

    python Matplotlib数据可视化(2):详解三大容器对象与常用设置

    这篇文章主要介绍了python Matplotlib三大容器对象与常用设置的相关资料,帮助大家更好的学习和使用Matplotlib库的用法,感兴趣的朋友可以了解下
    2020-09-09
  • Python升级提示Tkinter模块找不到的解决方法

    Python升级提示Tkinter模块找不到的解决方法

    这篇文章主要介绍了Python升级提示Tkinter模块找不到的解决方法,Tkinter的是Tk的GUI工具包,用来开发GUI界面,需要的朋友可以参考下
    2014-08-08

最新评论