Java 快递地址 自动识别地址省市区、手机号、姓名,地址自动补全省市区 速度高达1万/秒

公司每天需处理大量快递地址,需要将一段字符串进行解析出省、市、区、街道、详细地址、手机、姓名。类似淘宝的地址自动识别,并且需要解析到具体的楼栋单元户室。
研究了好久,终于写出了一个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用法,欢迎关注我的博客
java资源下载

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

源码学习
https://gitee.com/addresstool/address

使用中有问题或者建议,欢迎联系邮箱addresstool@163.com

posted @ 2024-03-28 21:12  addresstool  阅读(72)  评论(0编辑  收藏  举报