PDF地獄から政策検証へ:自治体PDF表をきれいに扱う実務パイプライン

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜。政府や自治体が出す資料、これ見てくださいよ、表がPDFに埋まってて再利用できないこと多くないですか?エンジニア的に言うと、データがピクセルでしか存在しないと検証も再現もできないんですよね!
- PDFに埋められた表が再利用を阻んでいる現状を技術的に整理する
- PDF→CSV変換の実務パイプラインと品質評価指標を示す
- 行政向けの現実的な改善提案(メタデータ、API、ワークフロー)を提示する
結論
PDFでしか公開されていない政策データは「証拠の鎖」を切ってしまう。総務省やデジタル庁の機械可読ルールはあるけど(例: https://www.digital.go.jp/、https://www.soumu.go.jp/)、現場はまだPDF頼み。要するに、現実的な抽出パイプライン+品質検証+最低限の公開ルール(CSV添付、JSON-LDメタデータ、APIエンドポイント)があれば、政策目標と実績のギャップをコードで追えるということです。
レポート本文
問題の現状:PDFがなぜダメなのか
これ見てくださいよ。多くの自治体/中央省の報告書はPDFかPPTXで公開されていて、表が画像・埋め込みフォントで固定されている。デジタル庁の機械可読性案にもあるように(参照: https://www.digital.go.jp/assets/... )、レベル1〜3の要件が提示されているけど、現場でCSVやAPIが付くケースは限定的です。要するに、人がコピペして使う前提のデータ公開だと、検証ができないということです。
技術的アプローチ:実務パイプラインの提案
エンジニア的に言うと、PDF→構造化データのパイプラインは3段階で考えるとやりやすいです。
ツール例とサンプル(概念コード):
# 簡易パイプライン(例)
import requests, pdfplumber, camelot, pandas as pd
from pytesseract import image_to_string
r = requests.get('https://example.go.jp/report.pdf')
open('report.pdf','wb').write(r.content)
テキストベースの抽出優先
with pdfplumber.open('report.pdf') as pdf:
pages = [p.extract_table() for p in pdf.pages]
テーブル抽出のフォールバックに Camelot
tables = camelot.read_pdf('report.pdf', pages='1-end', flavor='stream')
dfs = [t.df for t in tables]
正規化してCSV出力
final = pd.concat(dfs)
final.to_csv('report.csv', index=False)
※OCRが必要な場合は Tesseract + layout-parser などを組み合わせる。実務では複数手法を組み合わせてスコアリングするのがコツです。
品質評価(どうやって「正しい」かを測るか)
品質評価は「セル単位の正解率」を基本にします。手順の例:
- 手作業でサンプルのゴールドデータ(ground truth)を作る(10〜30表)
- 抽出結果と比較して、セル一致率、行列のずれ率、数値パースエラー率を算出
- 指標: precision, recall, F1(セル単位) + 数値エラー率
簡易評価コード例(概念):
# pseudo: compare two pandas DataFrame cell-by-cell
matches = (df_extracted.fillna('') == df_truth.fillna('')).sum().sum()
total = df_truth.size
precision = matches / total
自動化と再現性
エンジニア的に言うと、Git + CI(GitHub Actions)で「PDFのURLが変わったら自動で抽出して評価」するのが良いですよね。加えて、DVCやSWHで抽出結果のハッシュを管理すると、いつでも再現できます。
政策検証への実践例
想像してみてください。ある自治体が「子育て支援費を毎年10%増」とマニフェストで謳っているとします。公開されているのが年度報告のPDFだけなら、上のパイプラインで年度別支出表を抽出して時系列化すれば、実績が目標に届いているかを数値で示せます。
例: pandasで年次比較
df = pd.read_csv('budget_by_year.csv')
df['yoy'] = df['支出'].pct_change()
print(df)
これで「目標10%増に対して実績は3%増に留まる」といった検証ができる。要するに、コードで語れば政策の“言った・やった”が可視化できるんです。
行政向けの現実的改善提案
現場で実現可能なステップを列挙します。
- 公開ルール: PDFと同時にCSVを必須にする(CSVが不可なら理由説明を必須に)
- メタデータ: schema.org/Dataset 準拠の JSON-LD をセットで置く(取得URL、更新日、スキーマ、署名)
- PDFの中に機械可読の添付(Attachments)としてCSV/JSONを埋め込む
- API: データポータルに小さくてもREST/GraphQLエンドポイントを作る
- 品質チェック: CIで抽出→テスト(セル完全性、数値整合性)を回す
GovTechやデジタル庁が提示する基準(例: https://www.digital.go.jp/ / https://www.soumu.go.jp/)を現場運用に落とすなら、まずは「CSVを同梱」するところから始めるのがコスパ最強です。
まとめ
- PDFだけの公開は政策検証性を著しく下げるんですよね。
- 現場でできる実務パイプライン(pdfplumber/Camelot/Tesseract + 品質評価)で暫定的に可視化はできる
- 長期的にはCSV/JSON-LD/APIの三点セットを標準化すると再利用性が劇的に上がる
おかむーから一言
技術で社会をアップデートするって言うと大げさだけど、まずはPDF1枚をCSVにする地味な勝利を積み重ねるのが大事だと思ってます!自分の手で政策の「やった/やってない」を可視化していきましょう!
情報ソース
- https://zhidao.baidu.com/question/1778712607594096420.html
- https://www.intec.co.jp/column/smartcity-08.html
- https://stackoverflow.com/questions/73567541/argos-workflow-how-do-i-build-my-workflow-which-runs-a-python-script-present-in
- https://www.digital.go.jp/resources/data_case_study_private
- https://zhidao.baidu.com/question/759194239533719812.html
- https://www.zhihu.com/question/290714454
- https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/256dcba6-b936-4031-b88d-3abb27e27f9b/f7af0ca4/20260331_meeting_executive_outline_06.pdf
- https://www.zhihu.com/question/6430289390
- https://www.soumu.go.jp/menu_news/s-news/01toukatsu01_02000186.html
- https://www.zhihu.com/question/38923279
- https://www.zhihu.com/question/40553450
- https://www.govtechtokyo.or.jp/services/data-utilization/
- https://www.zhihu.com/tardis/zm/art/1924492115896960699
- https://note.govtechtokyo.jp/n/n77785a8254d6
- https://www.zhihu.com/question/372341437
シェアする
関連レポート

公共予約システムの“ログインからAPI化”ロードマップ:パスワードレスで運用コストを下げる技術提案
公共施設予約の認証とデータを段階的にAPI化して運用コストを下げる技術ロードマップを紹介します。

政府データを“つなげる”発想:省庁バラバラを超えるフェデレーション戦略
フェデレーション層で省庁データをつなぎ、PDF混在を克服する実践的な技術案を示す。

政策ダッシュボードは“作るだけ”じゃダメ!KPIを自動で監査するパイプライン設計
政策ダッシュボードの数値を自動監査するパイプライン設計案。API・スキーマ・差分管理でKPIの信頼性を上げる技術手法を紹介します。