# 結合セル補完と分類別集計 — 2026-09-12

公開済みの自作・架空資料 T2.pdf を使い、2026年9月12日に改めて実行した検証です。以前のノートPCの実行ログや、Adobeの変換出力を復元したものではありません。正解データは公開済みの元ファイルのT2シートです。

## 再実行

Python 3.12で、ZIPを展開したフォルダーから次を実行します。公開時はPython 3.12.14、Windowsで確認しました。

```text
python -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\python run_experiment.py --pdf inputs/T2.pdf --truth inputs/ground_truth.xlsx --out rerun
```

macOS/Linuxでは `.venv\Scripts\python` を `.venv/bin/python` に置き換えます。検証済みOSはWindowsのみです。出力先は新しいフォルダーを指定してください。既存の出力は上書きしません。間接依存パッケージまでは固定していないため、将来の環境差を完全には排除しません。

## 方法と判断範囲

- pdfplumberの既定設定で1ページ・1表を3回抽出し、抽出結果の一致を確認。
- 見出し2行を除き、8行・6列を対象にする。
- 分類の空欄は、直前の分類セルの結合範囲にその行の中心が含まれ、独立した分類セルがない場合だけ補完する。
- ID欠落・重複、先頭空欄、結合範囲外、独立した空欄セルは処理を中止する。
- 数量・単価・金額だけカンマを除去して整数へ変換し、正解データの48セルと照合。IDの先頭ゼロと品名の改行は保持する。
- 空欄を独立グループとして残した集計と、空欄を除いた分類だけの集計を区別する。

これはこのT2表向けの実装です。複数ページ、小計行、別の結合形状、意図的な空欄、OCRには対応を保証しません。一般のExcelや集計ツールが必ず空欄を除外するという主張ではありません。作業時間、全PDFでの精度、製品優劣は測定していません。

## ファイル

- inputs/: 実際に使ったPDFと正解Excel。正解Excelには他の試験シートも含まれますが、今回はT2だけを読みます。
- raw.json: 抽出直後の表と結合範囲の座標。
- filled.json: 分類だけを補完した表。数値文字列は抽出時のまま。
- before.csv / after.csv: 比較用CSV（UTF-8 BOM付き）。Excelで直接開くとIDが数値扱いされる場合があるため、管理番号を文字列として取り込んでください。保存値の確認にはJSONを使います。
- category_totals.csv: 補完前・補完後・正解の分類別集計。
- report.json: 実行日時・環境・入力ハッシュ・変更6セル・集計・検査結果。
- manifest.json: 配布ファイルのSHA-256一覧（manifest自身を除く）。再実行時は日時などが変わるため、reportとmanifestは公開版と同じハッシュにはなりません。
- run_experiment.py / requirements.txt: 実行コードと直接依存パッケージ。

## 結果の読み方

総額は補完前後とも60,000円です。補完前に分類名の付いた行だけを合計すると8,000円になり、空欄グループの52,000円が対象から外れます。結合範囲に沿って6セルを補完すると、事務用品10,000円・保管用品50,000円となり、正解データに一致します。金額が消えたのではなく、分類別の振り分けが未完成だったという結果です。
