PPT OCR 转 Word 整理技能
描述
将PPT导出的PDF文件(尤其是扫描版/图片版PDF)通过 OCR 识别全部文字内容,
智能整理为结构清晰、可读性强的Word文档(.docx)。
OCR 引擎自动探测(本地优先、零密钥优先):优先使用本地免费引擎(RapidOCR / PaddleOCR / Tesseract),
无需任何密钥即可开箱即用;仅在配置了腾讯云密钥时,才将其作为高精度可选增强后端。
使用场景
- 用户上传PPT的PDF文件,要求"转文字"、"识别文字"、"整理成Word"、"文字版"
- 用户上传讲座/培训/会议PPT,要求提取内容并整理
- 用户说"把这个PPT文字整理一下"、"转成可读版本"等类似需求
输出格式(固定,不可更改)
(一)<单位><讲者>教授《<讲座标题>》
1、幻灯片1:<幻灯片标题>
<正文段落 / 表格 / 列表>
2、幻灯片2:<幻灯片标题>
...
(二)<单位><讲者>教授《<讲座标题>》
1、幻灯片1:<幻灯片标题>
...
- 讲座序号用中文括号数字:(一)(二)(三)
- 幻灯片序号用阿拉伯数字加顿号:1、2、3、
- 每页幻灯片以"数字、幻灯片N:标题"为二级标题
- 讲者信息如果用户没提供,从PPT封面/标题页OCR中提取;提取不到则留空(不写"未知")
- 单位信息同理,从PPT中提取
核心工作流
第一步:确认输入与选择 OCR 引擎
- 确认用户上传的PDF文件路径。
- OCR 引擎自动探测,按以下优先级选用(见
scripts/ocr_engine.py):
- RapidOCR(推荐,轻量):rapidocr_onnxruntime,PaddleOCR 模型的 ONNX 版,无需 paddlepaddle,纯 CPU 推理。
- PaddleOCR(中文最强):paddleocr,百度开源,需paddlepaddle。
- Tesseract(极轻):本机tesseract+ 中文包(tesseract-ocr-chi-sim)。
- 腾讯云(可选增强):仅当设置TENCENT_SECRET_ID/TENCENT_SECRET_KEY时启用,作为云端高精度后端。 - 也可通过命令行
--engine rapidocr|paddleocr|tesseract|tencent强制指定引擎
(指定引擎不可用时脚本会打印警告并自动回退到可用引擎)。 - 若无任何本地引擎,脚本会给出安装提示;腾讯云密钥不是必须。
本地引擎安装(任选其一,免费、零密钥,Windows/Linux 通用):
pip install rapidocr-onnxruntime # 推荐,轻量,pip 即装即用
# 或
pip install paddleocr # 中文最强(自动兼容 2.x/3.x API)
# 或(极轻)
sudo apt-get install -y tesseract-ocr tesseract-ocr-chi-sim # Linux
# Windows 装 tesseract:UB-Mannheim 安装包(勾选 chi_sim 并加入 PATH)
基础依赖(无论选哪个引擎都需要):
pip install pymupdf python-docx pillow numpy
运行命令(Windows 上务必加 -X utf8,防 GBK 控制台报错):
python -X utf8 scripts/ppt_ocr_to_word.py <pdf> <output.docx> [--title ... --speaker ... --unit ...] [--pages 1-5,8]
--pages 只处理指定页,调试格式效果时用,可大幅省时。
第二步:PDF转图片
使用 PyMuPDF(pymupdf)将PDF每页转为PNG:
import pymupdf
doc = pymupdf.open(pdf_path)
for i in range(len(doc)):
page = doc[i]
pix = page.get_pixmap(matrix=pymupdf.Matrix(3, 3)) # 3倍缩放,提高小字识别率
pix.save(f"page_{i+1}.png")
关键:必须用3倍及以上缩放,否则底部小字(参考文献、图表标注)会识别不出来。
第三步:全页OCR识别
调用第一步探测到的本地 OCR 引擎(RapidOCR / PaddleOCR / Tesseract)逐页识别;
若已配置腾讯云密钥,则将其作为高精度可选后端启用。
速度控制:每页间隔 0.3~0.5 秒,防止本地引擎过载。
第四步:二次确认(关键!)
全页识别完成后,必须额外对每页底部约38%区域做6倍放大OCR,专门找参考文献。
参考文献通常字号很小(7-8号),全页识别容易漏掉。
检查模式:
- 行首匹配 [数字] 模式(如 [1]、[2])
- 行内包含上标引用标记(如 "依从性1,2" 说明底部有对应参考文献)
第五步:内容整理
将OCR原始行整理为可读结构:
5.1 过滤PPT界面干扰
以下内容必须过滤(完整匹配才删):
- PPT工具栏多字词:幻灯片放映、审阅、视图、录制、帮助、Acrobat、共享、
形状填充、形状轮廓、形状效果、快速样式、创建并共享、排列、选择、
Adobe PDF、字体、段落、绘图、编辑、Adobe Acrobat、备注、批注等
- 工具栏符号串:↓↑、A^A^、|A|、ab、AV、Aa 等
- 单数字:1~3位纯数字(页码)、录屏时间戳(14:52)、页码比(1/103)
不要过滤(脚本已按此实现,改代码时勿回退):
- 单个常用汉字(如"和""的""以""应")——很可能是正文
- 单个大写字母(如 S、N、P)——可能是统计量符号或缩写
注意:不要过度过滤。只有确定是PPT界面元素的才删,拿不准的一律保留。
5.1b 页眉/单位名过滤(医学PPT特别注意)
"XX人民医院"这类单位名常出现在每页页眉,但也可能就是幻灯片标题或表格列名
(如"医院等级")。脚本采用三重防护,修改时必须保留:
1. 跨页重复优先:同一短文本在 ≥35% 页面重复出现才判为页眉删除
2. 首行豁免:每页第一行(标题位置)的单位名不删
3. 顶部区域限制:关键词匹配(医院/大学/附属等)只在页面内容区上部 20% 生效,
页面中部/下部的短机构词多为表格列名或正文,保留
5.2 段落合并
将零散的OCR行合并为完整段落。合并规则:
- 上一行结尾不是句号/问号/感叹号/分号/冒号/省略号等结束标点 → 与下一行合并
- 下一行以数字+顿号、项目符号、●○□■◆、①②③等开头 → 不合并(新列表项)
- 下一行是纯英文大写缩写(如RCT、RWD)且很短 → 不合并(可能是小标题)
- 上一行结尾有结束标点,但下一行很短(<8字)→ 不合并(可能是小标题)
5.3 表格识别与格式化
以下情况判定为表格,用真正的Word表格呈现:
- 有多组"类别-内容"对应的结构(如"客户数据:......" "季度业绩数据:......")
- 有明确的表头行(如"对比维度 | RCT | RWS")
- 有"序号"列 + 多行内容
- 有明确的"项目 / 说明 / 内容"等列结构
表格格式:
- 第一行为表头,加粗,浅色背景
- 使用 Word 内置表格样式(如 Light Grid Accent 1)
- 表格后空一行
5.4 参考文献处理
参考文献必须:
- 放在对应幻灯片内容的末尾
- 用灰色小字号(10pt,RGB #666666)
- 以"参考文献:"为标题(加粗)
- 悬挂缩进格式
- 严格按照PPT原文呈现,不自行补全论文题目或卷期
- PPT上是简化引用(只有作者+期刊+年份)就按简化的写
5.5 通读润色(语言质量门禁,必做)
OCR 按坐标返回的是"字块"而非"句子",直接拼接必然出现错字、语序颠倒、缺标点、
列表破碎等问题。因此在生成 Word 前,必须由主 agent(LLM)对每页 OCR 文本做一轮
通读润色,这是交付前的硬性语言质量门禁:
- 纠错字:纠正同音/形近错字(如"固→国"、"圆/园→院"、"富上→掌上"、"佩→保"等),
结合上下文与专业术语判断。 - 理顺语序:OCR 常把标题、副标题、脚注位置打乱,按阅读逻辑重排;被页眉/页码占据的
行若确属界面噪点则剔除,不强行并入正文。 - 断句与标点:中文 OCR 普遍缺失标点,根据语义补全逗号、句号、分号;列表项保持独立成行。
- 剔除不可读碎片:纯 IP/主机名(如 192.168.x.x、WIN-XXXX)、logo 占位、单字符噪点行,
确认非正文后直接删除或标注"[识别不清]",不污染正文。 - 不臆测:原文缺失的信息不编造;仅做"同页已知信息内的"语言层面整理。
润色后仍需保持本技能规定的输出结构与表格/参考文献格式。
第六步:生成Word文档
使用 python-docx 库生成 .docx 文件。
文档规范:
- 字体:中文用"Microsoft YaHei",英文用"Arial"
- 正文字号:11pt,行距1.5倍,首行缩进2字符
- 一级标题(讲座标题):18pt,加粗,深蓝色 #1F4E79
- 二级标题(幻灯片标题):14pt,加粗,蓝色 #2E75B6
- 页面:A4,上下边距2.2cm,左右2.5cm
- 页眉:"PPT文字内容(详细整理版)"小字号灰色
- 页脚:页码
第七步:验证
生成后必须检查:
1. 幻灯片页数是否与PDF页数一致
2. 表格数量是否合理(有表格结构的页面都应生成表格)
3. 参考文献是否都已补充(检查每页底部是否有[数字]开头的行)
4. 段落是否完整(没有一句话拆成几行的情况),且无大面积 OCR 错字、语序颠倒、缺标点
——通读抽检每页,不通顺率高的页面回到第五步 5.5 重做通读润色
5. 输出文件大小(正常应在50KB~200KB之间)
6. 句子通顺度与可读性:随机通读 3~5 页,确认读得通、术语准确、无机械拼接痕迹;
若发现系统性不通顺,须对全部页面补做 5.5 通读润色后再交付
脚本文件说明
| 文件 | 用途 |
|---|---|
scripts/ppt_ocr_to_word.py |
主脚本:多后端OCR → 表格识别 → 图表页截图 → 参考文献抓取 → 生成Word |
scripts/ocr_engine.py |
多后端 OCR 引擎适配层(RapidOCR/PaddleOCR/Tesseract/腾讯云),自动探测 |
references/format_spec.md |
输出格式详细规范 |
注意事项
- 凭证可选:腾讯云密钥(
TENCENT_SECRET_ID/TENCENT_SECRET_KEY)不是必须——默认走本地零密钥引擎。若提供密钥,仅作为高精度可选增强后端,且不要硬编码进脚本。 - 参考文献是硬要求:宁可多花时间二次识别,也不能漏掉参考文献
- 格式固定:无论用户提供的信息是否完整,输出格式结构不变;信息缺失的位置留空
- 不编造内容:OCR识别不出的就是识别不出,绝不凭空补充或臆测
- 表格优先:只要结构上是表格信息,就用Word表格呈现,不用纯文本堆砌