File Summarizer(文件读取与三档结构化摘要)
Overview
把用户提交的文件资料(Word、PDF、Markdown、纯文本、WPS、OFD、图片及扫描件)
读取为全文内容,并一次生成三档摘要:
- 完整版(详摘):深度研读 / 归档,含论证结构、术语与实体。
- 精简版(速览):快速研判,结论 + 3–5 条要点 + 关键数据。
- 汇报版(简报):口头汇报,背景—内容—建议,≤100 字。
- 决策支撑(方案类增列):除三档摘要外,识别前置卡点、需拍板决策事项、
数据自洽矛盾,辅助可行性研判与评审决策(详见模板第十二—十四节)。
技能面向方案类文档为主、公文为辅:项目建议书、服务项目建议书、企业发来的
实施方案 / 项目方案、规划方案等是主要读取对象;公文(通知 / 函 / 报告)占比小。
内置纯标准库文本提取脚本(.docx / .doc / .pdf / .ofd / .xlsx 均无需安装),不依赖外部包;
含表 PDF 另提供 convert_pdf_docx.py 一键转 .docx(重建表格结构后可做数字钩稽);
扫描件与图片借助多模态识别,WPS 借助专用技能,Markdown 可直接 Read 读取,
覆盖上述文档的主要格式(含方案常附的 Excel 预算/测算表)。
When to Use
触发场景(满足其一即调用):
- 用户给出文件路径 / 上传文件,并出现「总结、概括、提炼、梳理、读一下、
提取要点、主要内容、核心内容、帮我看看这份材料、出个汇报版、速览」等意图。 - 用户提交项目建议书、服务项目建议书、企业实施方案 / 项目方案、规划方案、
建设方案、技术方案等方案类文档,需要快速掌握要点、评估可行性或汇报。 - 用户提交政策文件、报告、会议纪要、招商材料、法规文本等(占比较小),需要要点或汇报。
- 用户一次性提交多份材料,需要逐份摘要、横向对比,或形成汇报口径。
不触发:纯格式排版、翻译、改写润色(交给对应技能);用户只是聊天无文件。
Workflow
Step 0 — 识别文件类型
按扩展名(或内容)判断路由,见下表。找不到扩展名时先用 Read 工具探查前几行。
| 类型 | 扩展名 | 读取方式 |
|---|---|---|
| 纯文本 / Markdown | .txt .md .markdown | Read 工具直接读取(方案类文档常见交付格式,优先原生读取) |
| 表格文本 | .csv .tsv | Read 工具直接读取(注意分隔与编码) |
| Excel 表格 | .xlsx .xls | 运行 scripts/extract_xlsx.py(标准库,无需安装;解析工作表与共享字符串) |
| Word(新版) | .docx | 运行 scripts/extract_docx.py(标准库,无需安装) |
| Word(旧版) | .doc | 运行 scripts/extract_doc.py(标准库;优先 LibreOffice 转 docx,否则二进制尽力提取并标注精度有限) |
| PDF(文本型) | 运行 scripts/extract_pdf.py(标准库,无需安装);文本层经 zlib 解压 + 按字体 ToUnicode CMap 还原中文与数字,并按坐标(Tm/Td/TD/T*)重排阅读顺序。脚本会向 stderr 输出质量信号(quality=clean/messy/image、乱码率、字体数等,加 --json 输出完整 JSON),据此自动路由:image→转 Read 多模态;messy→摘要标注「建议转 docx 精校」;clean→直接摘要。含表格或需数字钩稽时仍建议先转 .docx/.xlsx |
|
| PDF(含表格,需钩稽) | 先 scripts/convert_pdf_docx.py 一键转 .docx(优先 LibreOffice,缺失时自动回退 PyMuPDF+python-docx 按坐标重建表格),再走 .docx 路径 → reconcile.py 钩稽。投资测算表 / 预算表 / 指标表必走此路 |
|
| PDF(图片/扫描型) | 先 scripts/rasterize_pdf.py 分页栅格化为小图(<240KB/页),再用 Read 工具逐页多模态识别(见 Step 1 第 6 条图片分支)。rasterize 需 PyMuPDF(本技能唯一第三方依赖) |
|
| WPS | .wps .wpt | 调用 wps-doc-extract 技能做二进制解析 |
| OFD(版式文件) | .ofd | 运行 scripts/extract_ofd.py(标准库,无需安装) |
| 图片 | .png .jpg .jpeg .bmp .webp .tif .tiff | 若单图 >256KB 先用 rasterize_pdf.py 下采样;否则直接 Read 工具多模态识别(含 OCR 视觉) |
Step 1 — 读取 / 提取内容
- 纯文本类(.txt/.md/.csv):直接用 Read 工具读取全文。
- .xlsx / .xls:运行提取脚本(使用受管 Python):
python ^ <skill>/scripts/extract_xlsx.py "<文件>" [<输出.txt>]
输出按工作表分块、单元格以制表符分隔,可直接用于摘要;数字与中文均保留。 - .docx:运行提取脚本(使用受管 Python):
python ^ <skill>/scripts/extract_docx.py "<文件>" [<输出.txt>]
若不指定输出,文本打印到 stdout,可直接用于后续摘要。
图片警告(P2):extract_docx.py会检测内嵌图片数量与字节占比,若图片较多
会向 stderr 输出警告(关键图件如截图/图表可能未提取),摘要时应留意,必要时
引导用户另存为 PDF 后用 Read 多模态识别。 - .doc(旧版 Word):运行
scripts/extract_doc.py(受管 Python)。
该脚本优先调用系统 LibreOffice(soffice) 转 .docx 后复用第 3 条脚本;
若未安装 LibreOffice,则退化为二进制尽力提取,并在输出首行标注
「精度有限,建议另存为 .docx 后重读」。读到的文本可能含少量噪声。 - .ofd:运行
extract_ofd.py,用法同第 3 条。 - .pdf:按类型分两路。
- 文本型(有文本层):运行extract_pdf.py(受管 Python,纯标准库),
经 zlib 解压内容流 + 按字体 ToUnicode CMap 还原中文与数字,并按文本坐标
(Tm/Td/TD/T*)将文本重排为「上→下、左→右」阅读顺序(改善版式错乱):
python ^ <skill>/scripts/extract_pdf.py "<文件>" [<输出.txt>] [--json] [--raw]
读取 stderr 质量信号并自动路由(P1,关键):脚本运行后向 stderr 输出
一行质量评估PDF 提取质量:quality=... | valid_chars=... | garble_ratio=... | fonts=... | 建议...,加--json输出完整 JSON 元数据。据此判定:quality=image(大文件但有效字符 <200,疑似图片/扫描型)→ 不要依赖
文本,立即切换到下方「图片/扫描型」分支用 Read 逐页多模态识别。quality=messy(乱码率 >15% 或有效字符偏少)→ 文本可用但版式错乱,
仍生成摘要但须在摘要显著位置标注「PDF 提取版式错乱,建议转 docx/xlsx 精校」,
含表格/数字钩稽时优先引导转格式。quality=clean→ 文本质量良好,直接进入摘要。
能力边界:能还原文字与数字,但 PDF 文本层固有局限仍在——① 仅文本层,
扫描件无效(已由 image 检测拦截);② 表格版式/单元格边界与部分字体编码仍可能
错乱。现extract_pdf.py已能按坐标重建「STRUCTURED ROWS」区块(制表符分隔的
多列行),含表文本型 PDF 可部分被reconcile.py钩稽(小计行求和等三类校验
已支持制表符表格);但表头/合并单元格/跨页断行仍可能丢失。
含表 PDF「一键转 docx」(P0,消除最大折损点):当 PDF 含投资测算表 / 预算表 /
指标表等需数字钩稽的表格时,不要停留在文本层,直接运行转换脚本重建表格结构:
python ^ <skill>/scripts/convert_pdf_docx.py "<文件.pdf>" [<输出.docx>]
脚本优先调用系统 LibreOffice(soffice)(保真度最高),未安装时自动回退
PyMuPDF+python-docx 按坐标重建多行表格(同一表格聚合为一个w:tbl)。
转换后再跑extract_docx.py(已支持w:tbl→ Markdown 表格行输出)→
reconcile.py,即可完成「合计=明细」等机械钩稽。
纯叙述无表 PDF 可直接提取,但摘要须标注「PDF 提取版式可能错乱」。- 图片 / 扫描型(纯图片型文件全流程):先分页栅格化再逐页读取——
1) 运行rasterize_pdf.py(受管 Python,需 PyMuPDF)将 PDF/大图分为
<240KB 的page_XX.jpg:
python ^ <skill>/scripts/rasterize_pdf.py "<文件>" [<输出目录>]
脚本把每张图路径打印到 stdout;若报缺 PyMuPDF,按提示
<venv>/Scripts/python.exe -m pip install PyMuPDF安装一次即可(仅此一处依赖)。
2) 对每张page_XX.jpg用 Read 工具多模态读取;多页依次读取后综合。
3) 识别质量低时按 Step 1 第 11 条标注「识别质量低,建议提供清晰版/重扫」。
4) 含表图片 / 扫描件的数字钩稽(P0,补齐格式盲区):若图片中的投资测算
/ 预算 / 指标表需要数字钩稽,在第 2 步多模态识别后,将表格手动/模型整理为
标准 Markdown 表格(| 表头 | ... |每行一表行)写入临时.md,再用
reconcile.py(或batch_extract.py --reconcile)跑机械钩稽——至此图片型
PDF 的表格数字也可被「合计=明细」等规则覆盖,不再因格式而漏检。效果取决于
多模态识别准确度,表格结构混乱时须在摘要标注「图片表格钩稽依赖 OCR,可能漏检」。
注:图片型 PDF 无文本层,extract_pdf.py会输出quality=image,此时不要依赖
文本,直接走本分支即可(含表情形按第 4 步经多模态整理后钩稽)。
- .wps:调用
wps-doc-extract技能(加载后按其流程解析)。 - 图片 / 扫描件:用 Read 工具多模态读取,识别图中文字与版面。
- 长文目录骨架优先读取:文件超约 30 页或约 1 万字(规划类常以章节多、
篇幅大),先抽取「章节标题树 / 目录骨架」建立结构索引,再分层读取各章内容并综合;
八维要点与溯源位置锚定到章节标题(如「第七章 投入与杠杆」),不依赖行号,
避免分块后位置漂移、漏段。必要时先写中间文本文件再汇总。 - 噪声清洗:剔除页眉页脚、目录、水印、乱码等干扰正文的内容。
- 提取质量判定与升级(防硬编):提取完成后,先判定质量再进入摘要:
- PDF 文本型:以
extract_pdf.py的 stderr 质量信号为准(见 Step 1 第 6 条),
image直接转 Read 多模态;messy标注后生成;clean进摘要。无需再手工数
字符。 - docx/doc/ofd/xlsx 脚本提取:可运行
scripts/check_extract_quality.py
(受管 Python)做统一门禁,输出 JSON 裁决verdict=pass/warn/fail:
fail(有效字符 <200)即判定「提取失败」,不强行生成摘要;warn(乱码率
>15% 或字符偏少)须在摘要标注质量风险。引导用户① 另存为 .docx 后重读(最稳),
或② 调用wps-doc-extract技能(针对 .wps/.et 等私有格式),或③ 提供清晰版 /
重扫后重试。 - Read 多模态(pdf/图片/扫描件):若识别出有效文字过少(疑似多页却
< 50字)或明显与版面不符,判定为「识别质量低」,在摘要显著位置标注,
不强行产出完整要点(见 Step 3 读图自检与质量信号)。 - 任何情况下都不得用模型「想象」内容填补提取缺口;缺口一律标「待核实」或「未能提取」。
(extract_docx.py的图片警告亦在此环节一并留意,见 Step 1 第 3 条。)
- PDF 文本型:以
> 运行环境:本技能脚本以 Python 3 运行。下文以 python 指代实际解释器
> (WorkBuddy 受管 Python 或任意可用 Python 3),以 <skill>/scripts/ 指代技能脚本目录。
> 标准库脚本(extract_docx / extract_doc / extract_ofd / extract_xlsx / extract_pdf /
> reconcile / batch_extract / check_extract_quality / make_docx)无需安装即可运行;
> convert_pdf_docx.py 与 rasterize_pdf.py 需已安装 PyMuPDF(及 python-docx)的
> Python 环境。
Step 2 — 内容理解层抽取(含类型适配)
在生成摘要前,按 references/summary-template.md 做一轮结构化理解抽取:
- 内容理解层:还原「总论点 → 分论点 → 论据」论证结构;标注作者立场
(主张 / 客观陈述 / 建议 / 批评 + 倾向强度);抽取核心术语表与涉及的
机构 / 人物 / 地名 / 政策文件实体。 - 类型适配:判断文档是否为方案 / 建议书类(项目建议书、服务建议书、
实施方案、规划方案等)。若是,进一步区分两类子文档,核心要点分别按不同
八维口径组织(详见模板第二节 A1 / A2): - 项目建议书 / 实施方案类(A1,标准八维):背景目标 → 建设内容 →
投资估算 → 实施周期 → 预期效益 → 组织保障 → 风险应对 → 待确认。 - 规划类(A2,八维变体):产业 / 区域 / 专项规划,多年度演进、强调战略
布局与杠杆。八维变体为——战略定位与目标、产业布局 / 行动框架、投入与杠杆、
演进路线 / 阶段、产业集群效益、工作机制 / 专班、风险与应对、待确认(含需拍板议题)。
规划类常以章节多、篇幅大,读取时按 Step 1 第 9 条「目录骨架优先」,
八维要点位置锚定章节标题。
公文类仍走通用结构,不强行套用方案维度。八维抽完后,对方案类做可行性研判
(总体研判结论 + 风险优先级表,见模板第二节 C),避免只罗列不判断。 - 用户自定义优先维度(可选):若用户在请求中明确「重点看 X / 只关心投资与周期 /
忽略风险」等,则在八维中优先展开指定维度、压缩其余;未指定时八维均衡呈现。 - 决策支撑抽取(方案类增列):在八维与研判基础上,额外识别三类决策要素,
供评审使用(详见模板第十二—十四节): - 前置卡点:不满足则方案不成立的硬性门槛(如用地审批、资金审批),
标当前状态与阻塞等级(高 / 中 / 低)。 - 决策事项:需领导 / 会议拍板的开放性议题(互斥路径、股权上限、授权事项),
列选项、影响与建议默认倾向。 - 数据钩稽校验:对互相引用的数字做合计 = 明细、倍数 / 比例、跨章一致性验算,
主动标「矛盾(待核实)」,而非仅被动等待。优先运行scripts/reconcile.py
对提取全文做机械钩稽(详见 Resources;零依赖,受管 Python 运行),脚本覆盖五类:
小计行≠明细和、风险加权值≠公式、合并标签组表头≠各项和、百分比列合计≠100%、
跨表数值可勾稽(一致提示)。reconcile.py --out <报告.md>可同时产出独立钩稽报告
附件;多份材料批量预处理可用batch_extract.py --reconcile --report。候选清单经人工
确认后写入摘要,避免每次依赖模型自觉而漏算;脚本未覆盖的跨章文字表述矛盾仍由模型主动发现。
Step 3 — 生成三档摘要
严格按 references/summary-template.md 的结构与风格,同次产出三档:
- 完整版(详摘):文件概况 → 一句话结论 → 核心要点(分层编号 +
原文位置)→ 论证结构与立场 → 关键数据/政策引用(表)→ 术语与实体 →
待关注/存疑事项 → 可行性研判(总体研判 + 风险优先级表) →
前置条件 / 关键卡点(方案类增列) → 决策事项清单(方案类增列) →
建议动作(可选)。篇幅 400–600 字。
- 快捷模式(按需):用户请求含「速览 / 只要要点 / 简版 / 别太细」等时,
完整版跳过「论证结构与立场」「术语与实体」两节,其余模块照常,
以缩短篇幅、突出结论与要点;该开关不影响精简版 / 汇报版。 - 精简版(速览):一句话结论 + 核心要点 3–5 条(≤30 字/条,附位置)+
关键数据 1–3 项 + 研判一句话(方案类可选)。篇幅 150–250 字。 - 汇报版(简报):背景—内容—建议三段(或 3 条要点),≤100 字,可直接宣读;
方案类建议可含研判倾向(如「建议推进评审」/「暂缓,待补材料」)。
> 方案 / 建议书类文档:完整版核心要点优先按模板第二节的八维框架排列——
> 项目建议书 / 实施方案类用 A1 标准八维,规划类用 A2 八维变体(战略定位、
> 产业布局、投入与杠杆、演进路线、产业集群效益、工作机制 / 专班等);
> 公文类按通用结构,不强行套用方案维度。
通用要求:
- 结论先行,先总后分;三档内容一致、互不矛盾。
- 每条要点附「来源位置」:方案类优先用「第 X 章 / 第 X 节 / 第 X 段 / 表 X」
(多无页码);PDF / 扫描件可用「第 X 页」。不编造位置。
- 量化信息、法规、政策引用必标名称与位置;无法确认标注「待核实」,不得编造。
- 识别质量自检(图片 / 扫描件):若识别出有效文字过少(如疑似多页却 <50 字)、
或读图自检发现与版面明显不符,判定为「识别质量低」,在摘要显著位置标注
「识别质量低,建议提供清晰版 / 重扫」,不强行产出完整要点。
- 读图自检:图片 / 扫描件识别出的文字、数据,须回看原图复核;与原文不一致
或存疑者标「待核实」,不得直接采信。
- 识别质量与覆盖度信号(全格式):无论图片或纯文本,摘要开头均标注一行
「识别质量:覆盖第 X–Y 章 / 共 N 章,疑似缺失:Z(或"无")」。纯文本 / 结构化文档
依据实际读取到的章节标题判定覆盖度;若文档被分块读取,须确认各块均已覆盖、无漏段,
否则在信号中明示「部分章节未读」。此举便于用户判断摘要完整性,避免静默漏读。
Step 4 — 多文件、关联与落盘
- 多份材料:先给横向对比概览(主题/结论/差异),再逐份出三档摘要。
- 多方案比选:用户提交 ≥2 份方案时,按模板第十一节产出比选表(八维 + 综合研判),
列初步优劣判断,供决策参考。 - 待评审问题清单:方案类存在待确认/存疑事项时,按模板第十节单独产出,
用于向企业质询(序号 | 问题 | 涉及维度 | 位置 | 建议补充)。 - 决策事项清单:方案含需拍板议题时,按模板第十二节单独产出
(选项 | 影响 | 建议),供内部会议决策;与待评审清单区分(后者问企业,前者内部拍板)。 - 前置条件 / 关键卡点:方案存在硬性门槛时,按模板第十三节单独产出,
高等级卡点须作为「能否推进」首要约束提示。 - 数据钩稽校验:方案含互相引用数字时,先运行
scripts/reconcile.py(受管 Python)
得候选矛盾清单(小计求和 / 风险加权 / 合并标签组 / 百分比合计 / 跨表一致 五类),
再人工复核确认,按模板第十四节写入「矛盾(待核实)」;多份材料可先用
batch_extract.py --reconcile --report批量预处理并汇总钩稽报告。reconcile.py --out
可把报告独立落盘为评审附件。脚本未覆盖的跨章文字表述矛盾,仍由模型主动发现。 - 关联(可选):文章引用法规 / 政策时,可经北大法宝(已连接)核对效力与
版本;需要交叉印证时,可经 IMA 知识库(已连接)比对用户既有资料。 - 下游动作(可选):可接续「转公文 / 转汇报 / 提取待办 / 生成思维导图」等技能;
需把三档摘要导出为正式 .docx 时,用scripts/make_docx.py将 Markdown 摘要
转为 .docx(标准库;支持标题 / 列表 / 表格),输出到<输出目录>\。 - 落盘:用户要求保存时,写到
<输出目录>\,文件名
摘要_<原文件名>_<YYYYMMDD>.md;三档合并于一文件,用分隔标题区分。
Resources
scripts/
extract_docx.py— 从 .docx 提取纯文本(标准库 zip+xml,无需安装)。按 body 顺序遍历段落与表格:w:p输出段落文本,w:tbl逐行输出 Markdown 表格行(| 单元格 | 单元格 |),供reconcile.py直接钩稽。额外检测内嵌图片数量与字节占比,图片较多时向 stderr 输出警告(关键图件可能未提取)。extract_doc.py— 从 .doc(旧版 Word)提取文本(标准库;优先 LibreOffice 转 docx,否则二进制尽力提取)。extract_ofd.py— 从 .ofd(GB/T 33190)提取文本(标准库,扫描全部 TextCode)。extract_xlsx.py— 从 .xlsx/.xls 提取工作表文本(标准库 zip+xml,解析共享字符串与数值,无需安装)。extract_pdf.py— 从文本型 PDF 提取中文与数字(标准库;zlib 解压内容流 + 按字体 ToUnicode CMap 还原 + CMap 层部首字符归一化 + 按坐标重排阅读顺序 + 按坐标重建 STRUCTURED ROWS 表格行)。向 stderr 输出质量信号(quality=clean/messy/image、乱码率、孤立汉字比;--json输出完整 JSON,--raw回退流序),供自动路由:image→rasterize+Read 多模态、messy→标注转 docx 精校、孤立汉字比过高→降级 messy(堵住错映射字形盲区)。含表格或需数字钩稽的 PDF 仍建议转 .docx/.xlsx。convert_pdf_docx.py— 含表 PDF「一键转 docx」(消除表格折损最大点)。优先调用系统 LibreOffice(soffice) 转换(保真最高,自动探测 PATH 与C:\Program Files\LibreOffice\program\soffice.exe);未安装时回退 PyMuPDF+python-docx:按 span 坐标聚行、按 x 间距分列、相邻表格行聚合为单个多行w:tbl,并做三项后处理——① 部首字符归一化(康熙部首/部首补充 → 标准汉字);② 单元格碎片合并(2000|万|辆→2000万辆、新增|2.5|亿→新增2.5亿、A|+|B→A+B);③ 跨页续表拼接(相邻页同列布局的表格行自动并入同一w:tbl,解决多页表格被割裂、reconcile 无法跨页钩稽)。转换后接extract_docx.py(输出 Markdown 表格行)→reconcile.py完成「合计=明细」钩稽。回退分支需受管 venv(已装 fitz / python-docx):python。rasterize_pdf.py— 图片型/扫描型 PDF 与超大图片分页栅格化(需 PyMuPDF,本技能唯一第三方依赖;纯标准库无法完成渲染)。将 PDF 每页 / 大图整体下采样为 <240KB 的 JPEG 到指定目录,供 Read 逐页读取,打通「纯图片型文件」从输入到摘要的端到端流程。当前解释器缺 fitz 时自动改用已安装 fitz 的受管 venv 重执行;都没有则打印安装提示。check_extract_quality.py— 提取质量统一门禁(标准库)。对任意提取文本输出 JSON 裁决verdict=pass/warn/fail(有效字符 / 乱码率阈值),脚本化 Step1.11 规则,避免模型主观漏判。make_docx.py— 将 Markdown 摘要转为 .docx 正式版式(标准库;标题 / 列表 / 表格)。batch_extract.py— 批量提取与钩稽入口(标准库;调用各提取脚本 + reconcile)。对目录或单个文件按扩展名分发提取,统一输出.txt到--outdir,可选--reconcile汇总各文件钩稽结果并生成batch_manifest.json与--report独立钩稽报告。多文件批量预处理用:
python <skill>/scripts/batch_extract.py "<目录>" --outdir <DIR> --reconcile --report <报告.md>reconcile.py— 数据钩稽自洽校验(标准库,零依赖)。对提取全文做五类机械验算:
① 小计/合计行 = 其明细行之和(中文与英文 total/subtotal/overall 标签均可识别);
② 风险概率加权值 = P(A)×期望值 + P(B)×保守值;③ 合并标签组"表头值 ≠ 各子项之和"
且合计值在他处同实体表出现;④ 百分比列合计 ≠ 100%(列标题含 占比/比例/份额/比重/
百分比 时校验);⑤ 跨表数值勾稽(正向一致性提示:某表合计≈另一表某列分项之和、同单位、
语义相关则提示"可勾稽一致",供评审交叉验证;仅报一致不报矛盾,避免误报)。
支持 Markdown 表格(|分隔)与制表符表格;金额解析兼容带单位(亿元/万元/元)与纯数字;
容差为相对 0.5%(下限 1 元),小额矛盾同样可捕获。输出带置信度(HIGH/MED)的待核实候选
清单;--out <文件>可同时把人类可读报告写入独立文件(钩稽报告附件)。运行:
python <skill>/scripts/reconcile.py "<提取文本文件>" [--json] [--out <报告.md>]。
references/
summary-template.md— 三档摘要的输出结构、内容理解层、决策支撑(前置卡点 /
决策事项 / 数据钩稽)、比选与质量自检规范,Step 2/3 必读。
Notes / Limitations
.doc(Word 97–2003):由extract_doc.py处理——优先 LibreOffice 转 docx(精度高),
无 LibreOffice 时二进制尽力提取(精度有限,输出首行已标注),建议另存为 .docx 后重读。.xlsx提取覆盖共享字符串、数值、多工作表;合并单元格、公式仅取缓存值,
公式本身不展开计算;复杂样式(颜色、字体)被忽略,仅取文本与数字。- 扫描件 / 图片的文字识别依赖多模态读取,手写体、模糊、倾斜严重的版面
识别率会下降,须按「读图自检」要求标「待核实」。 - 文本型 PDF:由
extract_pdf.py提取(标准库,无需安装);zlib 解压内容流 +
按字体分别解析 ToUnicode CMap 还原中文与数字(阿拉伯数字直接按字节还原以规避
部分字体 ToUnicode 错映射),并按文本坐标(Tm/Td/TD/T*)重排阅读顺序以改善
版式错乱,文末另追加「STRUCTURED ROWS」区块(按坐标重建的多列表格行,制表符分隔)。
脚本向 stderr 输出质量信号(quality=clean/messy/image、乱码率、孤立汉字比),
自动路由:image→rasterize_pdf.py分页 + Read 多模态;messy(乱码率>15% 或
孤立汉字比>0.6,堵住错映射字形盲区)→标注转 docx 精校;clean→直接摘要。
能力边界:① 仅文本层,扫描件由 image 检测拦截后转多模态;② 表格版式/单元格边界
与部分字体编码仍可能错乱,但含表 PDF 现可经 STRUCTURED ROWS 被reconcile.py
部分钩稽(小计行求和等);关键投资测算表以convert_pdf_docx.py转 .docx 为准。 - 部首字符陷阱(已修复,P1):部分 PDF 的 ToUnicode 把常用汉字映射到「康熙部首」
(U+2F00–U+2FDF)或「CJK 部首补充」(U+2E80–U+2EFF),字形几乎相同但码位不同,
会静默导致关键词匹配(合计/小计/总投资)与单位识别失效、reconcile.py漏检。
extract_pdf.py(CMap 层)与convert_pdf_docx.py(span 层)均已统一归一化;
实测某真实方案 PDF 部首字符 597 → 0。若自行接入其他提取路径,须同样处理。 - 含表 PDF → docx 转换(
convert_pdf_docx.py)能力边界: - LibreOffice(soffice) 分支未启用(环境限制):本机未安装 LibreOffice 且无
winget/choco/scoop 包管理器,无法一键安装;如此分支可用,表格保真度最高、上述
回退局限基本归零。后续若装好 soffice,脚本已自动探测生效,无需改代码。 - 回退分支(PyMuPDF+python-docx)已增强:① 跨页续表自动拼接为同一
w:tbl
(解决多页表格割裂、reconcile 无法跨页钩稽);② 部首字符归一化、单元格碎片合并。
已验证可正确还原「合计行 + 多行明细」规则表格并被reconcile.py捕获矛盾
(合计=9 ≠ 3+2=5,含跨页场景)。但 ③ 合并单元格、无边框松散排版仍可能分列不准
(列间距阈值 28pt 为经验值);④ 页眉页脚、图注可能被误并入表;⑤ 结果仍属「机器重建」,
关键数字须回原文核对。回退分支依赖 fitz + python-docx,须用受管 venv 执行;
stdlib 提取脚本不受影响。 - 图片 / 扫描型 PDF 含表钩稽(P0-2):纯图片型 PDF 本无文本层,表格数字须经
rasterize_pdf.py+ Read 多模态识别;含表需钩稽时,将多模态整理的 Markdown 表格
落盘后接reconcile.py/batch_extract.py --reconcile即可覆盖「合计=明细」等规则,
补齐最后格式盲区。效果取决于多模态识别准确度,结构混乱时须在摘要标注「图片表格钩稽
依赖 OCR,可能漏检」。 - 图片/扫描型 PDF 与超大图片:由
rasterize_pdf.py分页栅格化为 <240KB 的 JPEG
后,逐页用 Read 多模态读取(见 Step 1 第 6 条图片分支)。rasterize_pdf.py是
本技能唯一依赖 PyMuPDF 的脚本(渲染问题纯标准库无法替代);已安装则自动使用,
未安装脚本会给出一次性pip install PyMuPDF提示。其余提取脚本保持零依赖。 - .docx:由
extract_docx.py提取(标准库 zip+xml)。脚本会检测内嵌图片并向
stderr 警告关键图件可能未提取;若文档图片较多且图含重要信息,引导用户另存为
PDF 后用 Read 多模态识别,避免静默漏读。 - OFD 提取按 TextCode 顺序收集,复杂版式(跨页、文本框叠加)的视觉顺序
可能略有偏差,足以支撑摘要,但不保证逐字精确排版。 - 长文须分块读取后综合,否则存在截断漏段风险;超长表格、图中图表仅作文字带过,
未被抽取为结构化数据。 - 数据钩稽校验为"脚本机械校验 + 人工确认"双轨:
reconcile.py覆盖小计行求和、
风险加权公式、合并标签组跨表佐证三类;其余跨章文字表述矛盾、图表内数字仍由模型
主动发现。脚本输出均为「待核实」候选,非最终结论;数字以图表呈现或 OCR 误差时
可能漏检,须结合「读图自检」综合判断。