PTA役員選出の集計をAIで効率化する方法〜スキャン→ChatGPTで自動集計!
はじめに
毎年秋が始まると慌ただしく行われるPTAの役員選出。紙のチェックを回収して手で数えると時間がかかるし、集計ミスも起きやすいですし、親御さんたちが忙しい中、時間をかけて作業をすることもあり大変ですよね。
スマホでスキャン → OCRでテキスト化 → ChatGPT に渡して集計すれば、誰でも短時間で「票数順リスト(チェック数付き)」が作れます。この記事は ChatGPTを初めて使う方 に向けて、具体的な手順とコピペで使えるプロンプトをできるだけ丁寧にまとめましたので、全国で困っている皆さんも参考にしていただければ。
全体の流れ
用紙をスキャン(スマホでOK) → PDF/画像を作る
OCR(文字起こし)してテキスト化(Google Drive / Adobe Scan / Microsoft Lens など)
テキストを簡単に整形(チェック記号を統一する等)
ChatGPTに渡して集計(票数を数え、票数順に並べる/回収順に並べる等)
結果をCSVやGoogleスプレッドシートに貼り付け、印刷や共有
1)スキャン
スマホで撮影→スキャンするだけでOK。アプリは Google Drive(Android内蔵)・Microsoft Lens・Adobe Scan 等がおすすめ。
解像度は高め(300dpi相当)。文字やチェックが潰れないよう、影や反射に注意。
複数枚ある場合は「ページ順に」スキャン(回収順に集計したい場合、回収順=スキャン順に揃えるのが楽)。
2)OCR(文字起こし)のやり方
Google Drive:PDF/画像をアップ → 右クリック → 「アプリで開く」→「Googleドキュメント」で自動OCR。
Microsoft Lens / Adobe Scan:スキャン時にOCRしてWord/テキストで保存できる。
出力はテキスト(.txt)かGoogleドキュメントにしておくと扱いやすい。
注意:手書きや汚れたチェックはOCRミスが出やすいので、後で目視確認が必要です。
3)テキストの“前処理”(ChatGPTに渡す前にやると成功率が上がる)
OCRから出てきたテキストは人が読みやすいが、機械で解析しやすい形に整えると良いです。最低限やること:
チェック記号を統一
OCRでチェックは ☑ ✓ レ X ■ などに化けることが多い。検索と置換で CHECK や 1 に統一しておく。
例:全置換で ☑|✓|レ|x|X|☒|■ → CHECK
ページ区切りを明示(回収順を保持したい場合)
各スキャン(用紙)ごとに --- Page 1 --- のように手動で挿入しておく。
名前の列だけにする(可能なら)
名簿が「番号 名前 備考」なら、名前だけの列/行にしておくと楽。
(これらはGoogleドキュメントの検索置換/Googleスプレッドシートで簡単にできます)
4)そのままコピペして使える ChatGPT プロンプト(コピペ可)
以下は そのままChatGPTに貼って実行できる プロンプト例です。まずは「OCRでテキスト化→簡単な置換で CHECK に統一した」前提のプロンプトを示します。
A. 基本:票数(チェック数)を数えて多い順に並べる(CSV出力)
あなたはデータ集計のアシスタントです。私はOCRで取り出した名簿テキストを貼ります。各行に「名前」とチェック(CHECK)が混ざっています。やってほしいことは以下です。
1) 名前ごとにチェック("CHECK")の件数を数える。
2) チェック数が多い順(降順)に並べる。
3) 出力は **CSV形式**(ヘッダー: 名前,票数)で返すこと。
4) OCRで読み取りが怪しい名前(明らかに文字化けしているもの)は「要確認: <原文>」として最後に一覧化する。
では以下がOCRテキストです。ここから処理してください。
---ここからOCRテキスト---
(ここにOCRで得たテキストを貼り付け)
---ここまで---
※出力例(ChatGPTの返答例)
名前,票数
佐藤 花子,15
田中 太郎,12
鈴木 次郎,8
要確認:
- "佐藤 ?子"(原文:"佐藤 ?子")
B. 応用:回収順に並べた一覧を作る(「回収順=ページ順」を保持したい場合)
※前処理で各用紙ごとに --- Page 1 --- のような区切りを入れておくこと。
あなたはデータ整理の専門家です。以下のOCRテキストには用紙ごとの区切りとして `--- Page 1 ---` のようなラベルがあります。やってほしいこと:
1) 各ページ(用紙)を上から順に番号付け(Page 1, Page 2...)して、ページ内でチェックのある名前を上から順に列挙する。
2) 各名前の累積チェック数(全ページ合計)も併記する。
3) 出力形式はMarkdownの箇条書きで、各行に「名前 — 票数(最初にチェックされたページ番号)」とする。例: `佐藤 花子 — 3票(最初: Page 4)`
4) OCRで判別できなかった名前は「要確認」として最後に列挙。
---OCRテキスト---
(ここにOCRテキストを貼る)
---END---
C. 生データ(改行だらけでぐちゃぐちゃ)の場合:名前抽出とチェック判定を自動化してほしい
あなたはテキスト解析のプロです。以下はOCRで取り出した未整形のテキストです。名簿にある名前とチェックは、同じ行にある場合や次の行にある場合があります。やってほしいこと:
1) テキスト中から「名前らしい文字列」(漢字+ひらがな/カタカナ)を抽出する。
2) その近傍(同じ行か前後3行以内)にチェック記号(CHECK, ☑, ✓, レ, X など)があれば、その名前に1票としてカウントする。
3) 名前ごとに票を集計し、多い順にMarkdownテーブルで出力(列: 名前 | 票数 | 最初に見つかった行番号またはPage)。
4) 判別が怪しい箇所は「要確認」として出力する。
5) 出力は日本語で簡潔に。
---OCRテキスト---
(ここにOCRテキストを貼る)
---END---
5)ChatGPTに渡すときの注意とコツ
一度に貼る量が多すぎると処理が不安定な場合がある(長い場合は「ページ単位」で分割して順次処理)。
名前の正規化(全角/半角・空白削除)が必要なときは、プロンプトに「名前は全角で統一」「姓と名の間の余分な空白を削除」など明示する。
不安な箇所は要確認リストを出力させると、後で目視確認が楽になる。
出力形式を指定(CSV / Markdown / JSON / Google スプレッドシートに貼れる形式)しておくと後処理がラク。
6)Googleスプレッドシートで簡単に集計する方法(ChatGPTを使わない代替)
もしChatGPTに個人情報を渡したくない場合は、Googleスプレッドシートで完結できます(簡単な手順):
OCRテキストを貼る(列A)。
列Bにチェック判定(例):
=IF(REGEXMATCH(A2,"☑|✓|レ|x|X|CHECK"),1,0)
列Cに名前(手動で抽出 or REGEXEXTRACTで抽出)。
ピボットテーブルか QUERY で集計:
=QUERY({C2:C, B2:B}, "select Col1, sum(Col2) where Col1 is not null group by Col1 order by sum(Col2) desc", 0)
この方法はプライバシーを保ちながら集計できます。
7)よくあるトラブルと対処法
手書きが多くOCRで読み取れない → 人の確認が必要。チェックは画像で見て確認、または手書き改善を依頼。
チェックの種類が混在している → 置換で CHECK に揃え、再実行。
同姓同名がいる → 名簿に学年やクラスも併記しておくと区別可能。ChatGPTには「同姓同名の扱い」をどうするか明記する(例:「同姓同名は学年で区別して下さい」)。
大量の紙(数百枚)を扱う → スキャンは自動ドキュメントフィーダーがあるコピー機でまとめてPDF化。OCRはページ分割をしてバッチ処理。
8)個人情報・セキュリティに関する注意
保護者の氏名は個人情報です。外部サービス(クラウドOCRやChatGPT)に送る前に、自治体・学校の規則や保護者の同意が必要な場合があります。
可能なら名前をイニシャル化してテストし、うまくいったら学校ルールに従って本処理を行うことをおすすめします。
オンプレ(自分のPC)で完結させたい場合は、ローカルOCR(Tesseract)やローカルスクリプトを利用する方法も検討してください。
9)さいごに
紙での集計は時間も労力もかかりますが、少しの手順とツールの使い方を覚えるだけで大幅に効率化できます。今回紹介したスキャン→OCR→ChatGPT(またはGoogleスプレッドシート)の流れは、ITに自信のない方でも取り組みやすい方法です。まずは「テスト用に数枚」から試してみて、慣れたら本番に移してみてください。困ったらこの記事のプロンプトをそのままコピペして使ってみてくださいね。
おまけ:そのまま使えるテンプレ(保護者宛の依頼文)
PTA役員候補の推薦にご協力ください。
1〜2年生の保護者の皆様へ(配付・回収)
・同封の名簿に推薦したい方の氏名にチェックを入れてください。
・チェックは一人につき1つでお願いします。
・記入後、学校までご返却ください。
(個人情報は役員選出の目的以外には使用しません)________________________________
なぜOCRを飛ばして、直接ChatGPTで処理するのは難しいのか?
ChatGPTにPDFを渡すとき、中身が「テキストデータ」なら読み取れます。
例:WordやExcelをPDFにしたもの、入力フォームで作られたきれいなPDF。でも、スキャンした紙のPDFは“画像”扱いになります。
→ ChatGPTはそのままでは「文字」や「チェック」を認識できません。
→ つまり、「誰の名前にチェックが入っているか」を直接は理解できないのです。
じゃあ完全に無理?
いいえ、方法はあります。2つのパターンがあります👇
① OCRをChatGPTの中でやる(OCR内蔵型)
ChatGPTの画像理解機能を使えば、スキャンPDFや画像の中身を「目で見るように」解釈できます。
ただし注意点:
小さいチェックや薄い手書きは見落とすことがある
大量ページだと処理が重い
精度は専用OCRソフトに比べるとまだ低め
② 事前にOCRをかける(実務でおすすめ)
Google Drive(自動OCR機能)やAdobe Acrobatを使ってPDFをテキスト化してからChatGPTに渡すと、精度が高く安定します。
特にPTA名簿のように「人名」が並んでいる資料はOCRソフトの方が強いです。
実用イメージ
OCRなしでChatGPTにやらせる場合
→「このPDFの各名前にチェックがついているかを読み取って、チェックがある人だけリスト化して」と指示
→ ページ数が少なければ可能。ただし、誤読が多い/精度は低い。OCRありでChatGPTに渡す場合
→ 「このテキストの中からチェックを数えて、票数順に並べて」と指示
→ 処理は早いし、再現性も高い。
結論
技術的にはOCRなしでもChatGPTに読ませられるけど、正確さを求めるならOCRを挟む方が安心。
「何十枚もの名簿をまとめて集計」する用途では、OCR→ChatGPTがベスト。
「テスト的に数枚だけ」「ざっくり確認」ならOCRなしでも試せます。
