地底下的台灣:如何用 AI 打造『全台考古遺址』知識 Master Registry

在之前的 HGIS 系列中,我們主要處理的是「紙上的歷史」——透過方志與古籍還原清代的社會空間。然而,要真正觸摸到「台灣主體性」最深層的脈絡,我們必須將目光投向更長的時間尺度:考古遺址。 如果說《臺灣通史》記載的是數百年的族群演進,那麼埋藏在台南平原地底下的「文化層」,則是長達數千年的地景變遷證詞。 今天,我正式在 Taiwan History Atlas 專案中發布了 v260306.1 更新,核心重點就在於建構一套具備「血緣追蹤」能力的 考古遺址 Master Registry (主註冊表)。 🏛️ 為什麼我們需要 Master Registry? 在處理全台遺址資料時,最頭痛的不是「沒資料」,而是「資料太多且碎片化」。文資局有「法定遺址」、中研院有「普查遺址」、地方政府還有「疑似遺址」。 要在 AI 輔助下進行科學分析,我們不能只是貼貼補補,必須建立一個 Master Registry: 資料對齊:解決同一個遺址在不同單位有不同名字 or 座標微差的問題。 層級化建模:將原始資料 (L0) 轉化為帶有語義標籤的實體 (L1),再整合進知識中樞 (L2)。 血緣追蹤 (Source Origin):每一筆數據都能回溯到是哪個單位的原始點位,確保「證據力」。 目前這套系統已成功整合了 2,563 處 遺址,成為我們 HGIS 引擎中最堅實的核心數據庫。 🛠️ 核心腳本與工作流 (Scripts Toolkit) 在 taiwan-history-atlas 儲存庫中,我們透過以下工具實現了這一流程: 1. Layer 1:實體萃取與特徵標記 利用 scripts/extract_entities.py,AI 會自動掃描原始 Open Data 文本,提取出: 文化年代:從大坌坑、蔦松到金屬器時代。 遺址等級:Rank 1(國定)到 Rank 4(疑似)。 特徵標籤:貝塚、石器、多層疊壓等。 2. Layer 2:跨庫遷移與合成 使用 scripts/atlas_migrator.py,將分散在各區域的實體統一遷移至 data/history_atlas.db。這個過程不只是搬家,更是在進行「去重 (De-duplication)」與「血緣標註」。 ...

2026-03-06 · 1 min · 136 words · Wuulong

從個人沙盒到企業大腦:團隊 AI 賦能實驗 (SyncHub) 正式啟動

本文記錄了《企業生成式 AI 轉型》方法論中,關於『個人為主,團隊為原型』的首次實體化實驗。 回顧這些日子以來,我與 AI (Antigravity) 的協作已經達到了一種近乎肌肉記憶的流暢感。從建立 [TMUX 自動化工作空間]、使用 Hammerspoon 打造「2+1 快手」,到用 TASKS_LEDGER 與 Mermaid 畫出戰略版圖,這是一套高度個人化的超級沙盒 (PA Sandbox)。 但問題來了:如果我是一個超級個體,當我們要把這種力量擴展給一個 3 到 5 人的「超小型團隊 (Nano-Squad)」時,該怎麼辦? 總不能要大家都學會寫 Python 腳本,或是用我特製的 Hammerspoon 快速鍵吧? 這就是這次 團隊 AI 協作中樞實驗計畫 (SyncHub Prototype) 誕生的背景。 理論基石:碎形邏輯與單一真相來源 (SSOT) 在《演化路徑:企業賦能的碎形邏輯:個人為基,團隊為原型》第 0 章中,我們定義了企業轉型的最小實踐單位:超小型團隊 (Nano-Squad)。 如果企業是由個體組成的碎形,那麼團隊管理與個人管理的架構就應該長得一樣。 這次的實驗,我們徹底拋棄了 LINE 或 Discord 這種容易造成「資訊孤島」與「語意發散」的即時通訊軟體作為真相來源。我們將 GitHub (Git 檔案系統) 確立為團隊的唯一真相來源 (Single Source of Truth, SSOT)。 所有的共識、決策、任務進度,都必須落地為 Markdown 或 YAML 檔案。 創新機制:非同步的「脈絡拋接 (Inbox / Outbox)」 為了消弭「團隊強制同步」帶來的摩擦力,並且保護個人的「AI Sandbox」實驗空間,我們設計了一套極其優雅的對合機制: 個人主權區 (members/{name}/workmgr/):每一個團隊成員都有自己的安全區。你在這裡用你習慣的法子、自己的 ChatGPT/Claude 來打草稿、做研究,沒人會管你。 對合與裁決 (sync/outbox/):當你覺得任務完成了,或者卡關需要團隊幫忙時,你(人類)必須下達「裁決」。把你的精華整理出一個 Payload,丟進你的 Outbox。 戰略大腦 (workmgr/inbox/):團隊級別的 AI (SyncHub),就像一個數位幕僚長。它會定時去各個成員的信箱收信,檢查有沒有語意衝突?有沒有偏離 Roadmap 戰略?然後自動將這些進度整合成團隊今天的小報,並刷新總任務帳本 (TASKS Ledger)。 這套機制的精妙之處在於:它將微軟或 Google 提倡的 Multi-Agent System (MAS) 本地化到了檔案系統上。 LLM (大型語言模型) 原生就非常擅長讀取這種純文字的檔案結構! ...

2026-03-02 · 1 min · 209 words · 哈爸

從混亂至秩序:鳥鳴音訊資料庫的 AI 自動化改裝實錄

面對數百首從 CD 轉錄、檔名雜亂、標籤缺失的鳥鳴音訊檔,你會選擇手動一首首修改,還是開發一套具備「生物學智商」的自動化系統? 我起初的想法很單純:在野外走動時,如果聽到鳥聲,我希望能有機會辨識出那是哪隻鳥。於是,企鵝給了我一大包鳥鳴音檔。我只是想找個容易的方式,能隨時翻出想聽的聲音來學習,結果為了這個簡單的願望,就乾脆擼出了這套工具。 這篇文章記錄了 birdsong-processing-kit 的誕生過程:我們如何利用 Gemini AI 與 iNaturalist 生物資料庫,將 816 首混亂的 MP3,轉化為具備「綱、目、科、屬」專業階層、內嵌高清封面與詳細標籤的數位資產。 🎯 核心目標:建立聲音的「數位孿生」 我們擁有的原始資料非常雜碎:有的檔名是「3-55」,有的標籤是日文,有的則是空白。這次自動化改裝的核心目標有三: 結構化分類:按生物學階層(綱/目/科/屬)重新組織目錄。 資訊厚化:自動注入 iNaturalist 的標準中文名、學名、以及物種封面圖片。 溯源管理:在 ID3 標籤中保留原始路徑,確保搬移後依然能追蹤來源。 🛠️ 實作方法:身分校對三部曲 (Identity Cascade) 在開發過程中,我們建立了一套名為「識別決策瀑布」的邏輯,以達到準確度與成本的平衡: 1. 文字優先 (Text-First Discovery) 過度依賴 AI 聽音辨位既昂貴又緩慢。系統會先遍歷原始 ID3 標籤與檔名,清洗掉序號與雜訊,產生候選清單,並優先查詢 iNaturalist API。只要文字比對能獲得精確分類,就不啟動 AI。 2. AI 聽聲辨位 (Gemini 2.5-flash) 針對完全沒有名稱資訊的音軌,系統會自動上傳音訊至 Gemini 2.5-flash。透過 Flash 模型強大的多模態理解力,讓 AI「聽完」後回傳 JSON 格式的識別報告,作為識別的最強墊底方案。 3. 分類中文化校正 iNaturalist 的高階分類(如目、科)往往只有英文或拉丁文。我們另外調用了 Gemini 2.5-flash 針對識別出的學名清單進行批次翻譯,確保目錄結構呈現如「鴞形目/鴟鴞科」這樣的純中文專業觀感。 🚧 遇到的挑戰與克服之道 挑戰 A:AI 成本與處理速度的矛盾 困境:全量 800 多筆若全部上傳辨識,不僅 Token 消耗大,且速度緩慢。 克服:實施「文字預檢」機制。透過 mutagen 深度挖掘 ID3 標籤中的「隱藏資訊」,將 80% 的檔案在文字階段就完成對合,剩餘的 20% 才交由 AI 處理。 ...

2026-02-25 · 1 min · 126 words · Wuulong

從個人沙盒到團隊對合:v1.4.0 打造虛擬企業的「實踐原型」

在 v1.3.0 的發布文中,我們確立了企業 AI 轉型的「物理化」架構與 L0-L4 的層次化賦能。但隨著理論的完善,一個更尖銳的實戰問題浮現:「如果我只有 5 個隊友,明天早上進辦公室,我們該如何用 AI 開始協作?」 這就是今天發布的 v1.4.0 核心任務:讓理論落地為「團隊實踐原型」。 1. 遞迴演化的邏輯:為什麼是「團隊」? 企業轉型往往死於規模的巨大。我們在 v1.4.0 中提出了一個關鍵假設:「團隊是企業賦能的最小實踐原型」。 如果一個 5 人的 Nano-Squad 能夠達成高度的 AI 對合與智力自動化接力,那麼企業級的轉型只不過是這套原型的無數次複製與連結。因此,我們在全書的第一章之前,強行插入了「第 0 章」,直接定義這套「虛擬企業實踐原型」。 2. 第 0 章:虛擬企業的「物理骨架」與「數位管家」 在 v1.4.0 中,我們不僅是寫書,更是直接產出了可運作的資產: 協作格律 (Chapters 0.1-0.2): 我們不再談空泛的溝通,而是直接發布了 「團隊手冊 (Handbook)」 與 「工具指引 (Tools Guide)」 範本。這是團隊的「數位憲法」,明確定義了資產存放位置與 AI 互動的格律。 管理 Repo 目錄設計 (Chapter 0.3): 這是一套針對虛擬企業設計的 管理 OS 目錄架構。透過 /workmgr/(執行)、/meeting/(共識)、/assets/(資產)與 /members/(個人空間)的物理隔離,讓團隊的「單一事實來源 (SSOT)」成為現實。 數位幕僚長 SyncHub (Chapter 0.4): 這是本次升級的最大亮點。我們將 SyncHub 定位為 「數位管家」 而非「數位憲兵」。它守在背景,透過 Git 事件驅動,默默地整理進度、產出小報,並在成員完成任務時自動為下一位接棒者準備好脈絡。 3. 個人沙盒如何接入團隊? 很多團隊協作的失敗,在於犧牲了個人的「創造手感」來換取「集體同步」。 ...

2026-02-24 · 1 min · 119 words · Wuulong

歷史的降維打擊:將「竹塹五書」煉成 HGIS 空間知識庫

當我們開始嘗試將 AI 與歷史地理資訊系統 (HGIS) 結合時,最初是在探勘總體性的《臺灣通史》。但歷史的魔鬼往往藏在地方的細節裡。 為了驗證我們的架構是否具備「橫向擴展」到區域史料的能力,我將目光轉向了北台灣早期的政經中心——竹塹 (新竹)。這次,我決定一次挑戰五本重量級的地方方志:《新竹縣採訪冊》、《淡水廳志》、《樹杞林志》、《新竹縣志初稿》、《新竹縣制度考》。 這五本書,總計 34 卷、9,000 多條史料片段。如果單靠純文本搜尋,那就像是在汪洋中撈針。 今天,我正式在 Taiwan History Atlas 專案中,釋出了這套針對新竹史料開發的「多書跨卷整合與空間對合框架」,並同步上線了 竹塹五書歷史知識地圖。 🏗️ L0-L1-L2:史料的階梯式煉金術 要讓 AI 不會在這 9,000 多條文獻中「幻覺」,我們採用了嚴謹的「分散式溯源,集中式建模」三層架構: 1. L0 文獻底座 (Text ETL) 有別於單一文本,地方方志的卷次編排極度不一致。透過 hsinchu_multi_loader.py,我們實作了多種 Regex 解析器,一次性將五本史書的目錄、卷次、條目全部打散又重組,完美塞入 hsinchu_history.db 的標準 Documents -> Volumes -> Contents 結構中。 2. L1 實體萃取與降維對合 (Entities & Linkage) 光有文字不夠,我們需要提取「有意義」的節點。 透過 AI 輔助腳本,我們一口氣從五書中抓出了三類實體: Infrastructure (基礎建設):1,410 筆(橋樑、隘口、古道、城門等)。 Location (聚落空間):4,343 筆(堡、里、庄、社、窠、坑等)。 Irrigation (水利開發):834 筆(陂圳、埤塘、水門等)。 但困難來了:古地名在地圖上是找不到座標的! 例如史書寫「隆恩圳」或「林先坤陂」,現代 Google Map 根本不知道在哪。 這時我們啟動了 「地理特徵降維打擊」 的演算法。我們寫了清洗函數(如 clean_infra_name, clean_water_name),把地名的尾巴(像是 xxx庄、xxx圳、xxx城門)全部剁掉,只保留核心字根。 ...

2026-02-23 · 1 min · 159 words · Wuulong

給數位田野的升級指引:從敘事到技能,《流域導航》v2.0 正式釋出與 HGIS 三層架構實踐

在完成《個人賦能》書籍的集成後,我的注意力重新回到了這片土地。 過去一週,我們對《流域導讀》(現正式更名為《流域導航》)進行了一場堪稱「範式轉移」的升級。如果說 v1.0 是我帶著你「看」河流的故事,那麼今日釋出的 v2.0,則是交付給你一套能跟河流「對話」的數位技能組。 這不只是一本書的改版,這是一場關於「認知效率」的革命。 為什麼要有 v2.0?從「敘事」轉向「技能」 在實地探勘曾文溪與二仁溪的過程中,我發現一個巨大的痛點:即使我有再多的熱情,面對百年的地理變遷與海量的史料,單靠人力去對合座標與文獻,效率實在太慢。 於是,在 v2.0 中,我們確立了 「Skill-First Approach (技能優先)」 的核心方針。我們不再只是寫下河流的歷史,而是開發一套名為 hgis-atlas-architect 的 AI 技能,讓 AI 助理化身為歷史地理架構師。 核心突破一:HGIS Layer 0-1-2 三層架構 我們定義了土地知識的演進路徑: Layer 0 (原始資產):1920 年代的 SHP 圖資與《臺灣通史》的 60 萬字原文。 Layer 1 (結構實體):透過 AI 萃取的 3,000+ 個古地名、埤圳與先賢索引。 Layer 2 (知識中樞):將土地的「變遷邏輯」建模。例如,我們不再只是標註「蘇厝」在哪裡,而是建模「曾文溪改道如何影響聚落遷移」的動力學模型。 這套方法論,已完整寫入書籍的 Chapter 2.4 (方法論) 與 Chapter 10 (AI 分析師) 中。 核心突破二:極速對合的「15 分鐘法則」 在 v2.0 的實踐案例中(曾文溪與二仁溪),我們驗證了一項驚人的數據:當我們將 HGIS 流程封裝成 AI Skill 後,針對一個完整流域的歷史對合(包含 500+ 個 POI 的史料厚化與座標校準),由原本需要數天的工程,縮短至 15 分鐘。 ...

2026-02-23 · 1 min · 106 words · Wuulong

曾文溪 HGIS 厚數據實作:從 1920 大字到《臺灣通史》的時空對合

在《台灣歷史知識地圖》Layer 2 架構釋出後,我們隨即投入了第一個實戰場域:曾文溪流域。 這次的目標非常明確:我們不再滿足於地圖上冷冰冰的座標點,而是要透過「時空對合」技術,讓曾文溪流域的 696 個 POI 全部具備歷史靈魂與文獻厚度。 任務目標:構建曾文溪「厚數據」圖層 傳統的地圖標註往往只有名稱與座標,但我們希望構建的是具備歷史深度 (Depth)、水利脈絡 (Context) 與 因果邏輯 (Logic) 的「厚數據 POI」。 這意味著,當你走到曾文溪畔的一個小村落時,AI 不僅能告訴你這裡是哪裡,還能告訴你: 這個地名在 1920 年代的行政歸屬。 它在《臺灣通史》或其他地方志中被如何記載。 它與曾文溪水系(如埤圳、改道)的深層互動關係。 製作歷程:數位考古的三部曲 這次的產製過程是一次典型的「AI 協作數位鍊金術」,分為三個階段: 1. 空間鎖定層 (Spatial Anchor) 利用中研院提供的 1920 年代行政邊界 SHP 檔,與曾文溪流域範圍進行空間交集。我們篩選出了 100 個「大字 (Oaza)」點位,並計算其精確的 WGS84 座標。這是將歷史文本對齊到現代地圖的「時空錨點」。 2. 文獻厚化層 (Textual Enrichment) 這是最精彩的部分。我們開發了專門的萃取腳本,針對這 100 個古名點位,自動檢索 taiwan_history.db。 跨庫鉤稽:除了 1920 年代的官方資料,我們更進一步引入了內政部古地名庫的 37,758 筆資料,篩選出流域內的 813 筆關鍵紀錄。 故事萃取:不僅抓取名稱,更重點提取「地名由來(Place Mean)」,例如某個村落是因為躲避曾文溪改道水患而搬遷的。 3. 邏輯建模與匯入 最後,我們將這些分散的片段,透過 Python 腳本整合為 WalkGIS 特徵檔案。總計 696 個厚數據 POI 被正式匯入系統。 成果展示:三個有靈魂的 POI 讓我們看看這套流程產出的成果: ...

2026-02-23 · 1 min · 131 words · Wuulong

從地名到建構 HGIS 的數位鏈金術 (6):Layer 2 知識中樞的誕生與《台灣歷史知識地圖》開源釋出

在先前的系列中,我們完成了從原始文本(Layer 0)到結構實體(Layer 1)的跨越。透過 Python 腳本,我們讓幾十萬字的《臺灣通史》變成了資料庫中清晰的人名、地名與座標。 但在數位考古的最後一哩路,我們面臨了一個更終極的挑戰:AI 該如何「理解」歷史的動態邏輯,而不僅僅是搜尋關鍵字? 這就是今天我們要分享的壓軸戰役——Layer 2:知識中樞 (Knowledge Atlas) 的建構,以及本專案正式對外開源的里程碑。 從「搜尋」進化到「理解」:何謂 Layer 2? 如果 Layer 1 是史料中的「單點實體」,那麼 Layer 2 就是將這些點連成線、織成網的「邏輯圖譜」。 當我問 AI:「為什麼清代的新竹會發展出如此發達的水利系統?」傳統的 RAG 頂多能幫我找到幾段描述。但擁有 Layer 2 知識中樞的 AI,能直接調用我們今日建立的五大專題模型: 水利開發模型 (Eco_System):結構化全台 226 處埤圳,整合開鑿者與水源脈絡。 產業貿易模型 (Economy):分析「南糖北茶」的經濟地理骨架。 官職權力模型 (Gov_Structure):釐清三代政權演變與行政邊界。 衝突因果模型 (Conflict_Logic):建模民變、械鬥與海防轉向的底層邏輯。 地名演進矩陣 (Toponym_Ref):建立「古社名 -> 舊地名 -> 現代區劃」的跨時空映射。 這意味著,現在的 AI 助理(如 Antigravity)已經不只是在陪我翻古書,它更像是一位**「數位歷史策展人」**。 數位鏈金術的成果:taiwan-history-atlas 正式釋出 為了讓這份努力產出的數位資產不只是鎖在我的硬碟裡,今天我們做了一個重要的決定:將今日建構的所有腳本、資料庫 Schema 與核心 Layer 2 知識資產,正式獨立封裝並在 GitHub 上開源。 🔗 Repo 連結: https://github.com/wuulong/taiwan-history-atlas 這個版本不僅僅是一個資料集。它包含了: taiwan_history.db:具備三層架構的核心資料庫。 全套 AI 建模腳本:讓你可以複製這套方法論去處理其他的歷史志書。 AI 導航指引:教導如何引導 GPT/Claude 等 Agentic AI 使用這座歷史大腦的方法論。 授權:公眾領域貢獻 (CC0) 我們決定採用 CC0 1.0 通用公眾領域貢獻宣告 釋出這個專案。 ...

2026-02-22 · 1 min · 97 words · Wuulong

從地名到建構 HGIS 的數位鏈金術 (5):【應用】從拓荒者到城鎮規劃師——用 HGIS 立體化「王世傑」的歷史足跡

在建立完這套由「時光羅盤 + 歷史文本 + 自動空間配對」組成的 歷史空間感知引擎 (HGIS) 後,一定有人會問:費這麼大功夫寫程式,究竟能帶來什麼改變? 答案是:它將徹底顛覆我們閱讀歷史與感知旅行的方式。 讓我們用新竹開源始祖——王世傑 來做個火力展示。 傳統閱讀法的侷限 如果你翻開《臺灣通史.列傳三》,你會讀到王世傑是因為幫鄭克塽的軍隊「運餉有功」,所以獲准前去開拓「竹塹埔」。這是一個很典型的拓王傳記,但也僅止於此。 HGIS 的跨域聯動 (Knowledge Graph) 但現在,我們擁有的是一個具備空間關聯性的資料庫。我透過 SQL 引擎對全庫下達指令,去搜尋「王世傑」這三個字在整本地圖與史書中的關節點。 奇蹟發生了,資料庫以空間座標為支點,將原本散落在不同章節的片段,拼湊成了一張無比立體的「城鎮規劃藍圖」: 取得合法性與資本: 來源:《列傳三》 內容:靠著支援軍事後勤(運糧)獲得竹塹的獨家開墾特許權。這是一切政治資本的起點。 切開經濟命脈 (紅藍圖釘連線): 來源:《農業志》 內容:當上大開發商(業戶)後,出資主導開鑿了我們前幾天才在地圖上完成配對的**「隆恩圳(四百甲圳)」**。這條水路一口氣灌溉了兩千甲良田,也是我們最初在地形圖上看到「黃金洞」的原因! 穩定社會的定海神針 (紅色圖釘): 來源:《宗教志》 內容:人在吃飽之後,需要心靈依託。王世傑在南門的「巡司埔」捐地,興建了新竹最古老的觀音亭——「竹蓮寺」。 透過這樣跨越篇章的串聯,王世傑的形象立體化了。他不是一個帶著鋤頭亂挖的農夫,他是用**「水利工程(養活肉體)」與「信仰中心(凝聚精神)」,聯手畫下了大新竹百年格局的城鎮綜合規劃師**。 下一步:會說古書的語音助理 現在,這些關聯的經緯度與史料脈絡,都已經封裝成 KML 與 JSON 格式。 未來,當我們開車經過新竹市區的「竹蓮寺」,或是馳騁在「隆恩圳」遺址旁時。我的 Smart Traveling Assistant (智慧行車助理) 的雷達一旦感測到這些 WGS84 座標,就會瞬間在背景調用這套 HGIS 引擎。 它會用語音告訴我: 「哈爸,你現在位在竹蓮寺。這不只是一間大廟,它跟我們剛剛經過的那條隆恩圳,都是三百年前那個為了軍隊運糧的男人——王世傑,一手擘劃百年帝國的拼圖…」 從地圖上的一個疑惑,到實體化一整套能運作的歷史感知大腦。這就是我們這場數位鏈金術的最終意義:讓歷史不再只存在紙上,而是真正走進了我們每一次漫遊的風景裡。 (全系列完) 本文為哈爸與 AI 助理協作產出,紀錄實體探勘與數位工程之歷程。

2026-02-22 · 1 min · 56 words · Wuulong

從地名到建構 HGIS 的數位鏈金術 (4):【交織】時空縫合術——讓古地名跨越百年,精準降落在 WGS84 座標上

經過前三篇的努力,我們左手握有中研院的「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 的紅色圖釘上。 ...

2026-02-22 · 1 min · 78 words · Wuulong