Java 快遞地址 自動識別地址省市區、手機號、姓名,地址自動補全省市區 速度高達1萬/秒

addresstool發表於2024-03-28

公司每天需處理大量快遞地址,需要將一段字串進行解析出省、市、區、街道、詳細地址、手機、姓名。類似淘寶的地址自動識別,並且需要解析到具體的樓棟單元戶室。
研究了好久,終於寫出了一個Java版的解析演算法。
下載地址:

https://download.csdn.net/download/u011024436/89035851

演算法非常簡單,直接呼叫recognition函式就完成了地址解析,以下時程式碼示例

import org.address.AddressTool;
import org.address.tool.AddressRecognition;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class RecognitionTest {
    public static void main(String[] args) {
        AddressRecognition recog = new AddressRecognition();
        ArrayList<String> address = new ArrayList<>();
        address.add("太陽鮮鮮 鹽田區山海四季城F棟17A,13111111111");
        address.add("鹽田區山海四季城F棟2f,13111111111 太陽鮮鮮");
        address.add("謝先生,深圳市龍崗區南灣街道尚峰花園4C2231 13111111111");
        address.add("測試 江西九江市湖口縣武山鎮 15912344321");
        address.add("鹽田區山海四季城D棟17A\n周敏 13111111111");
        address.add("廣東省深圳市鹽田區東海三街山海四季城F4E,李侯明,13111111111");
        address.add("深圳市鹽田區,大梅沙萬科東海岸221棟,周女士13111111111");
        address.add("收貨人: 楊燕豔\n手機號碼: 13111111111\n所在地區: 廣東省深圳市龍崗區龍崗街道\n詳細地址: 格水村三巷十號三樓");
        address.add("地址:深圳市鹽田區山海四季城A棟32D\n張歡 13111111111");
        address.add("地址:深圳市龍華新區樟坑一區通博花園181棟\n收件人:於生生\n電話:13111111111");
        address.add("所在地區: 湖南省株洲市醴陵市白兔潭鎮\n詳細地址: 金牛居委會金牛路5號國超\n劉嬌 131 1111 1111");
        address.add("江西南昌市青山湖區廣蘭大道418號東華理工大學核工系南區9棟1112室 131 1111 1111 孫軼念");
        address.add("湖北黃石市牧羊湖水機路華瑞南岸星城一棟一單元2202。\n\n劉月紅13111111111");
        address.add("鹽田區北山道山海四季城F20D 韓先生 13111111111");
//        address.add("深圳市鹽田區鹽田街道東海三街8號山海四季花園  曾候麗  13111111111");
//        address.add("深圳市羅湖區鳳凰路中山花園1棟582室,劉藍琴,電話13111111111");
//        address.add("袁月青13111111111四川省成都市高新西區百葉路1號電子科技大學成都學院計算機(分院)");
//        address.add("鹽田區山海四季城F棟1B,盧燕13111111111");
//        address.add("地址:廣東省佛山市順德區樂從天佑城E座2005室;\n聯絡人:熊翠花\n聯絡電話:13111111111;");
//        address.add("深圳市南山區南光路龍坤居2棟D座714,收件人:張珍雲,電話:13111111111");
//        address.add("深圳市鹽田區萬科東海岸21-102,收件人:葉俠,電話:131 1111 1111");
//        address.add("地址:深圳市 南山區 南商路碧海天家園A89B 聯絡電話:13111111111 黃髮猜");
//        address.add("都勻市水岸綠洲小區2棟二單元2033  李玉 13111111111");
//        address.add("貴州省都勻市。甘塘鎮綠茵湖村一組2號  劉雪莉     13111111111");
//        address.add("湛江市廉江市車板鎮人才市場,0755-22107333.曹建林 郵編:713200");
//        address.add("廣東省清遠市 清城區洲心街道,金茂家園一棟一樓100號商鋪   13111111111 聶小姐");
//        address.add("江蘇省 蘇州市 吳江區 干將東路678號江蘇大廈11樓 215000 徐天宇 13911111111");
//        address.add("王小梅13911111111湖南省郴州市桂東縣桂東縣清泉鎮");
//        address.add("莫席輝13911111111廣西壯族自治區柳州市柳北區躍進路42號4棟20樓");
//        address.add("韓仁偉,13911111111,安徽省安慶市太湖縣新倉鎮,塔山村,前進組");
//        address.add("北京市北京市東城區建設路紫薇花園 13311111111 何曉旭");
//        address.add("13311111111 上海市黃浦區 建設路 紫薇花園  何曉旭");
//        address.add("王曉光 重慶市 墊江縣 太平鎮,13311111111");
//        address.add("瓦麗麗,13311111111,甘肅省 蘭州市 城關區 東崗街道向陽街道");
//        address.add("劉海江13311111111河南省省直轄縣級行政區劃濟源市沁園路丹尼斯");
//        address.add("13311111111 廣東省 東莞市 中堂鎮潢湧大坦村二街四巷1號");
//        address.add("韓麗麗 13311111111 廣東省 東莞市 望牛墩鎮赤滘村南昌南路53號");
//        address.add("蔡麗鳳,13311111111,江蘇省鹽城市其它區神州路御景灣7#1104");
//        address.add("張彤,13311111111,黑龍江省 大興安嶺地區 加格達奇區 鐵路南小區29號樓4單元5658sf");
//        address.add("黃梅, 13311111111, 江西省 撫州市 臨川區 上頓渡鎮江西省撫州市臨川區上頓渡鎮老公安局");
//        address.add("何花菊,86-13311111111,遼寧省 盤錦市 盤山縣 東郭鎮 遼寧省盤錦市盤山縣東郭鎮 ,000000");
//        address.add("雁平 86-13311111111 廣東省 江門市 恩平市 牛江鎮 嶺南娟姑水果店");
//        address.add("北京 北京市 順義區 勝利街道宜賓南區2-2-401  李俊南 18210997754");
//        address.add(" 順義區 勝利街道宜賓南區2-2-401  ");

        for (String s : address) {
            System.out.println(recog.recognition(s));
        }
        SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
        Date date = new Date(System.currentTimeMillis());
        System.out.println("開始時間 : " + formatter.format(date));
        int cnt=0;
        for(int i=0;i<20000;i++){
            for (String s : address) {
                recog.recognition(s);
                cnt = cnt + 1;
            }
        }
        System.out.println("解析地址條數 : " + cnt + "條");
        date = new Date(System.currentTimeMillis());
        System.out.println("結束時間 : " + formatter.format(date));
    }
}

速度超級快,地址處理速度達到8000條/秒
結果列印

{address=鹽田區山海四季城f棟17a, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城f棟17a, name=太陽鮮鮮, county=鹽田區}
{address=鹽田區山海四季城f棟2f, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城f棟2f, name=太陽鮮鮮, county=鹽田區}
{address=深圳市龍崗區南灣街道尚峰花園4c2231, town=南灣街道, province=廣東省, phone=13111111111, city=深圳市, detail_address=尚峰花園4c2231, name=謝先生, county=龍崗區}
{address=江西九江市湖口縣武山鎮, province=江西省, town=武山鎮, phone=15912344321, city=九江市, name=測試, county=湖口縣}
{address=鹽田區山海四季城d棟17a, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城d棟17a, name=周敏, county=鹽田區}
{address=廣東省深圳市鹽田區東海三街山海四季城f4e, province=廣東省, phone=13111111111, city=深圳市, detail_address=東海3街山海四季城f4e, name=李侯明, county=鹽田區}
{address=深圳市鹽田區,大梅沙萬科東海岸221棟, province=廣東省, phone=13111111111, city=深圳市, detail_address=,大梅沙萬科東海岸221棟, name=周女士, county=鹽田區}
{address=廣東省深圳市龍崗區龍崗街道  格水村三巷十號三樓, province=廣東省, town=龍崗街道, phone=13111111111, city=深圳市, detail_address=  格水村3巷10號, name=楊燕豔, county=龍崗區}
{address=深圳市鹽田區山海四季城a棟32d, province=廣東省, phone=13111111111, city=深圳市, detail_address=山海四季城a棟32d, name=張歡, county=鹽田區}
{address=深圳市龍華新區樟坑一區通博花園181棟, phone=13111111111, city=深圳市, detail_address=龍華新區樟坑通博花園181棟, name=於生生}
{address=湖南省株洲市醴陵市白兔潭鎮  金牛居委會金牛路5號國超, province=湖南省, town=白兔潭鎮, phone=13111111111, city=株洲市, detail_address=  金牛居委會金牛路5國超, name=劉嬌, county=醴陵市}
{address=江西南昌市青山湖區廣蘭大道418號東華理工大學核工系南區9棟1112室, province=江西省, phone=13111111111, city=南昌市, detail_address=廣蘭大道418東華理工大學核工系南區9棟1112室, name=孫軼念, county=青山湖區}
{address=湖北黃石市牧羊湖水機路華瑞南岸星城一棟一單元2202, province=湖北省, phone=13111111111, city=黃石市, detail_address=牧羊湖水機路華瑞南岸星城一棟一單元2202, name=劉月紅}
{address=鹽田區北山道山海四季城f20d, province=廣東省, phone=13111111111, city=深圳市, detail_address=北山道山海四季城f20d, name=韓先生, county=鹽田區}
開始時間 : 2024-03-28 at 17:09:24 CST
解析地址條數 : 280000條
結束時間 : 2024-03-28 at 17:09:56 CST

這麼簡單,就完成啦!
如果想進一步解析出地址中的道路、樓棟、單元、戶室等,可使用地址分詞功能

AddressTool ss = new AddressTool(); 
System.out.println(ss.getStdAddress("湖北武漢江夏區猴王街道中前社群宏運大道2299號秦淮綠洲北苑9棟1單元1001室"));

分詞結果列印

[city:武漢市, county:江夏區, town:猴王街道, community:中前社群, road:宏運大道, road_no:2299, aoi:秦淮綠洲, sub_aoi:北苑, building:9, unit:1, room:1001]

如果想了解更多addresstool用法,歡迎關注我的部落格
如有問題或者建議,歡迎聯絡郵箱addresstool@163.com

java下載地址 > https://download.csdn.net/download/u011024436/89035851

相關文章