Agent Skills
返回列表
扫描PDF转EPUB

扫描PDF转EPUB

办公效率 更新于 2026.08.30

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_6a9f8e36/scan-pdf-to-epub。

技能介绍

先看清问题

扫描版 PDF 转 EPUB,很多人以为"跑个 OCR"就完事了。真正的坑在于:扫描书没有文字层,普通 OCR 会把整页拍平成一坨纯文本,段落边界和注释结构全丢。扫描书靠"首行缩进 2 字符"区分段落,不靠行距;纯文本 OCR 丢掉每行的 x/y 坐标后,你就无法分辨"同一段的续行"和"下一段的首行",结果要么每句被切成独立段落,要么好几段被并成一段。此外,圈号注释(①②③)会混在正文里,系统性 OCR 错字(如"进入"识成"进人")也会一路带进最终产物。

这套做法怎么落地

核心思路是:一开始就用带 bbox 的 OCR,别走纯文本的弯路。工作流分几个阶段:

  • 判定 PDF 类型:用 PyMuPDF 打开,检查 get_text() 长度。为 0 走全流程带坐标 OCR;不为 0 说明已有文字层,直接普通转换即可。
  • 带坐标 OCR(断点续跑):脚本把每页识别成 page_XXXX.json,每行含 {t, x1, y1, x2, y2, s},页内按 (y1, x1) 排序。300+ 页一次跑完容易超时,所以按 JSON 是否已存在来跳过,配合 --start/--end/--limit 分批,中断后重跑自动续上。
  • 定阈值:只看 2~3 页,观察续行和段首行的 x1 位置差异来定缩进阈值(如 INDENT=40),再取相邻行 gap 的中间值定段间阈值(如 GAP_THR=70)。跨页只用缩进判段,别用 gap——换页后 y 坐标从顶部重算,gap 天然很大,会误判成段界。
  • 章节切分:用章号 token 做前缀匹配定位每章起点,副标题不参与匹配,这样即便副标题被 OCR 识错字、破折号识别成不同符号、或标题被拆成两段,都能稳定定位。
  • 去噪:每页的页眉页脚(书名、英文书名)会被 OCR 成独立文本框,混进正文。脚本在段落重建前按文本框剥离,避免全书混入几百处书名噪声。

脚注与错字

注释会被抽离成章末脚注区,正文残留的圈号按顺序链接过去。错字校正用精确词对字典而非通配——因为"人/入"混淆(进入→进人、陷入→陷人)虽是系统性错误,但通配会误伤合法词如"引人""招人""纳人"。所以只做精确双字词替换,如 {'进人':'进入', ...}。所有文本经统一校正函数输出,确保导航和正文都不会残留错字。

适用边界与注意点

这套方案适合扫描质量尚可、段落缩进规律、注释结构清晰的书。如果原书排版混乱(多栏混排、缩进不规律),阈值需要逐本调。另外沙盒/云端环境经常被重置,依赖包可能要重装。跑完记得清理残留 worker 进程避免占用显存。

使用场景

  • 手上有一本纯扫描版PDF书,没有文字层,需要转成手机上能读的EPUB。
  • OCR把整页拍平成纯文本,段落边界全丢了,需要用每行坐标还原段首缩进。
  • 原书用圈号标注释,OCR后混进正文,需要抽成EPUB3脚注并回插引用标记。
  • 系统性OCR错字比如「进入」识成「进人」,需要用精确词对校正后再生成EPUB。

适合人员

  • 想把图书馆扫描藏书转成可阅读EPUB的数字资源馆员
  • 需要处理大批量扫描PDF并重建段落结构的古籍数字化工程师
  • 开发电子书转换工具、需要解决OCR版面还原问题的后端工程师
  • 负责将纸质出版项目数字化的出版社技术编辑