試してきた神(方眼紙)エクセル解析を比較してみる。
1. 動機
帳票とか複雑なテキストの表は、企業の中ではよく見かけるのではないでしょうか。そこで、「方眼紙エクセル」からの構造化データ抽出について、2つの手法を作ってみていました。それらをそれなりに統合的にパースしたら楽できるなと基本的なお勉強をしてきました。その途中で作成した docling-markdown-generator (IBMのdoclingを使ったmarkdownによる再現) と kami_excel_extractor (VLM/LLMを使った情報抽出) を比較しました。
これまで、なんとなく、ポチポチとdebugしていましたが、それぞれの特徴があります。これらを使って簡単に評価してまとめてみます。
2. 評価手法
- 対象: 7カテゴリのダミー方眼紙エクセルファイル
- 手法 A:
docling(docling-markdown-generator) - 手法 B:
kami(kami_excel_extractor)- モデル B-1:
gemini-3.1-flash-lite-preview(Googleさんのgemini API) - モデル B-2:
ollama/gemma4:latest(ローカルLLM/Ollamaなので量子化モデル)
- モデル B-1:
ダミーモデル達を適当に生成して使いました。
| # | ファイル名 | カテゴリ | 難易度 | 特徴 |
|---|---|---|---|---|
| 1 | 01_simple_table.xlsx |
単純表形式 | ★☆☆ | 通常のヘッダー+データ行(セル結合なし) |
| 2 | 02_houganshi_form.xlsx |
方眼紙レイアウト | ★★☆ | 細かいセル結合で構成された「申請書」 |
| 3 | 03_complex_report.xlsx |
複合帳票 | ★★★ | ヘッダー情報 + 経費明細表 + 承認欄が混在する複雑な構成 |
| 4 | 04_chart_data.xlsx |
グラフ付き | ★★★ | 月別売上データ + 埋め込み棒グラフ |
| 5 | 05_multi_sheet.xlsx |
マルチシート | ★★☆ | 複数シート(社員一覧・部署別集計・注記)のデータ参照 |
| 6 | 06_extreme_merge.xlsx |
極端な結合 | ★★★ | 100列×50行の組織図風で不規則かつ大量のセル結合 |
| 7 | 07_styled_invoice.xlsx |
スタイル重視 | ★★☆ | 罫線の太さ・背景色・フォントで視覚的に区分けされた請求書 |
3. 比較
3.1 抽出結果の具体例(03_complex_report の場合)
「複合帳票 (03_complex_report.xlsx)」の実際の抽出結果の一部を例として挙げます。
手法 A (Docling) の出力
Doclingは罫線を基準に表を認識するため、独立した複数のHTMLテーブルとして断片的に出力させています。データの関連性や帳票の階層構造は、こんなものでしょう。
<table><tbody><tr><th colspan="5">株式会社 経費報告書</th></tr></tbody></table> <table><tbody><tr><th>項番</th><th>日付</th><th>摘要</th><th>金額</th><th>備考</th></tr></tbody></table> <table><tbody><tr><th>合計</th></tr></tbody></table> <table><tbody><tr><th colspan="2">課長</th><th colspan="2">部長</th><th colspan="2">承認</th></tr></tbody></table>
手法 B-1 (Kami + Gemini 3.1 Flash-Lite Preview) の出力
kamiは視覚的特徴(スタイル)とVLMによる意味理解を組み合わせています。ヘッダー、明細行、合計式、承認欄などの「帳票の論理構造」を正確にJSONとして抽出できました。また、不要な空白行(空のセルの連続)を自動的にフィルタリングしているので見やすい結果ですね。計算式は蛇足かもしれませんが、「合計」という表現を補足できるように抽出させています。
{ "title": "株式会社経費報告書", "table_data": { "headers": ["項番", "日付", "摘要", "金額", "備考"], "rows": [], // 不要な空白行は文脈を読んで自動で省略される "summary": { "label": "合計", "value": 0, "formula": "=SUM(D8:D25)" } }, "approval_fields": { "section_manager": "課長", "department_manager": "部長", "approval": "承認" } }
手法 B-2 (Kami + Gemma4) の出力
Gemma4(ローカル推論)でも結構頑張ります。表内の空白セル(未入力のダミー行)を null としてすべて律儀に出力してしまうなど、Geminiと比べると推論結果がやや冗長ですが、プロンプトの工夫次第な印象。ゲームPC程度のGPUで動かせるGemma4でここまでやれれば嬉しい。
{ "title": "株式会社経費報告書", "table_data": { "headers": ["項番", "日付", "摘要", "金額", "備考"], "rows": [ { "A8": null, "B8": null, "C8": null, "D8": null, "E8": null }, { "A9": null, "B9": null, "C9": null, "D9": null, "E9": null } // ... 以降の空白行も同様に null として出力される ], "summary": { "label": "合計", "value": 0, "formula": "=SUM(D8:D25)" } }, "approval_fields": { "section_manager": "課長", "department_manager": "部長", "approval": "承認" } }
3.2 手法別再現性・精度の目視検証結果
| カテゴリ | 手法 A (Docling) | 手法 B (Kami/Gemini) | 手法 B (Kami/Gemma4) |
|---|---|---|---|
| 構造再現性 | 非常に高い (テーブル定義のみ) | 極めて高い (帳票の階層を理解) | 高い (一部の座標推論に揺らぎ) |
| 意味的抽出 | 不可 (テキストのみ抽出) | 良好 (項目と値を対で抽出) | 良好 (冗長な説明が含まれる場合あり) |
| レイアウト耐性 | ルールベースで安定 | 複雑な結合セルに強い | 複雑な結合に強いが推論ミス稀有 |
3.3 結果として
1. ルールベースの限界と堅牢性 (Docling)
docling は Markdown 変換の安定性に特化して、複雑なセル結合があっても「テキスト」として漏らさず取得するという観点では優秀です。表形式をHTMLで表現させたので、Markdown式の表の表現限界を回避させるだけで使い方が広がります。帳票のフッターや注釈といった、レイアウト上の「意味的な区分」はなくなるので、2次利用の時には注意ですね。
2. VLM モデル比較 (Gemini vs Gemma4)
- Gemini 3.1 Flash-Lite Preview: さすがの文脈理解力。そこそこ複雑な結合セル群 (
06_extreme_merge) でも論理単位を的確にグループ化し、JSON 構造に落とし込んでいました。Flash-Liteでこれなら良し。 - Gemma 4 (Local): 空間推論において Gemini に肉薄し、実際の出力でも
03_complex_reportのような複雑な帳票の計算式や承認欄を構造化できています。十分使えるレベルでは?
4. 運用・技術的推奨指針
| 運用フェーズ | 推奨手法 | 理由 |
|---|---|---|
| Markdownに変換したい | Docling | 環境構築が容易で、帳票の「内容」を素早くテキスト化できるため。 |
| 抽出重視 | Kami + Gemini | 帳票の意味を解釈し、データ抽出ミスを最小限に抑える必要があるため。 |
| コスト重視 | Kami + Gemma4 | 外部 API に依存せず、高度な論理構造抽出(計算式の解釈や項目と値のペアリングなど)が可能であるため。 |
5. 結びに
「方眼紙エクセル」の解析は、確かに見た目の解析に目が向きます。Docling がその「形式」に着目したのに対し、Kami はその構造を考えています。構造化データを求めるのであれば Kami に優位がありそうです。要件に合わせて両手法を適切に使い分ける(あるいは組み合わせる)運用になると思います。色々な表現ができちゃうのがエクセルです。逆に言えばmarkdownの表現に限界がある以上、元データをちゃんと整理して保存しておくことが重要であると、改めて感じました。
エクセルが中途半端なWYSIWYG風なのは結構辛いですね・・・。