You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pdfminer提取PDF指定字号文本并批量处理生成pandas数据表

代码问题诊断
  • 类型匹配错误:character.size返回的是浮点型数值,你用它和字符串'10.000000000000057'做等值判断,结果永远为False,过滤逻辑完全失效
  • 追加逻辑位置错误:Extract_Data.append(element.get_text())写在了字号判断的循环外,不管字号是否符合要求,都会把当前文本块的内容加入结果列表,最终返回所有文本
  • 浮点数精度问题:PDF渲染时的计算误差会导致字号出现大量小数位,直接用==做等值判断稳定性极差,应该用误差范围近似匹配
单PDF指定字号提取修正代码
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer, LTChar

# 定义目标字号、允许的误差范围
TARGET_SIZES = [9.800000000000068, 10.000000000000057]
TOLERANCE = 1e-6

Extract_Data = []
for page_layout in extract_pages(path):
    for element in page_layout:
        if isinstance(element, LTTextContainer):
            # 标记当前文本块是否包含符合字号要求的字符
            is_target = False
            for text_line in element:
                for character in text_line:
                    if isinstance(character, LTChar):
                        # 近似匹配字号
                        for size in TARGET_SIZES:
                            if abs(character.size - size) < TOLERANCE:
                                is_target = True
                                break
                        if is_target:
                            break
                if is_target:
                    break
            if is_target:
                Extract_Data.append(element.get_text())

Data = ''.join(Extract_Data)
批量处理PDF生成pandas DataFrame完整代码
import os
import pandas as pd
import io
from pdfminer.layout import LTTextContainer, LTChar, LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument, PDFTextExtractionNotAllowed
from pdfminer.converter import PDFPageAggregator

directory = 'C:/Users/Sample/'
TARGET_SIZES = [9.800000000000068, 10.000000000000057]
TOLERANCE = 1e-6
# 存储所有PDF的提取结果,每个元素对应一份PDF的内容
all_pdf_content = []

for file in os.listdir(directory):
    if not file.endswith(".pdf"):
        continue
    file_path = os.path.join(directory, file)
    # 存储单份PDF的符合要求文本
    single_pdf_text = []
    
    resource_manager = PDFResourceManager()
    params = LAParams(detect_vertical=True, all_texts=True)
    device = PDFPageAggregator(resource_manager, laparams=params)
    interpreter = PDFPageInterpreter(resource_manager, device)

    with open(file_path, 'rb') as fh:
        parser = PDFParser(fh)
        document = PDFDocument(parser, '')
        if not document.is_extractable:
            raise PDFTextExtractionNotAllowed

        for page in PDFPage.create_pages(document):
            interpreter.process_page(page)
            page_layout = device.get_result()
            for element in page_layout:
                if isinstance(element, LTTextContainer):
                    is_target = False
                    for text_line in element:
                        for character in text_line:
                            if isinstance(character, LTChar):
                                for size in TARGET_SIZES:
                                    if abs(character.size - size) < TOLERANCE:
                                        is_target = True
                                        break
                                if is_target:
                                    break
                            if is_target:
                                break
                        if is_target:
                            break
                    if is_target:
                        single_pdf_text.append(element.get_text())
    # 合并单份PDF的所有符合要求文本,存入总列表
    all_pdf_content.append([''.join(single_pdf_text)])

# 生成每行对应一份PDF内容的DataFrame
df = pd.DataFrame(all_pdf_content, columns=['提取内容'])

内容的提问来源于stack exchange,提问作者id345678

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:57:01