Communitygithub.com

jtepe/slopclub

PDF読み取り・検索・画像抽出を行うエージェント用ツール。概要取得や全文検索、指定範囲のテキスト変換、画像書き出しが可能です。

slopclub とは?

このスキルは、大規模PDF文書を扱うAIエージェント向けのユーティリティツールです。 `pdfread.py` というPythonスクリプトを提供し、`uv`(推奨)または標準のPython3.10+で実行できます。主な機能として、文書の情報表示(info)、BM25ランキングによる全文検索(search)、ページ範囲指定でのMarkdownテキスト変換(text)、図画像の個別書き出し(imageおよびimages)、ページ全体のレンダリング(render)を備えています。検索にはSQLite FTS5を使用し、初回のみインデックスをキャッシュするため、サブエージェントからも高速に再利用できます。大規模PDFを扱う際のベストプラクティスとして、まずinfoで全体像を把握し、searchで関連箇所を特定した上で、サブエージェントにページ範囲を分割して処理させることで、コンテキストを節約しながら効率的に情報を合成する手法が推奨されています。OCR機能はなく、テキストレイヤーがないページは画像として扱われます。

対応~Claude Code~Codex CLI~Cursor
npx skills add jtepe/slopclub

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

このファイルと同じディレクトリにある pdfread.py ツールを使ってPDFを読み取ります。次のいずれかの方法で実行できます。

  • uv 0.11以上(推奨): pdfread.py を直接呼び出します。シバン行が uv run 経由で実行し、初回起動時に依存関係をダウンロードするため、1分程度かかることがあります。
  • uv なし: python3 pdfread.py ... で、pymupdf4llm>=0.0.17 がインストールされた任意のPython 3.10以上で動作します(pip install pymupdf4llm)。

search コマンドはFTS5が有効なSQLiteを必要とします。uv管理下のPythonや、最新のシステムPythonのほとんどに含まれており、ない場合はスクリプトが明確にエラーを表示します。

pdfread.py --help で全使用法を確認できます。簡単に説明すると:

  • pdfread.py info FILE — ページ数、メタデータ、アウトライン/目次。まずはここから。
  • pdfread.py search FILE "用語" — キーワードが含まれるページを、BM25順にスニペット付きで表示。初回の検索ではキャッシュインデックスを構築(数秒)、以降は即時。用語はAND結合、term* で前方一致、--raw でFTS5全構文("完全一致"、OR、NEAR)を利用可能。テキストレイヤーのみ対応 — スキャンページは検索対象外。
  • pdfread.py text FILE --pages 10-25 — 1始まりのページ範囲をMarkdownテキストに変換。図は [image: p12-img2 640x480px] のようなプレースホルダとして表示。
  • pdfread.py image FILE p12-img2 — その図をPNGファイルとして書き出し、パスを表示します。ファイル読み取りツールで確認できます。
  • pdfread.py images FILE --pages 12 — 指定ページの図ID一覧を表示。
  • pdfread.py render FILE 7 — ページ全体(または --rect x0,y0,x1,y1 で領域指定)をPNGにレンダリング。スキャンページやテキストレイヤーで取得できないものの代替手段。

大規模PDFでのコンテキスト維持

ピンポイントな質問(「契約書のどこに解約手数料の記載があるか?」)には、まず search を実行し、該当ページだけを text --pages で読み取ります — サブエージェントへの分配は不要です。インデックスキャッシュは共有されるため、サブエージェントも再構築なしで search できます。

広範な情報を合成する場合、文書全体をメイン会話にダンプしないでください。代わりに:

  1. info でページ数とアウトラインを取得し、文書を適切な範囲(章ごと、または15~25ページごと)に区切ります。
  2. 範囲ごとにサブエージェントを起動し、次のような指示を与えます。「<パス>/pdfread.py text <ファイル> --pages 10-25 を実行し、<ユーザーの質問> に答える/最大N語で要約してください。[image: ...] プレースホルダが関連する場合は、image コマンドで画像を抽出して確認してください。」
  3. メイン会話には要約/回答だけを残し、それらから全体を合成します。サブエージェントの要約が答えの存在を示す場合のみ、自分で該当ページを直接参照します。

注意事項

  • OCR機能はありません。テキストレイヤーのないページは、全ページ分の [image: ...] プレースホルダ(または「抽出可能テキストなし」のメモ)として返されます。その場合は render で画像を抽出して視覚的に読み取ってください。
  • 抽出は決定論的です。画像IDは実行間で安定しているため、サブエージェントが報告したIDを後でメイン会話から抽出できます。

関連スキル