Python PDF識別之文本內容與表格提取方法總結
一、前言
在數(shù)字化辦公的浪潮中,PDF文件以其格式穩(wěn)定、兼容性強等優(yōu)點,成為文檔存儲與傳輸?shù)闹匾d體。然而,當我們需要從PDF中提取文本和表格進行進一步處理或分析時,卻常常面臨諸多挑戰(zhàn)。
不同的PDF文件類型、復雜的排版布局、掃描版PDF的圖像識別等問題,都可能成為提取過程中的“攔路虎”。本文將深入探討多種PDF文本與表格提取方法,結合實際代碼示例,為大家呈現(xiàn)一份全面的PDF提取指南。
二、文本提取方法
1. pdfplumber:精準提取文本與表格
pdfplumber是一個功能強大的Python庫,尤其在處理包含表格的PDF文件時表現(xiàn)出色。通過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:提取特定區(qū)域文本
pdfquery通過坐標定位,能夠精確提取指定區(qū)域的文本內容。
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:商業(yè)應用的高質量選擇
aspose.pdf是一個商業(yè)庫,提供了高質量的文本和表格提取功能。
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是一個簡潔高效的文本提取庫,能夠快速實現(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不僅擅長文本提取,還能精確提取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是一個專門用于從PDF中提取表格數(shù)據(jù)的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庫也提供了表格提取的功能,適合商業(yè)應用。
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))四、總結
在PDF文本與表格提取的征程中,我們遇到了各種挑戰(zhàn),也探索了多種解決方案。每種方法都有其獨特的適用場景和優(yōu)缺點:
- 簡單文本提取:PyPDF2和fitz是不錯的選擇,簡單易用,適合初學者快速上手。
- 表格與精確文本提取:pdfplumber在處理表格方面表現(xiàn)出色,能夠滿足對文本和表格精確提取的需求。
- 復雜PDF處理:pdfminer的靈活性使其能夠應對復雜的PDF結構,適合需要深度自定義提取邏輯的場景。
- 掃描PDF處理:pytesseract和PaddleOCR是OCR技術的代表,能夠攻克掃描版PDF的難題,但對圖像質量有一定要求。
- 商業(yè)應用:aspose.pdf以其高質量的提取效果和穩(wěn)定性,成為商業(yè)應用中的優(yōu)選,盡管需要考慮成本因素。
- 簡化提取流程:textract通過封裝底層邏輯,提供了簡潔高效的文本提取方式,適合快速開發(fā)。
- 智能表格提取:camelot在表格提取方面表現(xiàn)出色,能夠智能識別PDF中的表格結構,提高提取效率。
到此這篇關于Python PDF識別之文本內容與表格提取方法總結的文章就介紹到這了,更多相關Python PDF識別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python+Selenium實現(xiàn)表單自動填充和提交
你是不是也厭倦了每天重復表單填寫的工作,是時候讓技術來幫助我們解放雙手了,下面小編就為大家介紹一下如何使用Selenium和Python來自動填充和提交表單2023-09-09
使用Python pyqt打造任意Excel數(shù)據(jù)庫系統(tǒng)
這篇文章主要為大家詳細介紹了如何使用Python pyqt打造一個任意Excel數(shù)據(jù)庫系統(tǒng),可以對用戶上傳的任意電子表格Excel文件均可完成復雜數(shù)據(jù)庫查詢,需要的小伙伴可以了解下2025-07-07
Python實現(xiàn)同時兼容老版和新版Socket協(xié)議的一個簡單WebSocket服務器
這篇文章主要介紹了Python實現(xiàn)同時兼容老版和新版Socket協(xié)議的一個簡單WebSocket服務器,需要的朋友可以參考下2014-06-06

