前言¶
在 DeepSeek Harness(DSH)里做教材类任务时,常见原料是扫描版 PDF:没有文字层,PyMuPDF 取字数为 0,依赖 text layer 的工具在这里几乎无效。若把整本书 OCR 成 txt 再交给模型,成本高、表格被打散成碎片,也很难先判断「该读哪几章、哪几节、哪几页必须回原图看表」。社区插件 dsh-deep-reading-wl(维护者 SongFengManZhu,分类:工作流)把「从 PDF 到可交付读书心得骨架」拆成四条可重复步骤:先 OCR,再扫结构,再出章节阅读地图,最后压缩 OCR 噪声——产物是「该读哪几页」的地图,不是替你读完书。
这是什么¶
dsh-deep-reading-wl 是一条面向扫描版电子教材的流水线插件。一句话定位:PDF 经 OCR 得到带页标记的 txt,再输出章节骨架、失真地图、按章阅读建议,以及去掉表格碎片后的更短原文。仓库:GitHub - SongFengManZhu/dsh-deep-reading-wl;社区目录页:skillhub.cn 插件页。当前 package 版本为 0.2.0,许可证 MIT。DSH 生态强调「一切皆插件」;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
整体数据流如下(与 README 一致):
PDF ──ocr──> txt ──scan──> 骨架与失真地图
├─map────> 这一章该花多少时间
└─digest─> 压掉碎片的原文
四个工具在做什么¶
插件暴露四个工具,各自回答不同问题:
| 工具 | 速度(README 表述) | 回答什么问题 |
|---|---|---|
ocr |
约 1.2 秒/页 | 这堆图里写了什么字 |
scan |
约 0.1 秒/本 | 几章几节、每章多厚、哪几节承重、哪几页有表 |
map |
秒级 | 这一章先读哪节、哪节略读、哪几张表必须回原图 |
digest |
秒级 | 哪些行值得亲读,哪些是 OCR 打散的表格碎片 |
ocr¶
扫描版 PDF 无文字层时,该模式用 RapidOCR v3 + OpenVINO 引擎输出带页标记的 txt。README 记载:单进程 16 线程、120 dpi、PP-OCRv6 small;同机 ONNXRuntime 方案约 6 秒/页时,OpenVINO 约 1.2 秒/页。另会自动跳过扫描残页(墨迹极少且只落在上半页),并按纵坐标还原阅读顺序。mode=doctor 用于体检环境,mode=page 用于试读一页。
scan¶
读正文前的第一站,输出骨架与失真地图,例如页数、正文字符与行数、章节列表、承重墙(公式、定义句、推导句、图)以及数据表位置索引。它不判表格好坏——扫描件在 OCR 成纯文本后行列归属信息会丢失,因此降级为位置索引器:只标哪几页有表,行列须回原 PDF 查看。
map¶
把 scan 的结论翻译成动作。承重密度定义为 (公式 + 定义句 + 推导句) / 字符 × 1000;推导密集的节是重心,例题密集的节可能较轻。对 OCR 已损坏的表会提示需回 PDF 指定页取原图。chapter 参数可只算一章。
digest¶
OCR 文本中约 75% 可能是表格拆散碎片;插件逐行分诊(正文/公式/表格碎片/噪声),将碎片替换为类似 [表 11.7.1 在此,43 行已省略] 的一行,节标题、公式编号、定义句原样保留。输出不是摘要,是更短的原文(README 称通常保留约 87%)。from / to 可按页区间压缩。
安装与启用¶
README 中的安装面向「插件已在本机,装到别处」的场景,核心是 junction、package.json 的 link 依赖,以及 profile 层 cordis.patch.yml 的 insert——缺最后一步插件不会挂进配置树,日志里也可能没有报错。
# 1) 放进 profile 的 node_modules(用 junction,改代码即时生效)
cmd /c mklink /J "$env:APPDATA\dsh-desktop\harness\profiles\web\node_modules\dsh-deep-reading-wl" "C:\path\to\deep-reading-wl"
# 2) profile 的 package.json:dependencies 加
# "dsh-deep-reading-wl": "link:C:/path/to/deep-reading-wl"
# 并把 "dsh-deep-reading-wl" 加进 dsh.profile.bundles
# 3) profile 的 cordis.patch.yml 末尾加(关键,缺这一步插件不会挂进树)
# - insert:
# - id: dsh-deep-reading-wl
# name: 'dsh-deep-reading-wl'
bundles 只声明包可被扫描;真正把插件 insert 进配置树的是 profile 自己的 cordis.patch.yml。
环境与自测¶
需要 Python 3.10+ 及依赖:
pymupdf rapidocr openvino numpy
解释器查找顺序:DEEP_READING_PYTHON → FASTOCR_PYTHON → DSH Desktop 自带运行时 → C:\Python312。Node 引擎要求 >=22(见 package.json)。
自测需先用独立 Node 抽宿主模块,再跑四个工具:
# 先抽一次宿主模块(@deepseek-ai/* 是宿主单例,插件自己不会装)
& "C:\Program Files\nodejs\node.exe" scripts\pull.host.mjs
# 跑四个工具
& "C:\Program Files\nodejs\node.exe" scripts/selftest.mjs <某个 OCR txt> [某个 PDF]
README 强调:必须用独立 Node(C:\Program Files\nodejs\node.exe)。DSH 里的 node 在 Electron 模式下 fs 行为与独立 Node 不一致。
package.json 中列出的 DSH 兼容 release 包括 0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3(均为 compatible)。
实测与边界¶
README 实测记录(节选):
| 书 | 页数 | OCR 耗时 | 章节识别 |
|---|---|---|---|
| 有机化学(第七版) | 624 | 13 分 04 秒(1.26 秒/页) | 20 章 355 节 |
| 电气工程学概论 | 520 | 1.59 秒/页(试点) | 3 章 11 节(20 页) |
另有物理化学上下册等行的页数与章节识别数据;部分 OCR 耗时在表中为「—」。scan 在四本书上做过随机 20 页试点并修多种识别问题(目录污染、章标题断法、跨页续表、页眉页码等)。
作者明确三件不做的事:
- 不替你判断哪一节是立论、哪个推导是地基。
- 不修 OCR 错字(如
环已烷、CH3}、上标混用等),需读者用领域知识识别。 - 不还原表格行列,只给位置,回原图查看。
适用场景与注意¶
适合:手里是扫描版教材 PDF,要在 DSH 工作流里先快速得到章节骨架、阅读优先级和去碎片原文,再人工写读书心得或交给后续 Agent 步骤的场景。不适合:期望插件自动完成价值判断、修 OCR 或从 txt 还原表格结构。
安装与运行前请自行阅读仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,Python OCR 会读本地 PDF 并写 txt,路径与数据请在本机可控范围内使用。
结尾¶
dsh-deep-reading-wl 把扫描版教材阅读前置成可重复的 OCR + 结构扫描 + 章节地图 + 原文压缩四步,用 OpenVINO 加速 OCR、用位置索引代替不可靠的表格重建。需要细节与更新时以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/SongFengManZhu/dsh-deep-reading-wl
- GitHub:https://github.com/SongFengManZhu/dsh-deep-reading-wl