1. 程式人生 > >自動識別地址省市區、手機號、姓名,淘寶的地址自動識別

自動識別地址省市區、手機號、姓名,淘寶的地址自動識別

模糊 軟件 class 詳細 是不是 下午 true 統計 pan

  由於公司軟件需求,需要將一段字符串進行解析出省、市、區、街道、詳細地址、手機、姓名。類似淘寶的地址自動識別,研究了一個下午加一個上午,換了好多種算法。

  • 手機號
    這個不難,將字符串用特定的符號分割,如:英文逗號、中文逗號、空格
    分割出來的數組進行字數統計,找到11位字符且可以轉換為數字的就是手機號,當然不嫌麻煩也可以用正則
  • 姓名
    這個不簡單,如果輸入的都是正常的姓名那也簡單,做一個百家姓的數據表。匹配第一個字,且字數不要超過4個。中國4個字的姓名真的不多。
    但現在地址裏寫的可能都不會是真實姓名,且超過5個字的昵稱,那就麻煩了。
    所以現在用的就是長度對比,數組裏長度最長的當作地址來解析,排去手機號,剩下的當作姓名。(暫時沒有想到更好的方法)
  • 地址
    真的走了好多彎路
  1. 省市區分割
    這個思路是最早的思路一串字符串用省市區去分割,顯然對正規的地址是有效的。但我如果"浙江寧波海曙",這樣就找不到了。
    失敗!
  2. 模糊查詢(統計法)
    既然地址裏的省市區都可能不全,那我就用模糊查詢,然後查詢到的數據存入數組,且做次數統計。
    如地址是:河南鄭州100號100幢
    先搜索“河”,如圖
    技術分享圖片

    總計1600多條匹配信息,OK!加入數組下一步
    搜索“河南”,如圖:技術分享圖片
    總計32條信息,數組裏都存在,那次數+1
    接著搜“河南鄭”,結果0條數據。
    如果數據是0,那就從前面刪除一位接著搜
    搜索“南鄭”,如圖:技術分享圖片

    1條數據,好加入數組。
    然後查看數組發現統計出來次數是2的有32條,還是確定不了。
    失敗!

  3. 模糊查詢(概率法)
    再加改造,上面的思路是沒有錯的,就是要去查詢數據匹配出最優的選擇,那該怎麽辦呢
    如 “河南”,數據庫存儲的“河南省”,3個字對了2個,那就是66%的正確率
    如 “河南”,數據庫存儲的“河南岸街道”(一個廣東惠州的街道),5個字對了2個,那就是66%的正確率40%
    ok,這樣就區分開來了,按照每個詞語的正確率去排序
    但是!字數一樣的呢?“河南鄉“(中國,四川省,雅安市,漢源縣,河南鄉),正確率也是一樣的66%
    這就真的區分不開了,誰都不知道用戶指的河南是哪一個

  4. 模糊查詢(概率最終版)
    “北京” 對應數據庫的 “北京” 正確率是100%
    “北京” 對應數據庫的 “北京市” 正確率是66%
    是不是區分不開客戶到底是要哪一個地址呢?
    這還是和字數有關系,所以還要升級
    “呼和浩特市”對應數據庫“呼和浩特市”正確率是100%
    這個正確率和北京的100%正確率一樣,這就不對了,比較呼和浩特市這個已經是100%確定了,北京還是沒有100%確定到底是 省 還是 市(代碼中需要區分)
    升級版出來了就是概率之後再加上一個正確的字數
    “呼和浩特市”對應數據庫“呼和浩特市”正確率是100%+正確字數5=105%正確率
    “北京” 對應數據庫的 “北京” 正確率是100%+正確字數2=102%正確率
 int GetProbability(string str1, string str2)
{
            decimal fm = str1.Length;
            str1 = str1.Replace(str2, "");
            decimal fz = fm - str1.Length;
            return (int)Math.Floor(fz / fm * 100) + (int)fz;
}

這樣的正確率計算就沒什麽大問題了,接下來就是處理。篩選出來的 省市區街道,進行篩選,確定最終結果了,下面都是 if else 的判斷。
總計代碼量寫了300多行沒有優化,因為全是if else,可以寫遞歸或者循環省代碼的,但是頭太疼了就不寫了。

下面放一下效果圖

  1. 正常地址 技術分享圖片
  2. 順序隨便換 技術分享圖片
  3. 空格分割 技術分享圖片
  4. 中文逗號分割 技術分享圖片
  5. 不寫省市只寫區 技術分享圖片

    技術分享圖片

  6. 只寫街道 技術分享圖片

  7. 簡短的地址測試 技術分享圖片

    技術分享圖片

    技術分享圖片

    技術分享圖片

有不懂的可以加我  QQ1124391467

自動識別地址省市區、手機號、姓名,淘寶的地址自動識別