21人参与 • 2025-08-21 • Python
在数字化办公的浪潮中,pdf文件以其格式稳定、兼容性强等优点,成为文档存储与传输的重要载体。然而,当我们需要从pdf中提取文本和表格进行进一步处理或分析时,却常常面临诸多挑战。
不同的pdf文件类型、复杂的排版布局、扫描版pdf的图像识别等问题,都可能成为提取过程中的“拦路虎”。本文将深入探讨多种pdf文本与表格提取方法,结合实际代码示例,为大家呈现一份全面的pdf提取指南。
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)
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)
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))
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))
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))
对于扫描版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))
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))
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))
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)
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)
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文本与表格提取的征程中,我们遇到了各种挑战,也探索了多种解决方案。每种方法都有其独特的适用场景和优缺点:
到此这篇关于python pdf识别之文本内容与表格提取方法总结的文章就介绍到这了,更多相关python pdf识别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论