一筆地址前面含郵遞區號、一筆分欄保存,怎麼比較才不會多算差異?

先對齊結構再比較。A 筆可能是「100範例市示範區學習路8號」,B 筆則把 100 放在 postal_code 欄、地址欄只存「範例市示範區學習路8號」。不能直接比整串字,也不能看到前三個數字就一律刪除;門牌本身也可能在字首,郵遞區號必須連同行政區資料判讀。
| 檢查層次 | A 筆 | B 筆 | 結論 |
|---|---|---|---|
| 郵遞區號候選 | 100 | 100 | 文字相同,仍須核對適用範圍 |
| 縣市區 | 範例市示範區 | 範例市示範區 | 可比較 |
| 道路門牌 | 學習路8號 | 學習路8號 | 可比較 |
| 原始結構 | 同欄 | 分欄 | 保留差異,不視為地址衝突 |
對齊方式
- 保存兩筆 raw_address 與獨立 postal_code 原值。
- 只有當開頭數字符合預期長度,後面又能辨識行政區時,才建立 postal_code_candidate。
- 用中華郵政資料或查詢確認號碼與行政區是否相容;本站資料精度不足時保持可能。
- 建立 address_without_postal_candidate,不覆寫原始地址。
- 用地址比較工具比較去除候選後的地址元件。
- 分開記錄「地址元件結果」與「郵遞區號結果」,不要揉成單一相似度。
- 任一欄衝突或缺漏都交人工,不自動選擇看起來完整的一筆。
若 A 開頭是「100號」而非郵遞區號,誤拆會把門牌刪掉。若郵遞區號不同,也不能只因剩下的地址文字相同就忽略;應查資料版本、投遞區段與輸入來源。
可用地址名單去重工具找大量候選,再按上述欄位覆核;一般格式差異的判斷見不同格式地址比對指南。欄位對齊只是讓比較公平,不表示郵遞區號或門牌已由官方證明存在。
三種常見衝突不能混在一起
第一種是同一筆地址中,字首郵遞區號和獨立欄不同;第二種是兩筆地址行政區相同但保存的碼不同;第三種是只有前三碼和完整碼位數不同。三者處理不同。字首與分欄衝突時先保留兩值,依官方查詢和來源日期核對;位數不同時不能把前三碼補零或重複當完整碼;行政區相同也可能有投遞段特例,不能只用區名決定。
例如 raw_address 寫 242 新北市新莊區五工路10號,postal_code 欄也是 242,但工具依特例資料給出 248。這時兩個輸入互相一致仍不代表正確,應保留 input_zip、stored_zip、tool_zip 與原因,再查官方資料。反過來,工具只有前三碼而來源有六碼,也不能把後三碼丟掉後宣稱完全相同。
寫回資料表的方式
將 address_without_postal_code、postal_code_original、postal_code_level、postal_code_candidate、verification_source 分欄。移除字首碼時只改比較候選,raw_address 不動;若前三個數字可能其實是門牌或訂單代碼,就維持無法確認,不用正規表示式直接刪除。
驗收時抽查括號碼、六碼、前後有空白、行政區特例及門牌以數字開頭的案例。兩筆比對結論應分成「地址元件是否一致」與「郵遞區號是否一致」,不要壓成單一相同/不同。即使兩者都對上,也只能支持這次資料比對,不能證明門牌實際存在。
前導碼移除後要能重組
建立 comparison_address 時,可以把已確認的郵遞區號從字首拆出,但要測試能否用 postal_code_original 加 address_without_postal_code 重建原顯示。若重組後空白、括號或六碼位數改變,表示拆解規則有資料損失。原始字串永遠保留,重組只用於驗證轉換是否可逆。
同一地址的碼也可能隨用途不同
資料來源可能保存舊制碼、前三碼或本次承運商要求的完整碼。比較前記錄 code_scheme、source_date 與用途,不把所有數字當成同一層級。若來源年代不同,結論應寫「地址元件相同、郵遞區號版本待確認」,而不是直接覆蓋較舊值。