doc-extract について
doc-extract は、ファイルを書き込まずに JSON を出力するステートレスな文書テキスト抽出スキルです。ローカルでの抽出を必要とする他のスキルやスクリプト向けに、ページ位置と抽出方式も示します。
主な機能
- 01テキストを抽出して JSON を出力
- 02PDF、DOCX、XLSX、PPTX、RTF に対応
- 03ページ区切り形式にページアンカーを追加
- 04MIME タイプによる形式指定
- 05Bun TypeScript 向けの関数を提供
活用シーン
- 01臨床文書の添付ファイルからテキストを抽出
- 02ページ位置付きの内容を後続スキルに渡す
- 03Bun 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 を標準出力に出力します。ディスクには何も書き込みません(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>]
標準出力への出力:
{ "text": "...", "method": "liteparse | pdftotext | rtf-to-text | passthrough", "pages": 12 }
textはページ単位で区切られた形式の場合、ページ間に=== [page N] ===マーカーが入ります。- ページマーカーがある場合は
pagesが含まれます。 methodは、実際にテキストを生成した抽出ツールです。- 形式はファイル拡張子から判定します。ダウンロードした EHR 添付ファイルのように、適切な拡張子がない場合は
--content-type(例:application/pdf)を指定してください。liteparse は拡張子のないファイルを処理できないため、そのような PDF はpdftotextのフォールバックで処理されます。 - エラーは
{"error": "..."}の形式で標準エラー出力に表示され、終了コード 1 で終了します。
表に関する注意点
複数の値列(オプション A 対オプション B、ネットワーク内対ネットワーク外など)がある表では、抽出されたテキストで列の内容が行ごとに交互に入り込むことがあります。隣接するセルの断片が交互に現れたり、あるセルのテキストが隣の列の文の途中に入り込んだりする場合もあります。値自体は通常保持されますが、どの列に属するかが曖昧になることがあります。複数列の表のうち一列の値を回答に使う場合、ドキュメント内の別の箇所に同じ値が重複して記載されていなければ、その値を確定情報として扱う前に、元のページを直接読んで確認してください。抽出されたテキストの === [page N] === アンカーでページを特定できます。Read ツールの pages パラメーターに渡すと(例:pages: "37")、ドキュメント全体ではなく、そのページだけを画像として表示できます。
その他のスキル向け
すでに bun TS を使っている場合は、シェルコマンドを実行する代わりに関数をインポートしてください。
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 側で管理します)。