---
# System prepended metadata

title: 地址辨識
tags: [singularity]

---

地址辨識
===
###### 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