十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

手写正则解析地址连崩三天后,我把收货地址智能识别交给了这个 Java 开源库

手写正则解析地址连崩三天后,我把收货地址智能识别交给了这个 Java 开源库 手写正则解析地址连崩三天后我把收货地址智能识别交给了这个 Java 开源库【免费下载链接】address-parseJava 版智能解析收货地址项目地址: https://gitcode.com/gh_mirrors/addr/address-parse上个月我接了一个看起来很简单的需求把用户提交的一整段收货信息自动拆成姓名、手机号、省市区和详细地址。我本以为写几条正则半小时就能收工结果连续三天都在跟稀奇古怪的输入搏斗。最后让我脱身的是 GitCode 上一个叫address-parse的 Java 开源库——项目描述只有一句话Java 版智能解析收货地址却把我三天没写完的活缩成了十几行代码。正则方案为什么越写越失控一开始我只考虑了规整的输入比如张三 13800138000 北京市朝阳区建国门外大街1号一条正则就能拆干净。但真实数据很快教我做人有人把姓名写在最后上海市浦东新区碧波路690号 刘一诺 13900000000有人带前缀86-13311111111有人手机号中间加空格131 1111 1111有人用换行分隔字段收货人李四\n手机号码13900000000\n所在地区浙江省杭州市西湖区文三路100号更狠的是区名撞车——深圳市南山区里的南山区在黑龙江省鹤岗市也存在正则按字面匹配直接拆错省份。于是我的代码里出现了第 4 个、第 5 个Pattern每修一个用例就引入一个新 bug。到第三天我已经分不清是在写解析器还是在给全国 3000 多个区县做数据字典。换个思路解析这件事交给专门的库朋友提醒我先别自己造轮子去社区找找现成的地址解析方案。于是我在 GitCode 上搜到了 address-parse看它 README 里贴的测试输出——一长串真实脏数据都被拆得整整齐齐当场决定克隆下来试试git clone https://gitcode.com/gh_mirrors/addr/address-parse克隆完直接看它的核心调用入口就一个静态方法返回结果列表没有任何配置和初始化动作。一行调用字段全部归位把刚才那些折磨我的输入丢进去代码只有这么几行import com.neo.address.parse.AddressParse; import com.neo.address.parse.ParseResult; ListParseResult results AddressParse.parse( 谢先生深圳市龙岗区南湾街道尚峰花园4C2231 13111111111); for (ParseResult r : results) { System.out.println(r.format()); }ParseResult提供了format()方法一行打印出全部字段姓名谢先生电话手机13111111111省广东省市深圳市区龙岗区详细地址南湾街道尚峰花园4C2231类型CITY再看它到底能识别哪些信息对照项目自带的测试用例整理成一张表信息项识别能力示例手机号13x-19x 开头兼容 86 前缀、空格分隔86-13311111111、131 1111 1111座机支持区号加横线0755-22107333邮编六位数字713200姓名位置不限自动从剩余文本中识别前、中、后均可省市区基于内置全国区划数据支持简称北京、上海市、都匀市拆开看它内部是怎么干活的顺着源码读了一遍它的解析思路和手写正则完全不同值得借鉴先清洗再匹配cleanAddress()会把换行、制表符、多余空格全部归一同时剔除收货人、联系电话、详细地址这类冗余关键词它们通过一个可自行扩展的关键词列表维护三级匹配兜底先正向匹配省份再分别按城市→区县逆向匹配。即便地址里只写了盐田区这种不完整信息也能反推出广东省深圳市并给出对应的解析类型结果合并去重多级匹配可能产出多条候选结果最后统一补全手机、座机、邮编和姓名返回列表交给调用方自行挑选。有意思的是它连区县重名这种细节都做了处理比如广东省惠来县惠城镇不会因为惠城二字被误判成惠州市惠城区遇到同省同名地区会走专门的纠错分支。那些意外输入它都提前挡下了我最担心的是直辖市、无区县城市这些边界情况翻了翻测试数据发现项目早就覆盖了王晓光 重庆市 垫江县 太平镇——重庆的直辖县被识别为区级广东省 东莞市 中堂镇潢涌大坦村二街四巷1号——东莞不设区直接落到镇级并保留详情姓名前后夹着邮编、手机号、座机的混合串也能把号码先摘出去再识别姓名。性能上也够用地址解析器首次初始化约 400 毫秒一次性载入全国区划 JSON 数据之后解析 45 条真实脏地址总共耗时一百多毫秒。数据文件就放在src/main/resources/address-parse/china-area.json依赖是 Guava、Hutool、Apache Commons 这类常见组件接入普通 Maven 项目没有额外负担。写在最后什么时候值得用它如果你手头只是固定模板的表单正则完全够用但只要你的输入来自真实的用户提交——电商订单、物流运单、活动报名、历史数据清洗——你就需要这种自带全国区划数据、能处理脏格式的 Java 地址解析库。实测用例都在src/test/java/com/neo/address/parse/AddressParseTest.java里45 条五花八门的地址克隆下来跑一遍就能看到全部解析效果比自己写正则踏实多了。【免费下载链接】address-parseJava 版智能解析收货地址项目地址: https://gitcode.com/gh_mirrors/addr/address-parse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表