前言¶
在 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