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

如何实现重文本PDF/HTML结构化段落提取并导出指定格式Excel

方案结论

该需求完全可实现,无需硬编码大量分支判断,基于EUR-Lex平台文档的标准化结构,按以下步骤实现即可稳定输出符合字段要求的Excel表格。

具体实现步骤

1. 补全缺失的页码信息

放弃纯HTML解析丢页码、纯PDF解析结构乱的二选一思路,用双源匹配的方式解决:

  • 用pymupdf(导入名为fitz)加载官方PDF文件,逐页提取所有文本块,每个文本块自带所在页码属性,建立「文本片段:页码」的映射字典,取文本前20个字符做匹配键即可,容错率足够。
  • 保留同版本HTML做结构解析,遍历HTML段落节点时,用段落文本前20个字符去映射字典里查对应页码,直接给节点挂载页码属性,不需要手动识别PDF排版。

2. 替换硬编码匹配为正则+状态机

你之前遇到的章节重复匹配、引用内容重复问题,本质是没有做上下文状态留存和节点去重,不需要引入NLTK,用基础正则加三个状态变量就能解决:

  • 初始化三个全局状态变量,遍历DOM节点时实时更新:
    • doc_title:固定为文档总标题,即欧盟《人工智能法案》(Regulation (EU) 2024/1689)
    • current_section:存储当前所属一级节标题,初始为空
    • current_subtitle:存储当前所属二级子节标题,初始为空
  • 编写两个基础正则规则匹配层级标题,匹配到对应节点时立刻更新对应状态变量:
    • 一级节匹配规则:r'^(CHAPTER|Section)\s+[IVX0-9]+',适配EUR-Lex文档统一的「CHAPTER/Section + 罗马/阿拉伯数字编号」的一级标题格式
    • 二级子节匹配规则:r'^(Article|Subsection)\s+[0-9]+',适配「Article/Subsection + 阿拉伯数字编号」的二级标题格式
  • 节点去重逻辑:每处理完一个节点,给节点加data-processed=1的自定义标记,后续遍历到带该标记的节点直接跳过,彻底解决引用内容重复写入的问题。
  • 有效正文判断逻辑:排除匹配到的一二级标题节点,过滤掉页脚、版权声明类节点(这类节点统一以/*、纯数字页码开头,直接正则过滤即可),剩余的<p>标签节点即为需要写入的正文段落。

3. 直接写入Excel,跳过中间文本文件

你已经完成表头写入的前提下,不需要额外输出格式化中间文件,直接逐行写入即可:

  • 行号从1开始计数(第0行留作已写好的表头),每识别到一个有效正文段落,按列顺序写入五个字段:
    • 第0列:节点挂载的页码值
    • 第1列:固定的doc_title值
    • 第2列:当前状态的current_subtitle值
    • 第3列:当前状态的current_section值
    • 第4列:用BeautifulSoup的.get_text(strip=True)方法提取的段落纯文本,自动去除多余换行、首尾空格
  • 每写完一行,行号自增1即可。
注意事项
  • 不要尝试纯PDF解析章节结构,EUR-Lex的PDF存在跨页断行、标题被文本块拆分的问题,HTML做结构解析+PDF补页码的组合方案稳定性远高于纯PDF解析。
  • 正则匹配不需要写得过于严格,只要匹配标题开头的编号特征就更新状态,段落内的有序/无序列表内容直接归属到当前状态对应的章节下即可,不需要额外解析列表层级。
  • 如果遇到标题被拆分到多个相邻<span>标签的情况,直接拼接相邻同层级标题节点的文本,再赋值给对应状态变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:51:25