PDF 表 抽出:再利用の前に見出し・セル・原文の根拠を保持する

PDF 表 抽出などの表抽出では、元の表の行・列・セル内容を再構成し、確認や再利用ができるようにします。解析値を提案する前に、各値に対応する見出し、記載された単位、脚注を保持します。文字列が正しくても、列が違えば再構成は誤りです。

機能の状態:文書化済み。Docling と Structured Output はカタログに記載されていますが、ここで説明する再構成処理について、Ai Flowi による本番環境でのテストは未実施です。ワークフロー全体を組み合わせた実行結果の記録もありません。

執筆:Ai Flowi · 公開日

業務項目の解釈より先に表の構造を確認する

確認中は、原本、表のラベル、バージョンをいつでも参照できるようにします。ページのラベル、表題、行キー、見出しの階層など、確認者が実際に見つけられる原文の位置情報を記録します。この演習では手作業で指定する目印であり、自動取得されるレイアウト座標ではありません。

文書 AI ガイドでは、文書から名前付きの項目を選び出す方法を扱います。ここで先に行うのは、表の構造を保持することです。記載されたセルに対応する見出し、空欄かどうか、注記による単位の変更を確認します。コンポーネントの完全なインターフェースは、Docling 連携リファレンスに記載されています。

原本がすでに信頼できる構造化された表であれば、その構造を保持します。再現のためだけに OCR やモデルを追加する必要はありません。PDF や画像の場合は、選んだ読み取り方法が、処理を許可されたサンプルから確認可能な内容を出力するかを先に確かめます。OCR の設定があるだけでは、そのファイルへの対応は確認できません。

関連情報:Unstructured.io 使い方:AI Flowi Workflowとの連携。

3 行の架空の原表を確認する

この架空の見積カードのラベルは SOURCE-CARD-A、Table A、バージョン 2 です。結合された価格見出しは、2 つの価格列に共通します。R-B の改定後価格のセルは空欄で、数値は記載されていません。R-C のゼロは明示的に記載されています。

スマートフォンでは、2 つの表をそれぞれの領域内で横にスクロールできます。キーボードで領域にフォーカスすると、最初の表示範囲外にある列も確認できます。

SOURCE-CARD-A / Table A / バージョン 2:架空の印刷原表を表したもの
行キー梱包数量
(1 梱包あたりの個数)
価格(RM/梱包)
定価改定後
R-A1224.0022.00
R-B6*18.00
R-C10.000.00

原表の脚注 *:R-B のみ、梱包数量は 1 梱包あたりの内箱数を表します。内箱 1 箱には 4 個入っています。

したがって R-B に記載されているのは、個品 6 個ではなく内箱 6 箱です。1 梱包あたり 24 個という値は、脚注から別途計算した結果であり、抽出したセルの値ではありません。解析値の案は 6、単位は内箱数/梱包とし、脚注の条件を保持します。

セル再構成の確認シートをコピーする

セルごとに 1 レコードを作り、平坦化しても見出しと原文の根拠が残るようにします。以下のヘッダーは確認用にコピーする成果物です。対応が保証されたアップロード形式や、ネイティブのoutput_schema定義ではありません。

source_ref | table_ref | source_version | source_locator | header_path | row_key | printed_cell | printed_unit | proposed_parsed_value | cell_state | footnote | review_decision

この例の方針では、present、blank、unreadable、not_suppliedを別々の確認シートの状態として扱います。空欄は、見えている原表のセルに記載がない状態です。判読不能は、セルはあるものの文字を特定できない状態です。未提供は、必要な原表の領域が資料に含まれていない状態です。いずれもゼロを補う根拠にはなりません。

9 つのデータセルすべてについて作成した確認基準。原本とバージョンはすべて SOURCE-CARD-A / A / 2
行/見出しの階層記載されたセル内容値の案/単位状態と確認事項
R-A/梱包数量1212/個数(1 梱包あたり)値あり。数量の見出しと照合する。
R-A/価格 → 定価24.0024.00/RM(1 梱包あたり)値あり。両階層の見出しを保持する。
R-A/価格 → 改定後22.0022.00/RM(1 梱包あたり)値あり。改定後価格と定価価格を区別する。
R-B/梱包数量6*6/内箱数(1 梱包あたり)値あり。単位を承認する前に脚注 * を関連付ける。
R-B/価格 → 定価18.0018.00/RM(1 梱包あたり)値あり。脚注に基づく価格の換算は行わない。
R-B/価格 → 改定後原表の空欄セル数値の案なし空欄。価格は不明のままとする。
R-C/梱包数量11/個数(1 梱包あたり)値あり。R-B の単位の例外を適用しない。
R-C/価格 → 定価0.000.00/RM(1 梱包あたり)値あり。記載されたゼロをそのまま記録する。
R-C/価格 → 改定後0.000.00/RM(1 梱包あたり)値あり。R-B の空欄と区別する。

上に示した印刷原表の表現が、この確認基準の独立した照合元です。基準は人が作成した想定であり、表抽出ツールの出力を記録したものではありません。3 つの行キーと 2 階層の価格見出しも保持します。セルのレコードが 9 件とも正しく見えても、行の識別情報が入れ替わっていれば不正確です。

読み取りと確認を済ませてから、承認したテキストを構造化する

設定例であり、実施したテストの記録ではありません

処理を許可されたファイルとその原本を確認シートの横に用意します。モデル提供元のアカウントと API キーは自分で用意し、利用料は別途支払います。接続の設定は、次のリファレンスに従います:モデル接続リファレンス。

  1. 基本的な処理の設定は、次の例に従います:Docling の設定例。
  2. この表の確認では、Docling のdo_picture_classificationを false に設定し、出力のdataframeを確認します。宣言された型は Table です。R-A、R-B、R-C と価格見出しの両階層が含まれているかを確認します。分類の設定自体は、セルを承認する根拠にはなりません。
  3. 再構成したすべてのセル、見出し、脚注を原本と照合します。原文の位置情報を付けた確認済みシートのテキストを手作業で作成します。行と列の対応を保持できない場合は、処理を止めます。
  4. その確認済みテキストを、Structured Output の必須入力であるinput_valueに入れます。Docling の Table 出力から、この Message 互換のテキスト入力への直接接続は宣言されていません。この案では、意図的に人が受け渡しを行います。
  5. Structured Output の設定リファレンスに従い、必須項目のmodel、output_schemaを設定します。この確認シートのスキーマ名をcell_reconstructionとして、schema_nameで指定します。以下のセル保持の指示は、次の必須入力に入れます:system_prompt。
  6. 出力のstructured_output(JSON)とdataframe_output(Table)を確認し、個別のセルレコードが 9 件あることを確かめます。R-B の改定後価格は空欄のままにし、R-C の 2 つの価格は記載されたゼロを保持します。それぞれの表現でheader_path、footnoteがどう保持されるかを確認します。確認シートのパイプ区切りテキストは、インポートできるスキーマではありません。
Represent only the supplied reviewed cell records. Preserve source version,
row key, complete header path, printed cell, unit, footnote and source locator.
Keep blank, unreadable and not-supplied states distinct from printed zero.
Do not fill missing prices, detach unit exceptions or turn derived quantities
into extracted values. Keep unresolved cells awaiting source review.

価格の見出しは、単独のラベルではなく階層として読みます。「価格」が単位の RM/梱包を示し、「定価」または「改定後」が該当する金額を選びます。両方を 1 つの価格項目に平坦化すると、R-A の 24.00 と 22.00 の区別が失われます。行ごとと見出しの階層ごとに、漏れがないかを別々に確認します。R-A の定価価格レコードが重複すると、合計は 9 件でも R-B の定価価格セルが抜けている可能性があります。件数だけでは確認シートを承認できません。

PDF や画像から表を抽出するときの確認事項

読み取り可能なテキストを含む PDF では、読み取り順によって結合された見出しの階層が失われたり、脚注が隣の行に移ったりしていないかを確認します。画像やスキャンした PDF では、OCR 後の数字、小数点、列の境界、脚注の記号を確認します。右端の列が切れている場合は未提供とし、金額は見えているものの読めない場合は判読不能とします。

このサンプルに、18.00 を改定後価格の列へ移す、RM の見出しを削除する、空欄を 0.00 にする、6* のアスタリスクを落とす、といった変更を加えて確認します。どの変更も、構造化出力が解析できても原本との照合では不合格になる必要があります。脚注が欠けると R-B の数量の単位は承認できません。通常の列の単位に戻してよいことにはなりません。

これらの確認項目は想定する失敗を定義するもので、合格率を測定したものではありません。この設定について、カタログには自動的な座標の忠実な保持、校正された精度、対応する OCR の導入環境、Excel へのエクスポートは示されていません。この記事が提供するのは確認シートであり、オンライン抽出ツールではありません。

後続処理で再利用する前に表を承認する

誰が表を照合したか、確認した原本のバージョン、未解決のセルを記録します。小数の表記を変更する場合は、解析値の案と原表の記載を分けて保持します。次の段階で項目の意味を合意するには、データ辞書テンプレートを参照してください。後の識別情報と変換結果の突き合わせには、ETL テストを参照してください。

未確認の再構成結果を、合計計算、注文、自動判断に使わないでください。原本の修正が届いたら、以前の根拠を保持して新しいバージョンを確認します。解析値だけを書き換えても、原本の何が変わったかは確認できません。

プラン:Goは年払いで月額USD8から(月払いUSD10)、Plusは月額USD16から(月払いUSD20)、Pro 100は月額USD80から(月払いUSD100)、Pro 200は月額USD160から(月払いUSD200)、Pro 500は月額USD400から(月払いUSD500)。毎月5,000~250,000 Flowi Tokensが含まれ、追加購入も可能です。ノード実行1回につき1トークン。サードパーティのAPIとモデルの利用料金は含まれません。