项目中的源代码在我的GitHub:https://github.com/weitw/address-analyzer
先看效果:

如上图,address数输入的地址,Address对象是解析后的地址。可以支持逆推上一级,且支持地址白话解析。

一、项目介绍

1、解析规则

  • 将一个用户输入的地址,解析成省、市、区、详细地址的形式。

  • 如果用户输入的不是标准的地址,则需要推测标准地址。例如用户输入:镇江市句容市崇明西路与玉清路交叉路口西侧(玉清小区),没有输入省,但是需要根据镇江市推测出是江苏省的。

  • 由于直辖市比较特殊,所以代码中默认给直辖市增加一个“xx城区”,作为市。例如北京市朝阳区,可以变成北京市北京城区朝阳区。这个可以配置。

    这里面的110000就是北京市的代码,给其增加一个子级即可。这里也可以根据自己项目的要求去修改,比如改成北京辖区等。

  • 用户输入的非完整的省市区,需要解析成完整的。例如内蒙古自治区,大家的习惯可能是直接说内蒙古或者内蒙,所以需要有一个模糊匹配的规则。再比如江苏省南京市雨花台区,用户可能输入的是南京雨花台,此时就需要将南京解析成南京市,雨花台解析成雨花台区,并推算出是江苏省。

    所以大致的一个规则就是,对于常规的xx省,xxx市的,会生成对应的白话集合。例如江苏省,常用的白话集合就是:江苏省或者江苏。南京市常用的白话就是:南京市、南京。这种规则能处理大部分的地址。但是对于特殊的地址还是需要特殊处理的。

    例如:内蒙古自治区,常用的白话集合是:内蒙古自治区、内蒙古、内蒙。所以还增加了一个特殊地址白话JSON文件:vernacularProvinceCityCounty.json


    。这里只列举了一部分,如果遇到其他特殊的地址,在这个地方加上即可。

2、关于性能

解析时,会读取address.json文件,并根据省市区的关系构建相应的map集合。如果频繁的去读取address.json文件,肯定会消耗不小的资源的,所以可以一次读取,放到缓存中,下次要解析时直接从内存中拿出需要的数据即可。代码中只是使用类的静态属性,并采用单例的方式,确保类只会加载一次,保证address.json文件只会读取一次。

实际应用时,可以将数据放到Redis中。

二、测试案例

如下是测试案例:

测试地址(以下地址都从地图上随机挑选的,如果地址有涉及到个人隐私,请联系我删除):

  • 贵州省七星关区何官屯镇刘家村2312号

  • 七星关区何官屯镇刘家村2312号

  • 福建省长汀县汀洲镇中心坝竹区8号

  • 福建长汀汀洲镇中心坝竹区8号

  • 毕节市何官屯镇刘家村11号

  • 内蒙古自治区锡林郭勒盟二连浩特市肯特街南、建设路东

  • 锡林郭勒盟二连浩特市肯特街南、建设路东

  • 内蒙锡林郭勒盟二连浩特市肯特街南、建设路东

  • 河北省廊坊市大城县xxxxxxxxxx

  • 镇江市句容市崇明西路与玉清路交叉路口西侧(玉清小区)

  • 北京朝阳方恒国际中心A座2601号

三、使用方法及注意事项

1、使用方法

  • clone项目到你的环境

  • 使用AddressAnalyzer.analyzer.addressResolution(address),address就是需要解析的源地址。得到的是一个包含省市区的对象。

收件地址解析成 省+市+区+详细地址的形式相关推荐

  1. 根据Outlook收件箱的邮件提取发件人邮箱地址到excel后再导入到Outlook联系人

    根据Outlook收件箱的邮件提取发件人邮箱地址到excel后再导入到Outlook联系人步骤如下: 1,新建工作簿book1,第一张表取名"邮件地址提取",并保存 2,ALT+f ...

  2. python 获取收件箱的具体信息

    转自(https://stackoverflow.com/questions/2230037/how-to-fetch-an-email-body-using-imaplib-in-python) 通 ...

  3. 如何将所有电子邮件地址合并到一个Outlook.com收件箱中

    Microsoft's new Outlook.com allows you to see email from all your email accounts in one inbox and se ...

  4. 收件服务器imap账户信息,imap账号收件服务器地址

    imap账号收件服务器地址 内容精选 换一换 Spring 邮件发送主要内容JavaMail 概述​ JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.JavaMail 是由 Sun ...

  5. imap收件服务器无响应,imap设置收件服务器

    imap设置收件服务器 内容精选 换一换 浏览器发送邮件:在使用浏览器登录邮箱时直接使用HTTP协议,其端口号默认为80,邮件服务器之间还是使用邮件发送协议:SMTP协议.通过浏览器发送邮件,则需要开 ...

  6. 正则表达式 划分省市区(直辖市和附详细地址包括市,区)

    目前有需求是将省市区从详细地址中提取出来.这里选择用正则表达式,语言使用C#. 查阅一般用于区分省市区的正则表达式,编写如下代码: using System; using System.Text.Re ...

  7. 收货地址,模糊详细地址,自动转换成省市区街道,并保存到Excel工具

    收货地址,模糊详细地址,自动转换成省市区街道,并保存到Excel工具. 文件模板为: 地址自动转换成省市区街道并保存到Excel文件: 使用说明: 1.双击start.bat,打开工具,选择类似于&l ...

  8. (详细总结)python爬取 163收件箱邮件内容,收件箱列表的几种方法(urllib, requests, selenium)

    需求:最近有一个需求,需要将163邮箱收件箱里面的所有邮件的内容全部copy下来,整理到一个word里面,不多也就28页的邮件(不要问我为什么有这需求,不告诉你),自己手动去ctrl+ cv 的话,估 ...

  9. 收件服务器信息,收件服务器配置信息

    收件服务器配置信息 内容精选 换一换 SAP HANA运行在SAP HANA云服务器上.需要根据部署场景,创建一台或多台HANA云服务器,用于部署SAP HANA软件.请参见方案和数据规划相关章节,确 ...

最新文章

  1. Android应用中通过AIDL机制实现进程间的通讯实例
  2. C#对象数组排序方法
  3. 16、HTML密码框
  4. SparkSql官方文档中文翻译(java版本)
  5. [leetcode] 141.环形链表
  6. Android 服务(Service)
  7. matlab如何绘制传递函数对数幅频特性_开环传递函数是怎样影响系统的?重要参量1/(1+T)与T/(1+T)的释义...
  8. 详解收发不畅原因及U-Mail邮件中继解决之道
  9. bzoj 4631: 踩气球(线段树)
  10. button按钮提交form表单的js方法不要使用关键字login
  11. Windows 2003企业版安装篇
  12. 研报解读 | 中国云计算:从数据看未来
  13. android端播放器框架,Android通用播放器解码框架Vitamio的介绍和使用
  14. 集成框架 -- 快手接入
  15. MyBatis12 结果集映射
  16. 利用nsca监控oracle的session数
  17. 大数据采集(hdu)第二章笔记
  18. 汇编语言王爽 实验第四章
  19. linux环境下车牌识别验证
  20. 电脑使用技巧(持续更新)

热门文章

  1. 她姓敖 是计算机系的,有朋友姓敖,单名武,每次我叫他,都感觉自己好奇怪,像只什么发情的动物。...
  2. node+ejs实现服务端渲染SSR
  3. 有趣的python项目_Python几个有趣和特别的小故事
  4. 现阶段实践“拿着锤子找钉子”的六个步骤
  5. Django-urls
  6. Dice coefficient 和 Dice loss
  7. 输入汉字,将汉字转换为拼音
  8. 教你制作自己喜欢的Win7主题
  9. 马来西亚央行针对加密货币交易颁布法律草案
  10. 创建SQLserver数据库