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

如何用Python提取Word/PDF中‘results’后的指定表格?

解决方案:定位“results”后提取目标表格

针对PDF文件的处理方法

  • 结合文本定位+表格提取:用PyMuPDF(fitz)先定位“results”的位置,再配合Camelot提取该位置之后的表格
    步骤:

    1. 用PyMuPDF遍历PDF每页,搜索“results”关键词,记录匹配页面和文本的纵坐标(y坐标)
    2. 对目标页面,用Camelot提取所有表格,对比表格顶部的y坐标是否大于“results”文本的y坐标,筛选符合条件的表格
    3. 封装逻辑成函数,批量遍历所有PDF文件

    示例代码片段:

    import fitz
    from camelot import read_pdf
    
    def extract_results_table(pdf_path):
        doc = fitz.open(pdf_path)
        target_pages = []
        for page_num in range(len(doc)):
            page = doc.load_page(page_num)
            text_instances = page.search_for("results")
            if text_instances:
                rect = text_instances[0]
                target_pages.append((page_num+1, rect.y1))  # Camelot页码从1开始
        doc.close()
        
        tables = []
        for page_num, y_pos in target_pages:
            page_tables = read_pdf(pdf_path, pages=str(page_num), flavor='lattice')
            for table in page_tables:
                table_y = table._bbox[1]
                if table_y > y_pos:
                    tables.append(table.df)
        return tables
    

针对Word(docx)文件的处理方法

  • 用python-docx定位“results”文本位置,再提取后续表格
    步骤:

    1. 遍历docx文档的所有元素(段落+表格),找到包含“results”的段落
    2. 从该段落的下一个元素开始,提取所有表格(若仅需第一个,提取后直接终止)

    示例代码片段:

    from docx import Document
    
    def extract_docx_results_table(docx_path):
        doc = Document(docx_path)
        target_tables = []
        all_elements = list(doc.element.body)
        
        for idx, elem in enumerate(all_elements):
            if elem.tag.endswith('p'):
                para_text = elem.text or ""
                if "results" in para_text.lower():
                    for elem_after in all_elements[idx+1:]:
                        if elem_after.tag.endswith('tbl'):
                            table_idx = all_elements.index(elem_after)
                            table = doc.tables[table_idx]
                            df = [[cell.text for cell in row.cells] for row in table.rows]
                            target_tables.append(df)
                            # 仅需第一个表格的话,取消下面注释
                            # break
                    break
        return target_tables
    

批量处理注意事项

  • 统一文件目录:将所有PDF/docx文件放在同一文件夹,用os模块遍历文件路径
  • 异常处理:添加try-except块,处理损坏文件、无“results”匹配的文件等情况
  • 结果存储:将提取的表格保存为CSV或Excel格式,便于后续分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:40:40