# PDF → Markdown の表・見出し抽出の実測

`pdf-to-markdown` ツールページと関連記事で使う数値の一次ソース。
「PDF を Markdown にすると表が崩れる」現象を 2 系統の実装で実測する。

## 測定対象

| 系統 | 構成 | 表の扱い |
| --- | --- | --- |
| `pdfjs` | pdf.js + `@opendocsg/pdf2md` | 表を組み立てる処理を持たない |
| `inspector` | pdf-inspector (Rust/WASM) | 矩形とフォント・座標から表構造を推定する |

実行環境: Apple M5 Pro / macOS (Darwin 25.5.0) / Node v26.3.1。
バージョンは `results.json` の `environment.dependencies` を参照。

## 対象 PDF

PDF 本体はリポジトリに含めない (サイズと再配布の都合)。`npm run fetch` が
下表の URL から取得し、`corpus.json` に sha256 を書き戻す。取得時点で配布元が
更新されていれば警告が出る。

| PDF | sha256 (先頭 16) | ライセンス |
| --- | --- | --- |
| Attention Is All You Need (arXiv:1706.03762) | `bdfaa68d8984f0dc…` | arXiv / 著者表示 |
| BERT (arXiv:1810.04805) | `5692a5514787a8c6…` | arXiv / 著者表示 |
| NIST Cybersecurity Framework 2.0 | `3c31f46fee98cac0…` | 米国政府著作物 (public domain) |
| IRS Form 1040 (2025) | `3d31c226df0d189c…` | 米国政府著作物 (public domain) |
| 労働力調査年報 基本集計 (総務省統計局) | `f0b2754b4d669730…` | 政府著作物 / 二次利用可 |
| 令和7年版 情報通信白書 概要 (総務省) | `554ec9b3c8beecc8…` | 総務省 二次利用許諾 |
| 経済・物価情勢の展望 (日本銀行) | `c35494595ea0cd6c…` | 日本銀行 / 引用 |

## 再現手順

```bash
cd scripts/benchmarks/pdf-table-extraction
npm install
npm run fetch     # PDF を取得し sha256 を記録 (pdfs/ は gitignore)
npm run measure   # results.json を生成
```

## 結果 (2026-08-02)

| PDF | 種類 | pdf.js+pdf2md 表行 | pdf-inspector 表行 | pdf.js 見出し | inspector 見出し |
| --- | --- | --- | --- | --- | --- |
| Attention Is All You Need | 2 段組の学術論文 | 0 | 50 | 45 | 38 |
| BERT | 2 段組の学術論文 | 0 | 106 | 27 | 42 |
| NIST Cybersecurity Framework 2.0 | 図版の多い技術文書 | 0 | 45 | 3 | 27 |
| IRS Form 1040 (2025) | 記入フォーム | 0 | 42 | 24 | 5 |
| 労働力調査年報 基本集計 | 多段の統計表 | 0 | 405 | 1360 | 6 |
| 令和7年版 情報通信白書 概要 | 図版中心のスライド | 0 | 9 | 38 | 112 |
| 経済・物価情勢の展望 (日本銀行) | 段組の中央銀行レポート | 0 | 19 | 211 | 1 |

## この数値が言えること・言えないこと

**`tableRows` は「表として出力された行数」であって、その表が正しいという意味ではない。**
自動判定できないので、誤検出の実例を手作業で以下に残す。

### 1. 図を表と誤検出する

NIST CSF 2.0 の円環図 (Fig. 1 CSF Core structure) は、図中に配置された文字が
表として出力される。頭文字も落ちる。

```
| Fig. 1. CSF Core structure |||
| --- | --- | --- |
| DENTIFY | ROTECT | ETECT ESPOND |
```

正しくは IDENTIFY / PROTECT / DETECT / RESPOND。円環に沿って配置された文字が
分断され、先頭文字が別要素として扱われている。

BERT 論文でも、モデル構成図のラベル (`Masked Sentence A | Masked Sentence B |
Question | Paragraph`) が表として出力される。

### 2. 本物の表でもセルの割り当てがずれる

労働力調査年報の統計表は 405 行の表として出力されるが、複数年の数値が 1 セルに
まとまる。

```
|15～ 64歳 6625 5878 6678 5893 6732 5912 …|15～ 24歳 595|25～ 34歳 1168|
```

一方 pdf.js + pdf2md はこの PDF で表を 1 行も出さず、代わりに本文行を
**1360 個の見出し**として出力する (正しい見出しは 4 個程度)。どちらも
そのままでは使えないが、失敗の仕方が違う。

### 3. 段組の文書全体が表になることがある

日本銀行「経済・物価情勢の展望」では、タイトルも本文も表のセルに入り、
見出しは末尾の「以 上」1 個だけになる。

```
|||||2025 年５月１日|
| --- | --- | --- | --- | --- |
||【基本的見解】|1|経済・物価情勢の展望（2025 年４月） ＜概要＞|日本銀行|
```

**この破綻は表行の比率では検出できない。** 日銀レポートの表行比率は 0.43、
正常に表を持つ IRS Form 1040 は 0.45 で、閾値で分離できない。

## 限界

- 対象 7 本は文書種別の代表として選んだもので、統計的な標本ではない
- `headings` / `tableRows` は行数の計数であり、内容の正しさを測っていない
- 変換系の比較であって、OCR を持つ製品との比較ではない (両系統とも OCR を持たない)
