地址辨識 === ###### tags: `singularity` 前言 --- 目前有兩大處理地址的分類 1. 正規化 + 搜尋(目前採用這個) 1. 無法完全透過純地址輸入的方式找到對應座標, 最好有其他參數/input做改善[1] 2. 正規化後的地址無法被訓練(之前的目標) * over-fitting * like if-else * 新地址處理困難 [1] 2. 純透過使用者輸入去切分區 + 機器學習 * 大部分的郵政系統為這個分支 1. 不使用正規化. 純粹利用使用者input資料去對應座標 2. 系統如何得到使用者反饋很困難 因此目前的系統為使用 1. 字典檔斷詞 2. 模糊搜尋(根據縣市) 3. 標示地理位置範圍 定義 --- 斷詞定義 縣市 | 不能有錯字 | 全中文 行政區 | 不能有錯字| 全中文 路名 | 可以有錯字| 全中文 段 | 不能有錯字| 全中文 巷弄 | 不能有錯字| 全數字 號 | 不能有錯字| 全數字 人為註解 | 不處理 錯字定義 * 多字 * 少字 ->準確率可能大幅下降 * 字元錯誤(非數字之間的轉換) * 字元錯誤(數字之間的轉換) 流程 --- 1. 資料預處理 1. ElasticSearch * S2座標轉換 * 根據區域將地址對應座標存入資料庫 2. python SymSpell dictionary * 去除重複資料 * 去除亂碼 * 去除根據斷詞錯誤的字元 * 傳輸給pyhton字典檔 2. 輸入處理 1. API-service * 流量導向 * 去除字元錯誤(數字之間的轉換) * 呼叫路名辨識 * 模糊查詢 * 返回座標(如果查不到, 返回可能的s2區域) 3. 資料更新 1. API-service * regex的設定版本號 2. python SymSpell dictionary * 行政區版本號 * 路名版本號 * 路名頻率表 3. ElasticSearch * 路名對應座標的change-set TODO --- 新舊地址對應? 對於其他種資料來源的更新方式? 面向的使用者對象?(純使用者, 商業使用) * 對於錯誤字元的處理? * 對於沒有斷詞標示符的輸入(POI, 相對位置) * 需要大量的使用者資料並使其與地址資料對應 * 需要更多的輔助資料去輔助判斷 巷弄可能可以加到python字典檔做測試 Reference --- [1] p.12 https://assets.amazon.science/69/8d/2249945a4e10ba8fc758f7523b0c/getting-your-package-to-the-right-place-supervised-machine-learning-for-geolocation.pdf