关于 doc-extract
doc-extract 是无状态的文档转文本技能,将文件内容以 JSON 输出到标准输出,不写入磁盘。它适合需要在本地提取文档文本的其他技能,并提供页码锚点和实际使用的提取器信息。
主要功能
- 01从文档提取文本并输出 JSON
- 02支持 PDF、DOCX、XLSX、PPTX 和 RTF
- 03为分页文档添加页码锚点
- 04支持通过 MIME 类型指定文件格式
- 05可在 Bun TypeScript 中导入提取函数
适用场景
- 01提取医疗文档附件中的文本
- 02为后续技能提供带页码的文档内容
- 03在 Bun TypeScript 项目中复用提取逻辑
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ anthropics/ healthcare --skill doc-extract安装后在 Claude Code 中输入/doc-extract确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignore.npmrcpackage.jsontsconfig.jsonscripts/decoders.mjsextract.ts详细介绍
doc-extract
共享的文档转文本提取工具。一个脚本,无状态:读取输入文件,将 JSON 输出到 stdout,不向磁盘写入任何内容(安全处理 PHI——不使用缓存或临时文件;缓存由调用方负责)。
设置(仅需一次)
cd <this skill dir> && bun install
这会拉取 liteparse(lit 可执行文件,用于处理 PDF/DOCX/XLSX/PPTX,并包含 OCR)和 rtf-to-text(用于 RTF)。如果没有安装,且系统已安装 poppler,PDF 仍可通过 pdftotext -layout 回退方案处理;其他二进制格式则需要 liteparse。
使用
bun <this skill dir>/scripts/extract.ts <input-file> [--content-type <mime>]
stdout 输出:
{ "text": "...", "method": "liteparse | pdftotext | rtf-to-text | passthrough", "pages": 12 }
- 对于分页格式,
text会标注页码:每页之间有=== [page N] ===标记。 - 存在页码标记时会包含
pages。 method表示实际用于生成文本的提取器。- 格式根据文件扩展名确定;当文件没有有用的扩展名时(例如下载的 EHR 附件),请传入
--content-type(如application/pdf)。请注意,liteparse 不接受没有扩展名的文件,因此这类 PDF 会通过pdftotext回退方案处理。 - 出错时会将
{"error": "..."}输出到 stderr,并以 1 退出。
表格注意事项
在提取的文本中,包含多个数值列的表格(选项 A 与选项 B、网络内与网络外)可能会逐行交错排列:相邻单元格的片段会交替出现,一个单元格的文本甚至可能落在相邻列的句子中间。数值通常不会丢失,但数值所属的列可能变得模糊。如果答案来自多列中的某一列,且文档其他位置没有重复说明该数值,请直接阅读原始页面进行核实,再将其视为可靠事实。提取文本中的 === [page N] === 标记会指出页码:将其传给 Read 工具的 pages 参数(例如 pages: "37"),即可只将该页渲染为图像供视觉查看,而非渲染整份文档。
用于其他技能
如果已经在 bun TS 中,请导入函数,而不是通过 shell 调用:
import { extract, resolveLit } from "../doc-extract/scripts/extract";
const lit = resolveLit([myRoot]); // also checks myRoot/node_modules/.bin/lit
const text = extract(lit, "/path/to/file.pdf"); // string | null
contracts 技能以这种方式使用它(其摄取缓存由 contracts 侧负责)。