PDFテキスト抽出
このスキルは、デジタルPDFから機械可読なテキストを抽出し、要約、分類、構造化抽出などの後続処理に使用します。ヘルパーは純PythonのPDFライブラリを利用可能な場合に使用し、ダウンストリームでのクリーンアップのためのシンプルな行ベースのテーブル検出機能も含まれています。
呼び出すべきタイミング
- ユーザーが「このPDFからテキストを抽出して」「PDFをAIに渡して」「このレポートから表を抽出して」「この明細書を読んで」と発言した場合。
- PDFがすでに選択可能なテキストを含んでおり、OCRを必要としない場合。
呼び出すべきでないタイミング
- PDFがスキャン画像である場合(OCRワークフローを使用してください)。
- ユーザーがセルの結合やレイアウトの忠実性を伴うピクセル完全なテーブル再構築を必要とする場合。
具体的な例
ユーザー入力:
このPDFからテキストとおおまかな表を抽出して、Geminiに要約させて。
出力:
# assets/extract.py をプロジェクトにコピーしてから使用します:
from extract import extract_pdf
doc = extract_pdf("downloads/report.pdf")
print(doc["text"][:2000])
for table in doc["tables"]:
print(table["page"], table["rows"][:3])
対象プロジェクトに pypdf または pdfminer.six をインストールします。OCRバイナリは不要で、抽出可能なテキストがないPDFの場合は明確にエラーを返します。
適用するパターン
- 最初にデジタルテキスト抽出を試み、スキャン画像でない限りOCRは追加しない。
- ダウンストリームのプロンプトがページ番号を引用できるように、ページ境界を保持する。
- テーブル抽出はシンプルに保つ:行をタブまたは連続スペースで分割し、後続のスキーマパスで列を正規化する。
- PDFが長い場合、LLMに送信するテキストをページ/範囲ごとに制限する。
- テキストが見つからない場合は、空のプロンプトをダウンストリームに送信する代わりに、明確にエラーを返す。
参考:assets/extract.py
ソース
著者の自動化プロジェクトにおける本番運用からの知見をまとめたもの。v1.0.0。 関連項目:[[gemini-structured-output]]、[[csv-report-writer]]、[[s3-uploader]]
→ Trawlkit で完全な実行可能ボットを構築しましょう。