OpenStreetMap 是一張由和你一樣的使用者共同協作編輯的地圖,這種協作既是它最大的優點,也是資料品質持續出現問題的原因之一。當成千上萬的貢獻者各自為商店、餐廳、診所和政府機關添加 phone 標籤時,每個人都會帶入自己的格式習慣。對臺灣而言,結果就是一個資料庫中同一個國家代碼可能出現 +886、+886+ 或 +886(2),而光是一個城市的電話號碼就可能跨越十幾種不同的慣例。
都亂成一鍋粥了,趁熱喝了吧。(悲
這篇文章記錄了我們在掃描六個直轄市及另外五個縣市的 OSM Elements 時所發現的情況,我們正在開發正規化工具(normalizer) 一勞永逸。
問題的規模
在十一個隨機取樣的區域中——包括所有六個直轄市(臺北市、新北市、桃園市、臺中市、臺南市、高雄市)加上苗栗縣、新竹市、臺東縣、連江縣、金門縣——我們在 49,229 個元素上發現了 49,260 個標籤(phone 或 contact:phone)。在將以分號分隔的多重值欄位拆分後,總共得到 50,643 個獨立的電話號碼字串進行分類。
| 格式類別 | 數量 | 佔比 |
|---|---|---|
E.123 空格 (+886 2 1234 5678) |
41,842 | 82.6% |
RFC 3966 連字號 (+886-2-1234-5678) |
6,655 | 13.1% |
無分隔符號 (+886212345678) |
1,158 | 2.3% |
本地格式,無國家代碼 (02-1234-5678) |
854 | 1.7% |
錯誤/誤打的國家代碼 (+866 …, +886(2)…) |
92 | 0.2% |
| 其他(錯誤國家、垃圾內容) | 42 | 0.1% |
大約 每 5 個獨立值中就有 1 個 偏離了最常見的貢獻者慣例,這種不一致性使得去重(deduplication)、顯示和機器解析變得複雜。
▲ Tasking Manager 的專案,本次要繪製的範圍台南學甲區