決算説明資料のPDFで競合4社を比較する — Claudeで事業別の動向を出典ページ付きの表に
競合4社の決算説明資料PDFから、セグメント別の売上・利益・見通し修正を表にし、出典ページまで付ける手順。1社ずつ抽出してから並べる流れと、API引用機能の制約を押さえます。
競合4社の決算説明資料PDFをClaudeに渡して、事業別の売上・利益・通期見通しの修正を1枚の表にするには、4社を一度に渡さず、1社ずつ同じ列で抽出してから並べます。表の各セルに出典ページを付けておけば、あとで原本に当たる作業も数分で済みます。
四半期ごとに繰り返す前提で、列の決め方、API経由で出典ページを取る方法、引用機能の制約、検算の順に進めます。
なぜ4社まとめてではなく1社ずつ抽出するのか
PDFは1ページずつ画像に変換され、各ページから抽出したテキストが画像と並べて渡されます。このため、ページが増えるほど入力トークンが膨らみます。1ページあたりの目安は1,500〜3,000トークンです。
1リクエストに載せられるPDFの上限は次のとおりです。
| 項目 | 上限 |
|---|---|
| リクエストサイズ | 上限32MB(プラットフォームで異なる) |
| ページ数 | 上限600ページ(コンテキストウィンドウが1M未満のリクエストは100ページ) |
| 形式 | 上限パスワード・暗号化のない標準PDF |
どちらの上限も、PDFと一緒に送る他の内容を含めたリクエスト全体にかかります。決算説明資料が1社40ページだとして4社を束ねると160ページです。100ページ上限の枠では収まらず、トークンも24万〜48万になります。1社ずつなら6万〜12万で、失敗したときのやり直しも1社分で済みます。
文字が小さく表の多いページは、ページ上限より先にコンテキストウィンドウを埋めることがあります。その場合はセクションごとに分割して渡します。
1社ずつ抽出するもう一つの理由は、比較の前に各社の数字を単独で検算できることです。4社を混ぜて抽出すると、どの社のどの数字がおかしいのかを切り分けにくくなります。
先に決めておく表の列
抽出の前に、全社共通の列を固定します。列が社ごとに揺れると、横並びの段階で手作業の整形が増えます。
| 列 | 内容 | 迷いやすい点 |
|---|---|---|
| セグメント名 | 内容資料の表記をそのまま | 迷いやすい点社ごとに区分が違う |
| 売上 | 内容当期の実績 | 迷いやすい点単位(百万円・億円) |
| 営業利益 | 内容当期の実績 | 迷いやすい点調整後の指標と混ぜない |
| 前年同期比 | 内容増減率 | 迷いやすい点資料に載る値を転記する |
| 通期見通し | 内容修正の有無と方向 | 迷いやすい点上方・下方・据え置き |
| 出典ページ | 内容PDFビューアのページ番号 | 迷いやすい点印字ページ番号とずれる |
セグメントの区分は、各社が自分で決めた分け方のまま取り込みます。「A社の第2セグメントとB社の第3セグメントが同じ事業か」は、抽出の段階で決めません。名寄せは表が出そろってから人が判断し、対応表を別に持ちます。
1社分の抽出を頼む依頼文
列は毎回の依頼文に書きます。四半期ごとに見たい列が変わっても、依頼文だけ直せば済みます。
添付したのはX社の決算説明資料です。
セグメント別の実績を、次の列の表にしてください。
列: セグメント名 / 売上 / 営業利益 / 前年同期比 / 通期見通し / 出典ページ
- 数字は資料の表記のまま、単位も併記する
- 出典ページは、PDFビューアで数えたページ番号で書く
- 資料に載っていない値は「記載なし」と書き、推測で埋めない
- 通期見通しは、修正の有無と方向(上方・下方・据え置き)を書く「PDFビューアで数えたページ番号」と明示するのは、資料に印字されたページ番号とビューア上のページ番号がずれることがあるためです。PDFを依頼文より前に置くこと、ページ番号は論理ページ(ビューアの番号)で指示することは、いずれもPDF処理の推奨に沿った書き方です。
APIで出典ページを機械的に取る
チャットで使うなら、出典ページは依頼文で書かせれば足ります。ただ、依頼文で書かせたページ番号は、Claudeが生成した文字列です。実際に引用された位置と一致する保証はありません。API経由なら、引用機能でページ範囲を構造化データとして受け取れます。
ドキュメントブロックのcitationsを有効にします。PDFは文単位に区切られ、返ってきた各テキストブロックに引用の位置が付きます。位置の種類はpage_locationで、開始ページと終了ページが入ります。ページ番号は1始まり、終了ページは含まない値です。
四半期ごとに使い回すなら、Files APIでPDFをアップロードしてfile_idで参照します。
FILE_ID=$(curl -sS -X POST https://api.anthropic.com/v1/files \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-F "file=@company-x-q2.pdf" | jq -r '.id')アップロードしたファイルを参照するリクエストのcontentは、次のような形になります(公式の例に沿った形)。
{
"type": "document",
"source": { "type": "file", "file_id": "<FILE_ID>" },
"title": "X社 2026年度第2四半期 決算説明資料",
"citations": { "enabled": true }
}応答では、表の各行に対応するテキストブロックにcitationsが付きます。各引用には、cited_text(引用された文)、document_index、start_page_number、end_page_numberが含まれます。cited_textは出力トークンとして数えられず、次のターンに渡し直しても入力トークンに数えられません。
4社分を同じリクエストに入れる場合は、document_indexが0始まりでリクエスト全体のドキュメント順に振られます。社名との対応表を自分で持っておくと取り違えを防げます。1社ずつ回す構成なら、この問題は起きません。
引用機能を使うときの3つの制約
引用機能には、決算説明資料の比較に直接関わる制約が3つあります。
引用機能の制約
構造化出力とは併用できない
引用を有効にしたドキュメントと、
output_config.format(旧output_format)を同じリクエストに入れると、APIは400エラーを返します。厳密なJSONスキーマで表を返させたい場合は、引用付きのテキスト抽出と、整形用のリクエストを分けます。画像は引用できない
引用できるのはテキストだけで、PDF内の画像は対象外です。スキャンして取り込んだだけで抽出できるテキストのないPDFも、引用の対象になりません。
引用は全ドキュメントで有効か無効か
1つのリクエストの中で、引用はすべてのドキュメントで有効にするか、すべて無効にするかのどちらかです。
1つ目の制約から、API経由の標準的な組み方は2段になります。1段目で、引用を有効にして社ごとのテキストの表を作り、出典ページを受け取ります。2段目で、その結果をテキストで渡し、JSONや横並びの表へ整形します。2段目はPDFを渡さず、引用も使いません。ページ番号は1段目の結果に含まれた文字として運ばれます。
グラフの中の数字は引用に頼らない
決算説明資料は、セグメント別の売上推移を棒グラフで見せる構成が多いです。グラフの数字はPDF内の画像として埋め込まれていることがあり、その場合は引用の対象になりません。
Claudeの画像認識には限界もあります。低品質や回転した画像、200ピクセル未満の小さな画像では、誤読が起きる可能性があるとされています。グラフから読み取った値は、表の数字とは別に「グラフ読み取り」と区別して扱い、同じ数字が決算短信や有価証券報告書に載っていれば、そちらで裏を取ります。決算短信側の点検は決算短信を作成要領と突き合わせてドラフトを点検する手順で扱っています。有価証券報告書の数字をAPIで取る方法は、EDINET APIで有価証券報告書を同業他社と比較する手順が入口になります。
4社を横並びにするときの整え方
各社の表が出そろったら、別のリクエストで横並びにします。ここで扱う入力は、PDFではなく1社ごとのテキストの表です。
次の4つの表は、各社の決算説明資料から抽出したものです。
- セグメントの対応は、下の対応表に従う
- 単位を百万円にそろえる。換算した行には「換算」と書く
- 通期見通しは、修正方向ごとにまとめた1行の所感を最後に付ける
- 出典ページは、元の表のまま残す横並びで起きやすいずれは3種類です。
- 単位:百万円表示の会社と億円表示の会社が混ざる。換算した行は、換算前の値と一緒に残します。
- 決算期:3月期と12月期の会社が混ざると、同じ「第2四半期」でも対象月が違います。表の見出しに期間を日付で書きます。
- セグメントの再編:前期から区分を組み替えた会社は、組替後の数字と組替前の数字が資料に併記されることがあります。どちらを転記したかを列に書いておきます。
通期見通しの修正は、ここでいちばん見落としやすい項目です。修正の有無だけでなく、修正後の数値と、修正理由が書かれたページを出典に添えます。
四半期ごとに回す運用
2回目以降は、前期の表を過去分として持ち、新しい四半期の表と並べて増減を見ます。
- 同じPDFを繰り返し質問する場合は、プロンプトキャッシュを使うと、繰り返しの分析で性能が上がります。
- 件数が多い場合は、Message Batches APIでまとめて処理できます。
- Files APIのファイルは、ワークスペース全体からアクセスできます。ユーザーや会話ごとに分離されていません。他部署の資料と混ぜたくない場合は、ワークスペースを分けます。
Amazon BedrockのConverse APIで使う場合は、引用を有効にしないとテキスト抽出だけにフォールバックし、PDF内のグラフや表のレイアウトは分析されません。Bedrock経由では、PDFをbase64でしか渡せません。両者の機能差はClaudeをBedrockとGoogle Cloudで使う — API機能の対応差を比較にあります。
表を信用する前の検算
出力した表は、次の順に確かめます。
- セグメントの合計と、資料の連結売上高が一致するか。
- 出典ページを3〜5か所開いて、数字と単位が合っているか。
- 通期見通しの修正は、全社分の出典ページを開くか。
- 「記載なし」の行が、資料にも本当に無いか。
1と2は、表の数字が桁を間違えていないかを見る検算です。3は、修正方向の取り違えが投資判断や営業資料にそのまま影響するため、全件を人の目で確認します。
Claudeに合計の一致を確かめさせる場合は、計算過程を表示させます。依頼文に「合計が資料の連結値と一致しない場合は、不一致の行をそのまま示す」と書いておくと、ずれを確認しやすくなります。
よくあるつまずき
- ページ番号がずれる:印字ページ番号ではなく、PDFビューアの番号で頼みます。
- 表の行が抜ける:ページあたりの情報が密な場合は、セグメント別の実績ページだけを切り出して渡します。
- 別会社の数字が混ざる:4社を1リクエストに入れずに、1社ずつ処理します。
- API経由で400エラーになる:引用と構造化出力を同時に有効にしていないか確認します。
自社側の財務モデルを決算後に更新する作業は、決算後の財務モデル更新をCoworkに任せる手順が扱っています。PDFの上限や要約の指示の組み方は、ClaudeのPDF要約のコツと、ClaudeとChatGPTのPDF処理上限の比較にまとめています。
まとめ
競合の決算説明資料を横並びにする作業は、列を固定して1社ずつ抽出し、並べる段階で単位と決算期をそろえる構成にすると崩れにくくなります。出典ページはAPIの引用機能で受け取れますが、構造化出力とは併用できないため、抽出と整形を2段に分けるのが現実的です。
グラフ内の数字と通期見通しの修正は、機械の出力を信用せず、原本のページを開いて確かめる工程として残してください。