考古題下載、切題與清理實作教學

這份教學帶你跟著做一次「PDF 考古題 → 一題一張乾淨圖片 + 標準答案 JSON」的完整流程。你不需要自己寫程式,每個步驟都只要在 Codex 對話視窗裡用自然語言下指令即可完成。

本教學對應 module2/ 資料夾,裡面已經有兩組完整跑過的範例資料,你可以隨時打開來對照「正確結果長什麼樣子」。如果想跳過下載階段直接練切題,也可以下載 module2-raw.tar,解壓後會得到 raw/115/、raw/math-115b/ 這兩組原始 PDF。

範例資料試題來源已下載的 PDF已切題+清理完成的成果
115 學年度
電機與電子群資電類
專業科目(一)(二),共 100 題
從零下載示範module2/raw/115/module2/repo/115/
115 學年度
數學(B)
共同科目,共 25 題
PDF 已在手示範(不用下載)module2/raw/math-115b/module2/repo/math-115b/

學習目標

做完這份教學,你應該能夠:

先備條件

這三個工具都是工作坊講師事先寫好的 custom skill(一份說明文件 SKILL.md,加上對應的腳本),放在這個專案的 .claude/skills/ 資料夾底下(不是 Codex 原生內建的功能)。跟 Codex 對話時,把你要做的事講清楚,並提一句「可以參考 .claude/skills/ 底下對應的工具」,讓 Codex 自己去讀說明、決定怎麼用;如果它沒有主動找到,也可以直接請它打開指定的 SKILL.md 看說明。

整體流程總覽

整個流程分三個階段,前一階段的輸出就是下一階段的輸入:

考古題處理三階段:下載試題與標準答案 PDF、切成單題圖片並建立答案表、清理圖片的多餘空白與題號;前一步輸出就是下一步輸入。
整體流程概念圖解
階段在做什麼輸入輸出對應 skill
① 下載抓試題+標準答案 PDF學年度、群類raw/<year>/*.pdfdownload-exam-pdf
② 切題把 PDF 切成一題一張圖,配對答案①的 PDFrepo/<name>/*.png + keys.jsonslice-exam-pdf
③ 清理裁掉多餘空白、塗掉題號②的 png原地覆寫、變乾淨的 pngclean-exam-question-images

兩組範例資料剛好示範了兩種起點:115 學年度電機與電子群資電類是「從零開始」,三個階段都跑過一次;115 數學(B) 則是「PDF 已經在手上」,直接從步驟二開始 這是因為 download-exam-pdf 這個工具目前只認得「專業科目(一)(二)」,抓不到數學這種共同科目,這一點在步驟一會再說明。

步驟一:下載試題與標準答案 PDF

這一步的產出,是接下來切題階段要用的原始 PDF。如果你手上已經有 PDF 了(例如老師自己保存的考古題),可以直接跳到步驟二。

目前的能力邊界:download-exam-pdf 這個工具目前只認得成績單頁面上「專業科目(一)」「專業科目(二)」這兩個列標籤,抓不到「數學(A)/(B)/(C)」這類共同科目 這正是範例資料裡數學(B)直接跳過這一步、從切題開始的原因。如果你要練習的是共同科目,請自行到網站上手動下載 PDF,再從步驟二開始。
下載前的起點判斷:已有試題 PDF 時直接切題;沒有 PDF 時,專業科目一或二可用工具下載試題與答案,其他科目自行取得 PDF 後再從切題開始。
下載範圍與起點判斷圖解

用一句話請 Codex 做

請到技專校院入學測驗中心的網站,幫我下載 115 學年度統測「電機與電子群資電類」的資料。
我只需要專業科目(一)、專業科目(二)的試題,還有這兩科的標準答案。
下載好之後存到 module2/raw/115,檔名保留系統原本的命名方式。

產出:module2/raw/115/ 底下會出現 4 個檔案:115專業一試題.pdf、115專業一答案.pdf、115專業二試題.pdf、115專業二答案.pdf。

驗收重點

步驟二:切成單題圖片+答案 JSON

這一步把整份 PDF 切成一題一張的 PNG 圖片,並且對照標準答案 PDF,做出一份「圖片檔名 → 正確答案」的 JSON。

試題與標準答案經逐題整理後,產生一題一張圖片與圖片檔名對應正確答案的對照表;檔名與答案必須一一對應。
切題與答案配對概念圖解

用一句話請 Codex 做

請幫我把 module2/raw/115 底下 115 學年度試題 PDF,每一題切成一張圖片,
檔名用 module2/repo/115/115專業<1或2>Q<題號>.png。
再對照標準答案 PDF,做出 module2/repo/115/115keys.json,
key 要跟圖片檔名完全一樣(含 .png),value 放正確答案字母。

產出:module2/repo/115/115專業1Q1.png ~ 115專業1Q50.png、115專業2Q1.png ~ 115專業2Q50.png,加上一份 115keys.json,內容像這樣:

{
 "115專業1Q1.png": "B",
 "115專業1Q10.png": "B",
 "115專業1Q11.png": "A",
 ...
}

共同科目(例如數學):題數不是 50 題,且檔名要手動改

共同科目考卷通常是 25 題,不是 50 題,記得跟 Codex 說清楚正確題數;另外 slice-exam-pdf 的輸出檔名固定寫死「專業」兩個字,即使科目代號換成字母也一樣,所以切完數學卷之後,檔名還是會叫 115專業BQ<n>.png,要請 Codex 另外改名成 115數學BQ<n>.png,keys.json 裡的 key 也要同步改。

用一句話請 Codex 做

請幫我把 module2/raw/math-115b 底下的 115 學年度數學(B) 試題 PDF 切成一題一張圖片,
這科是共同科目,只有 25 題,科目代號用 B。
輸出檔名請直接用 115數學BQ<題號>.png(不要用預設帶的「專業」字樣),
再對照標準答案 PDF 做出 keys.json,key 要跟檔名一致(含 .png),存到 module2/repo/math-115b。

驗收重點

步驟三:清理圖片

切出來的圖片下緣常常會多留一小段空白,甚至帶到下一題的一小段殘影;題號(像「50.」「11.」)也還印在題目最前面。這一步做兩件事:

這兩段清理邏輯是直接寫給 Codex 讀取後即場執行的,所以這一步一定要透過 Codex 對話來做。

清理題號前先乾跑並查看偵測結果;每張剛好一個題號才正式清理,若是零個或多個就停下來人工檢查,以免誤刪選項。
乾跑後再正式清理的安全圖解

用一句話請 Codex 做

對 module2/repo/115 資料夾裡的每張 *.png:
1. 裁掉下面多餘的空白(含「以下空白」殘影),但不要裁到真正的內容。
2. 清掉題號(像「50.」「11.」),但 (A)(B)(C)(D) 選項不要動。
執行 Pass 2 之前,先「乾跑」一次,把每張圖偵測到的題號區塊印出來讓我看過,
確認每張圖都剛好抓到 1 個題號區塊之後,才正式塗白存檔。
為什麼一定要先乾跑:Pass 2 判斷「這是不是題號」用的是像素座標的門檻值(例如題號要在 x≤220 開始),這組門檻是針對這個考卷範本量身調校的。萬一某一年、某一科的版面跟預期不同,門檻可能會抓錯 乾跑只印出偵測結果、不會真的動任何像素,讓你能在「真的塗白存檔」之前先發現異常,避免一次做壞整批圖片。

驗收重點

動手做:換一組資料,自己跑一次全流程

看懂範例之後,換你自己動手跑一次。建議照下面兩種難度挑一種:

基本版:從切題開始(不需要等網路下載)

如果你手邊已經有其他學年度或科目的 PDF(例如之前下載過、或同事給的),可以直接拿來練切題+清理兩個階段,跳過下載步驟,輸出到一個新資料夾,不會動到 module2/ 裡已經驗證過的成果。比照步驟二,請 Codex 把試題切成一題一張圖片,輸出到 module2/repo/114-practice 這類新資料夾;切完之後,比照步驟三,請 Codex 對這個資料夾執行清理(記得先乾跑)。

完整版:從下載開始

換一個你自己感興趣的學年度或群類,從步驟一的下載開始,完整跑過三個階段。建議先請 Codex 用「乾跑」模式確認群類名稱有比對到,再正式下載,避免白跑一次網路請求。

練習時的自我檢查

常見狀況快速對照表

狀況代表什麼該怎麼做
下載到的 PDF 打開一看,群類或科目跟預期不同下載時比對到的群類、科目名稱有誤請 Codex 開啟 PDF 肉眼核對,確認無誤才繼續下一步
共同科目(數學 A/B/C)沒辦法用 download-exam-pdf 下載這個 skill 目前只認得「專業科目(一)(二)」的列標籤自行取得 PDF,直接從步驟二切題開始
切完題後檔名裡有「專業」兩字,但其實是數學科slice-exam-pdf 的輸出檔名固定寫死「專業」,不會因為科目代號換成字母而改變請 Codex 改檔名+同步改 keys.json 的 key,再進清理階段
Pass 2 乾跑時某張圖出現 0 個或 ≥2 個題號區塊版面跟預期範本不同,或門檻誤判先停下來人工檢查那張圖,不要直接跳過或硬套用
清理完後某張圖底部還留一整行不相關的文字這是切題邊界的殘影,不是單純的空白或雜訊回頭用 slice-exam-pdf 重新切那一題,不要在清理階段加規則硬修
想把 Pass 2 的 gap 門檻從 14 調小一點(例如 10)兩位數題號(如「11.」)本身兩個數字間距就可能到 10px門檻維持 14,往下調會把兩位數題號誤判成只清一半,留下殘影

下一步

清理乾淨的圖片+keys.json,就是後續「自主練習小工具」要用的原始素材 下一步可以參考 Module 3,把 module2/repo/<name>/ 這個問題集資料夾交給 Codex,從零一起設計並打造一個不用架站、雙擊就能打開的學生自我測驗網頁與教師端 CSV 彙整頁面。