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

求助:使用PyMUpdf提取PDF文本时排除表格及内部内容

用PyMuPDF提取不含表格、图片内容的PDF文本

要过滤掉表格和图片区域的文本,可以通过识别图片边界框和识别表格区域两步来排除对应内容,以下是具体实现方案:

核心思路

  1. 提取页面上所有图片的边界框,排除落在这些区域内的文本块
  2. 通过页面的绘图路径识别表格外框(或通过文本块的规整排列判断),排除表格区域内的文本块

代码实现

import fitz  # PyMuPDF

def extract_clean_text(pdf_path):
    doc = fitz.open(pdf_path)
    final_text = ""
    
    for page in doc:
        # 收集所有图片的边界框
        img_bboxes = []
        for img_info in page.get_images(full=True):
            xref = img_info[0]
            # 获取图片在页面上的位置矩形
            img_rect = page.get_image_rects(xref)[0]
            img_bboxes.append(img_rect)
        
        # 收集所有表格的边界框(通过识别大尺寸矩形边框)
        table_bboxes = []
        page_drawings = page.get_drawings()
        for drawing in page_drawings:
            if drawing["type"] == "rect":
                rect = drawing["rect"]
                # 过滤出可能是表格外框的矩形(可根据实际PDF调整阈值)
                if rect.width > 100 and rect.height > 50:
                    table_bboxes.append(rect)
        
        # 遍历所有文本块,过滤掉图片/表格区域内的内容
        text_blocks = page.get_text("blocks")
        for block in text_blocks:
            block_rect = fitz.Rect(block[:4])
            # 判断文本块是否与图片或表格区域重叠
            overlap_img = any(block_rect.intersects(bbox) for bbox in img_bboxes)
            overlap_table = any(block_rect.intersects(bbox) for bbox in table_bboxes)
            
            if not overlap_img and not overlap_table:
                final_text += block[4] + "\n"
    
    doc.close()
    return final_text

# 使用示例
if __name__ == "__main__":
    pdf_file = "target.pdf"
    clean_content = extract_clean_text(pdf_file)
    print(clean_content)

优化说明

  • 表格识别的尺寸阈值(100和50)可以根据你的PDF文档调整,若表格外框较小,可适当降低数值
  • 对于无外框的表格,可通过分析文本块的排列规律判断:比如同一行文本块的Y坐标接近、X轴间距均匀,且连续多行符合该特征,即可判定为表格区域,进一步过滤
  • 若文本块部分重叠表格/图片,可调整判断逻辑(比如文本块70%以上区域在目标区域内才排除),通过block_rect.intersect(bbox).area / block_rect.area > 0.7这类条件实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:32:31