經過前三篇的努力,我們左手握有中研院的「1920年代空間圖資」,右手拿著從《臺灣通史》榨取出來的「600+ 個古地名與基建列表」。
這就像是一場歷史級別的相親大會——我們要讓書本裡的名字,在歷史地圖上找到歸宿,並將它們賦予現代的 WGS84 GPS 經緯度座標。這個過程,技術上叫做 Geo-Coding (地理編碼)。
同名異地的災難
原以為只要用程式名稱對齊 (Fuzzy Label Matching) 就好,但代誌不是憨人想的那麼簡單!
台灣地名有驚人的重複率。古書裡寫了個「新莊」或「福興」,如果你不用大腦,程式很容易把北部的事蹟,釘到南部的地圖上,導致座標嚴重飄移。
第一波升級:內政部兵器庫支援
首先,1920 年代的「街庄/大字」顆粒度有時仍不夠細緻,很多《臺灣通史》提到的小聚落找不到。
我決定導入國家級的兵器庫支援:內政部 3 萬筆古地名資料庫 (moi_settlements)。我把這 37,758 筆資料匯入我的資料庫,形成了一個包含了「1920 歷史界線 + 現代文史調查點位」的「三層立體查詢網」。
第二波突破:上下文錨定法 (Hierarchical Anchor)
為了解決同名造成的標記錯誤,我幫自動配對腳本裝上了**「閱讀理解能力」**。
我實作了 guess_anchor 演算法。配對前,程式會先反查《臺灣通史》原文,看看這個地名的上下文寫了什麼。
- 如果上下文提到了「淡水 / 艋舺」,程式會自動將這個地名的搜尋範圍 錨定 (Anchor) 在「臺北州」。
- 如果上下文提到「打狗 / 阿猴」,程式就只准在地圖的「高雄州」範圍內尋找這個聚落。
這招「因文定地」,徹底解決了同名異地的痛點!
史圖合一的瞬間
當我按下 geo_coding.py 的執行鍵,看著終端機不斷吐出 Log:
⚓ Anchored: 中港 -> 對應到苗栗竹南的中港 (24.6853, 120.8519)⚓ Anchored: 六張犁 -> 成功定錨...⚓ Anchored: 牛罵 -> 臺中市清水區牛罵頭...
憑藉著上下文疊圖與三層過濾網,我成功地讓近 200 個寫在文言文裡的歷史地名,從泛黃的紙張上躍起,精準降落在 Google My Maps 的紅色圖釘上。
從此,《臺灣通史》對我而言不再是一本書,而是一張「活」在台灣大地上的資料庫網格。
(未完待續:終章!看看我們如何用這張網格,重新定義一位新竹的開墾大老!)
本文為哈爸與 AI 助理協作產出,紀錄實體探勘與數位工程之歷程。