欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python PDF識(shí)別之文本內(nèi)容與表格提取方法總結(jié)

 更新時(shí)間:2025年08月21日 10:23:13   作者:幸福清風(fēng)  
這篇文章主要帶大家深入探討多種PDF文本與表格提取方法,結(jié)合實(shí)際代碼示例,為大家呈現(xiàn)一份全面的PDF提取指南,希望對(duì)大家有所幫助

一、前言

在數(shù)字化辦公的浪潮中,PDF文件以其格式穩(wěn)定、兼容性強(qiáng)等優(yōu)點(diǎn),成為文檔存儲(chǔ)與傳輸?shù)闹匾d體。然而,當(dāng)我們需要從PDF中提取文本和表格進(jìn)行進(jìn)一步處理或分析時(shí),卻常常面臨諸多挑戰(zhàn)。

不同的PDF文件類型、復(fù)雜的排版布局、掃描版PDF的圖像識(shí)別等問(wèn)題,都可能成為提取過(guò)程中的“攔路虎”。本文將深入探討多種PDF文本與表格提取方法,結(jié)合實(shí)際代碼示例,為大家呈現(xiàn)一份全面的PDF提取指南。

二、文本提取方法

1. pdfplumber:精準(zhǔn)提取文本與表格

pdfplumber是一個(gè)功能強(qiáng)大的Python庫(kù),尤其在處理包含表格的PDF文件時(shí)表現(xiàn)出色。通過(guò)pdfplumber,我們不僅能提取文本,還能對(duì)表格進(jìn)行精確解析。

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中的圖像內(nèi)容。

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:簡(jiǎn)單文本提取的利器

PyPDF2是一個(gè)廣為人知的PDF處理庫(kù),雖然其功能相對(duì)基礎(chǔ),但對(duì)于簡(jiǎn)單的文本提取任務(wù)已經(jīng)足夠。

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是一個(gè)高度可定制的PDF處理庫(kù),適用于需要深度自定義提取邏輯的場(chǎng)景。

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:提取特定區(qū)域文本

pdfquery通過(guò)坐標(biāo)定位,能夠精確提取指定區(qū)域的文本內(nèi)容。
 

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

對(duì)于掃描版PDF或圖像型PDF,可以使用pytesseract和PaddleOCR進(jìn)行OCR識(shí)別。

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:商業(yè)應(yīng)用的高質(zhì)量選擇

aspose.pdf是一個(gè)商業(yè)庫(kù),提供了高質(zhì)量的文本和表格提取功能。

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:簡(jiǎn)化文本提取流程

textract是一個(gè)簡(jiǎn)潔高效的文本提取庫(kù),能夠快速實(shí)現(xiàn)文本提取功能。

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不僅擅長(zhǎng)文本提取,還能精確提取PDF中的表格數(shù)據(jù)。

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是一個(gè)專門用于從PDF中提取表格數(shù)據(jù)的Python庫(kù),它能夠智能地識(shí)別PDF中的表格結(jié)構(gòu)。

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:高質(zhì)量表格提取

aspose.pdf庫(kù)也提供了表格提取的功能,適合商業(yè)應(yīng)用。

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:
            # 處理表格數(shù)據(jù)
            pass
    return tables

print(extract_tables_from_pdf(pdf_path))

四、總結(jié)

在PDF文本與表格提取的征程中,我們遇到了各種挑戰(zhàn),也探索了多種解決方案。每種方法都有其獨(dú)特的適用場(chǎng)景和優(yōu)缺點(diǎn):

  • 簡(jiǎn)單文本提取:PyPDF2和fitz是不錯(cuò)的選擇,簡(jiǎn)單易用,適合初學(xué)者快速上手。
  • 表格與精確文本提取:pdfplumber在處理表格方面表現(xiàn)出色,能夠滿足對(duì)文本和表格精確提取的需求。
  • 復(fù)雜PDF處理:pdfminer的靈活性使其能夠應(yīng)對(duì)復(fù)雜的PDF結(jié)構(gòu),適合需要深度自定義提取邏輯的場(chǎng)景。
  • 掃描PDF處理:pytesseract和PaddleOCR是OCR技術(shù)的代表,能夠攻克掃描版PDF的難題,但對(duì)圖像質(zhì)量有一定要求。
  • 商業(yè)應(yīng)用:aspose.pdf以其高質(zhì)量的提取效果和穩(wěn)定性,成為商業(yè)應(yīng)用中的優(yōu)選,盡管需要考慮成本因素。
  • 簡(jiǎn)化提取流程:textract通過(guò)封裝底層邏輯,提供了簡(jiǎn)潔高效的文本提取方式,適合快速開(kāi)發(fā)。
  • 智能表格提取:camelot在表格提取方面表現(xiàn)出色,能夠智能識(shí)別PDF中的表格結(jié)構(gòu),提高提取效率。

到此這篇關(guān)于Python PDF識(shí)別之文本內(nèi)容與表格提取方法總結(jié)的文章就介紹到這了,更多相關(guān)Python PDF識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)間數(shù)據(jù)同步功能

    python實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)間數(shù)據(jù)同步功能

    這篇文章主要介紹了python實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)間數(shù)據(jù)同步功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • python實(shí)現(xiàn)的二叉樹算法和kmp算法實(shí)例

    python實(shí)現(xiàn)的二叉樹算法和kmp算法實(shí)例

    最近重溫?cái)?shù)據(jù)結(jié)構(gòu),又用python,所以就用python重新寫了數(shù)據(jù)結(jié)構(gòu)的一些東西,以下是二叉樹的python寫法
    2014-04-04
  • Opencv python 圖片生成視頻的方法示例

    Opencv python 圖片生成視頻的方法示例

    這篇文章主要介紹了Opencv python 圖片生成視頻的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python遞歸全排列實(shí)現(xiàn)方法

    python遞歸全排列實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了python遞歸全排列實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python requests使用socks5的例子

    python requests使用socks5的例子

    今天小編就為大家分享一篇python requests使用socks5的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python/MySQL實(shí)現(xiàn)Excel文件自動(dòng)處理數(shù)據(jù)功能

    Python/MySQL實(shí)現(xiàn)Excel文件自動(dòng)處理數(shù)據(jù)功能

    在沒(méi)有服務(wù)器存儲(chǔ)數(shù)據(jù),只有excel文件的情況下,如何利用SQL和python實(shí)現(xiàn)數(shù)據(jù)分析和數(shù)據(jù)自動(dòng)處理的功能?本文就來(lái)和大家聊聊解決辦法
    2023-02-02
  • Python?Pandas學(xué)習(xí)之series的二元運(yùn)算詳解

    Python?Pandas學(xué)習(xí)之series的二元運(yùn)算詳解

    二元運(yùn)算是指由兩個(gè)元素形成第三個(gè)元素的一種規(guī)則,例如數(shù)的加法及乘法;更一般地,由兩個(gè)集合形成第三個(gè)集合的產(chǎn)生方法或構(gòu)成規(guī)則稱為二次運(yùn)算。本文將詳細(xì)講講Pandas中series的二元運(yùn)算,感興趣的可以了解一下
    2022-09-09
  • Python中的pickle模塊常用函數(shù)

    Python中的pickle模塊常用函數(shù)

    這篇文章主要介紹了Python中的pickle模塊常用函數(shù),pickle模塊使用的數(shù)據(jù)格式是python專用的,能夠把python對(duì)象直接保存到文件,而不需要轉(zhuǎn)化為字符串,也不用底層的文件訪問(wèn)操作把它們寫入到一個(gè)二進(jìn)制文件中,需要的朋友可以參考下
    2023-09-09
  • python Matplotlib數(shù)據(jù)可視化(2):詳解三大容器對(duì)象與常用設(shè)置

    python Matplotlib數(shù)據(jù)可視化(2):詳解三大容器對(duì)象與常用設(shè)置

    這篇文章主要介紹了python Matplotlib三大容器對(duì)象與常用設(shè)置的相關(guān)資料,幫助大家更好的學(xué)習(xí)和使用Matplotlib庫(kù)的用法,感興趣的朋友可以了解下
    2020-09-09
  • Python升級(jí)提示Tkinter模塊找不到的解決方法

    Python升級(jí)提示Tkinter模塊找不到的解決方法

    這篇文章主要介紹了Python升級(jí)提示Tkinter模塊找不到的解決方法,Tkinter的是Tk的GUI工具包,用來(lái)開(kāi)發(fā)GUI界面,需要的朋友可以參考下
    2014-08-08

最新評(píng)論