台灣地址正規化系統開發1150731

1. 地址結構化拆解與語意解析 (Parser & Segmenter)

  • 自動分詞與標籤化:利用語意解析與規則引擎,將輸入的無結構字串(如 臺北市中正區廣州街2號)自動拆解為 County(縣市)、District(鄉鎮市區)、Road(路名)、HouseNumber(門牌)、Floor(樓層)等標準欄位。
  • 格式標準化:自動統一阿拉伯數字與中文數字(例如:三樓 $\rightarrow$ 3F五段 $\rightarrow$ 5段)、補全簡寫(台北市 $\rightarrow$ 臺北市)。

2. 極速前綴匹配與快取 (Fast Prefix Lookup Engine)

  • $O(K)$ 最長前綴比對:採用 MARISA-Trie 記憶體壓縮結構,能在數微秒內秒級鎖定標準縣市與行政區。
  • 高併發快取:極大化過濾常見且格式正確的地址,減輕後續圖譜與模糊比對的運算負擔。

3. 空間約束與錯字修復 (Spatial-Aware RapidFuzz Engine)

  • 同音字與錯字修正:基於 C++ Levenshtein Distance 算法,自動修正打錯的路名(如 松篙路 $\rightarrow$ 松高路羅斯福路五段 的同音漏字)。
  • 空間剪枝(Spatial Pruning):限定比對範圍於已鎖定的「縣市/行政區」方圓內,避免「桃園中正路」錯補成「板橋中正路」的誤判。

4. 圖譜拓樸與跨區門牌斷言 (Kùzu Graph Topology Guard)

  • 長道路與跨區門牌精準判定:透過 RoadSegment 節點的門牌區間與單雙號屬性,自動判定橫跨多個行政區的道路歸屬(如:廣州街 2 號 $\rightarrow$ 中正區廣州街 200 號 $\rightarrow$ 萬華區)。
  • 圖譜拓樸約束:以 Cypher 查詢驗證 (Zipcode)-[:BELONGS_TO]->(County)-[:HAS_DISTRICT]->(District)-[:HAS_SEGMENT]->(RoadSegment) 階層關係,嚴格防止邏輯矛盾的地址存在。

5. 門牌與樓層邏輯驗證 (House Number & Floor Guard)

  • 門牌區間與單雙號檢驗:驗證該號碼是否落在該道路的合法號碼範圍內,以及單雙號(Parity)是否符合事實。
  • 附號與特殊樓層處理:支援「之幾號」(如 80之1號)、地下室(B1B2)、頂樓加蓋等台灣特有門牌邏輯校驗。

6. 自我學習與異步高效能服務 (Self-Improving & Serving Layer)

  • 未命中自動收集 (Unmatched Feedback Pool):自動將解析失敗或高疑義的地址寫入 SQLite 記錄池,便於定期人工覆核與增量補充圖資。
  • 異步高併發處理 (Async Batch Pipeline):基於 Python asyncioProcessPoolExecutor,支援每秒數千筆地址的批次正規化。
  • Standardized REST API:提供 FastAPI 介面,支援 OpenAPI (Swagger) 文件,方便微服務架構整合與 Docker 容器化部署。

建置這套台灣地址正規化與圖譜校驗系統,核心關鍵在於「權威圖資的取得與清洗」。為了支援從縣市、行政區、跨區長道路門牌分段、到郵遞區號的完整校驗,你需要蒐集以下 4 大類開放資料(Open Data):

1. 全國行政區劃與郵遞區號對照表(基礎層)

  • 用途:建立 CountyDistrictZipcode 節點及拓樸關係。
  • 資料來源
    • 中華郵政 3+3 碼郵遞區號文字檔(包含路街段與郵遞區號對照表)。
    • 內政部戶政司 全國行政區劃代碼表
  • 欄位需求:縣市名稱、鄉鎮市區名稱、郵遞區號 (3碼/3+2碼/3+3碼)。

2. 全國門牌公所與道路門牌號碼區間(核心圖譜層)

  • 用途:建立 RoadSegmentNumberRange,解決「廣州街 2 號(中正區)vs 廣州街 200 號(萬華區)」這類跨行政區道路門牌判定問題。
  • 資料來源
    • 內政部戶政司 全國門牌資料庫(TGOS / 門牌反查開放資料)
    • 政府資料開放平台 (data.gov.tw) – 各縣市門牌資料集
  • 欄位需求
    • 縣市名稱、鄉鎮市區名稱、路街名稱、段號(如:一段)。
    • 起始門牌號碼 (min_num)結束門牌號碼 (max_num)
    • 單雙號規則 (parity):單號 (ODD)、雙號 (EVEN) 或連續號 (ALL)。

3. 全國標準道路名稱與同義詞對照庫(錯字與修復層)

  • 用途:供 MARISA-Trie 與 RapidFuzz 模糊比對使用,做同義詞替換與錯字校正(如 台北市 $\rightarrow$ 臺北市松篙路 $\rightarrow$ 松高路)。
  • 資料來源
    • 交通部 GIS 道路網圖資(Road Network)NLSC 國土測繪圖資
    • 常見異體字與俗體字映射表(自行建立字典,例如: $\leftrightarrow$ 哨船頭 $\leftrightarrow$ 哨船街)。
  • 欄位需求:標準道路全名、道路別名/舊稱、拼音對照。

4. 特殊門牌與邏輯規則庫(規則 Guard 層)

  • 用途:提供 HouseNumberGuardFloorGuard 作邏輯檢驗。
  • 資料來源
    • 台灣門牌編釘規則文件(各縣市門牌編釘及道路命名自治條例)。
  • 邏輯規則集(語法/常數)
    • 附號識別:(如:80之1號)。
    • 樓層識別:FFLB(地下室,如 B1)。
    • 特殊地名/衖/弄/巷階層序列。

📥 資料蒐集清單總覽表

資料類別建議資料源主要檔案格式用途模組
行政區與郵遞區號中華郵政 Open DataCSV / JSONtrie_search.py, Zipcode 節點
道路門牌區間與跨區分段內政部 TGOS / 戶政司門牌庫CSV / SHPgraph_topology_guard.py (RoadSegment)
標準道路網與異體字字典交通部 TDX / 自建字典JSON / TXTspatial_guard.py (RapidFuzz 比對)
門牌樓層邏輯規則各縣市戶政門牌法規Regex 規則表house_number_guard.py

發佈留言

💬
💬 智慧客服在線中 ×
您好!我是您的智慧客服助理,請問今天有什麼我可以協助您的嗎?