通讯地址查询邮政编码系统设计论文
随着电子商务的突飞猛进和物流行业的信息化,使得人们在足不出户的情况下完成购物和邮寄物品,大大节约了时间和金钱成本。
1 现状分析
随着电子商务的突飞猛进和物流行业的信息化,使得人们在足不出户的情况下完成购物和邮寄物品,大大节约了时间和金钱成本。电子商务和物流行业都离不开通信地址(又称为通讯地址,简称为地址)和邮编,这些数据都需要用户提供,当前一些电子商务网站和物流行业的主要的做法如下:
(1)让用户手工输入完整的地址和地址对应的邮编。
(2)通过下拉列表提供省,省下面地级市和地级市下面的区县,这些比较固定的地址让用户选择,余下的地址和邮编由用户手工输入。
(3)保留用户输入的地址和邮编,方便下次再次使用,即如果本次输入的地址和邮编之前已经有了一份,直接选中,就避免了让用户重复输入。
这些做法主要存在的问题如下:
(1)很多情况下用户未必知道自己输入的地址对应的邮编。
(2)由于基于拼音的输入法和汉语本身存在的缺陷(汉字存在多音字,多个汉字拥有相同的读音,多数基于拼音的输入法都是基于统计的语言模型),再加上地址中存在的一些生僻字的原因会导致输入的地址存在错别字。
(3)由于地名存在别名现象,即同一个地名有多种叫法,例如“广东省”的别名有“广东”和“粤”,因此他们识别不了对同一个地名的不同描述。
(4)有些情况下用户无法输入完整的地址,当输入的时候一脸茫然和无助。
(5)由于地址存在变更和搜集不完全的问题,这些网站的数据往往得不到更新。
当前一些其他的网站能够解决第一个问题,即帮助用户得到地址对应的邮编。但是他们往往采用数据库技术来实现的系统,对于低于区县级别的地址,往往采用字串模糊查询(like %XXX%)的方式参与检索,由于性能的原因此种方式对于大数据量的查询效率很差。另外基于数据库实现的查询使得用户的输入格式和内容受到了很大的限制,比如:
用户首先选择省级行政区(包括省、特别行政区、自治区和直辖市)的名字,其次是选择地级行政区(包括地级市、自治州、地区和盟)级别的名字,然后再县级行政区(包括市辖区、县、旗、特区、林区、自治县和自治旗等)级别的名字,最后用户输入乡镇级别及村庄道路等。查询的输入过程非常机械。
另外基于数据库的查询模式,要求地址格式全部满足四级,即省级,地级市级,区县级,然后是其他具体地址。但是并不是所有的地址都满足此种情况,例如直辖市下和省与直辖县或省直辖县级市之间就没有地级市级,一些特殊的地级市没有区县级,如广东省中山市、广东省东莞市、海南省三亚市、海南省三沙市、甘肃省嘉峪关市;他们的解决办法,起个其他的名字代替,例如“直辖区县”,“市辖区”,“省直辖县”等,但是查询的结果中一般也包含这些非真正地址的数据。
本方法尝试解决如下问题:
(1)帮助用户输入,即提供输入提示功能(类似Google Suggestion)。
(2)采用基于搜索引擎技术使得用户输入的查询格式更加自由,并且通过一个比较短的地址片段就可以找到完整的地址。
(3)基于命名实体识别技术能够识别出用户输入地址元数据的级别,从而实现地址的逐级查询(例如已知一个地级市,给出该地级市下所有县级行政区的名字和对应的邮编;已知一个省的名字,给出该省下所有地级行政区的名字和对应的邮编等)。
(4)自动从互联网上抓取地址数据,完成参考数据的更新。
(5)对不用来源的参考数据进行校验,识别出有问题的参考数据,使得参考数据更加准确。
(6)有时候由于参考数据在乡镇级行政区级别及以下级别上收录得不是很全,本方法可以通过地址补全方式完善查询结果。
(7)实现查询结果地址的切分和级别标注,方便用户灵活使用结果。
(8)将地址和对应的邮编加密到二维码中,方便用户通过二维码扫描软件直接获取完整的地址和邮编。
(9)将用户的检索结果链接到知名的地图厂商(百度,谷歌,搜狗地图等)获取相关地址的经纬度数据。
2 系统设计
2.1 总体架构设计
本系统的总体架构如图1所示。
从图1邮编查询系统的总体架构图可以看出,该系统需要三种数据:
(1)用于通过通信地址查询邮政编码的通信地址和邮政编码对应关系的数据。
(2)用于输入地址提示的标准化的通信地址数据。
(3)用于地址切分,地址标注,命名实体识别和Query语句生成的地址元数据字典数据。
第一种数据:通信地址和邮政编码的对应关系,可以从一些数据比较新而且数据比较标准和完整的邮编查询网站上,利用基于种子的网络爬虫和信息抽取技术抓取相关数据。
第二种数据:标准化的通信地址数据,一种来源是第一种数据去掉邮政编码后的通信地址数据,第二种来源,从维基百科和国家统计局网站上,最新的有关中国行政区划上的网页上利用爬虫技术和信息抽取技术抽取得来。
第三种数据:地址元数据字典数据,源自维基百科和国家统计局有关中国行政区划的地址元数据,以及通过地址切分和识别技术从完整的通信地址中获得。
地址元数据包含的数据主要有:省级行政区名(包括省、自治区、直辖市和特别行政区)、地级行政区名(地级市、自治州、地区、盟)、县级行政区名(包含市辖区、县级市、县、自治县、旗、自治旗、特区和林区)、乡级行政区名(包括乡、镇、街道、苏木、区公所),其他地址数据(包括道路名、村庄名、小区名、建筑物名和广场名)等。
2.2 地址查询编码过程设计
地址查询邮编索引结构如图2所示。
其中地址的最低等级域(Level Field)包含的数据值如下:
(1)省级行政区级(包括省、自治区、直辖市和特别行政区),用province表示。
(2)地级行政区级(包括地级市、自治州、地区、盟、直辖市辖区),用city表示。
(3)县级行政区级(包括市辖区、县、旗、特区、林区、自治县和自治旗等),用district表示。
(4)乡级行政区级(包括乡、镇、街道、苏木、区公所),用town表示。
(5)低于乡级行政区级,用all表示。
一个地址文本,其对应的最低地址等级域的值计算如下:
(1)首先对地址文本做预处理,预处理包括删除多余的空格,全角字符转换成半角字符。
(2)其次是地址切分和地址标注。
(3)接着是地址命名实体识别,获取最终的地名实体标注序列。
(4)然后根据规则计算出此地址文本的最低地址等级的值。
(5)将最低地址等级映射到最低地址等级域的值:1→province;2→city;3→district;4→town;0→all。
2.3 地址解析过程
本系统是基于开源的全文搜索引擎工具包Lucene实现的系统,中文分词模型采用的是二元模型(bigram)。为了提高搜索的精度和排序的质量,需要对输入的文本进行解析,解析的结果是生成相关的Query语句。因此整个流程为首先对用户输入的文本进行预处理,切分,标注和地名实体识别,识别出不同级别的地名,然后对不同级别的地名分别用半角的`双引号“””括起来生成PhraseQuery查询语句,并赋以不同的权值,权值的设定应遵循如下原则,已被收录到字典里的地名(即确定被识别的地名)其对应的权值要大于未知的地名。举例如图3所示。
图3中“29号”是不能识别的地址,因此其对应的权值W5设置的值要比其他的权值小。通常情况下W5的值一般设置成1.0,其他确定已被识别的地址对应的权值的值一般大于1.0。
接着用地址的标注等级序列获得地址的最低标注等级,为了能够支持地址的分级查询(仅限四级以上的地址),即:搜索的结果首先是当前地址的标准形式,其次是当前地址等级下的直属行政等级(即子等级)的所有地址,然后才是更下一级的地址。例如:当输入“深圳市”时,排在第一个的应该是“广东省深圳市”,其次是“深圳市”下的直辖区县,然后是区县下的乡镇街道,最后是道路,小区,村庄等。系统在最低标注等级映射到最低等级域上要做分级查询处理,具体做法是:获得当前最低等级及下属的等级域的值,然后按照逐级递减的方向赋上递减的加权值。规则如下:
(1)1→province city;
(2)2→city district town;
(3)3→district town。
当用户提交查询请求后,系统会返回查询的结果,并把与用户输入的地址文本最相似的地址排在第一位。由于参考数据搜集的不是太全,加上每年都有新增的建筑,道路,小区等,还有一些行政区划的变更等等,使得排在第一位置上的地址中区县位置之后的地址和用户输入的地址有出入,本系统采用地址补全技术,对最相似的返回结果进行改造,使得更接近用户的要求。
2.4 地址补全
地址补全是根据用户的输入来完善查询结果的技术,使得结果更贴近用户的需求。地址补全主要用在某一级别的地址很难搜集全,而且新增量比较大,主要集中在四级和五级地址上。地址补全的条件时用户输入的地址文本其地址级别的顺序是正常的,即不存在一二三级地址出现在四级或者五级地址之后。识别出用户输入的地址级别中四级地址及以后的部分,拼接到搜索结果最相似的那条地址中三级地址之后。
3 总结
本文设计的系统是用来实现地址查询编码这一功能的。在分析了现有系统情况之后,使用了地址解析、补全、查询等技术,来满足实际生产的需要。实际使用情况显示本文提出的诸多解决方案能够很好地满足需求。
【通讯地址查询邮政编码系统设计论文】相关文章:
本文来源:https://www.010zaixian.com/shiyongwen/2474925.htm