dsh-deep-reading-wl:掃描版教材的 OCR 與閱讀骨架流水線

前言

在 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 頁試點並修多種識別問題(目錄污染、章標題斷法、跨頁續表、頁眉頁碼等)。

作者明確三件不做的事:

  1. 不替你判斷哪一節是立論、哪個推導是地基。
  2. 不修 OCR 錯字(如 環已烷、CH3}、上標混用等),需讀者用領域知識識別。
  3. 不還原表格行列,只給位置,回原圖查看。

適用場景與注意

適合:手裏是掃描版教材 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜