基于对象关系型数据库的多级地名地址服务研究
2017-10-16董洁钰马梦宇
董洁钰,马梦宇,陈 荦,景 宁
(国防科学技术大学 电子科学与工程学院,湖南 长沙 410073)
0 引 言
随着数字城市建设的不断推进,地名地址服务作为天地图的基础地理信息,对实现智慧城市和地理信息化具有重要的作用[1]。在地名地址服务体系中,地名地址的匹配是空间数据和非空间数据关联的重要途径[2],直接关系到地名地址服务平台的质量[3]。但是,目前现有的服务模式较为生硬,只是基于全文索引实现地名地址检索,用自然语言对地名地址进行搜索时准确性和效率都有待提高。本文基于postgreSQL数据库,立足如何利用好分词字典和信息分级提高地名地址服务的搜索效率和准确性,为城市市民带来更好的数字城市服务体验,进行研究总结。
1 关键技术
中文分词技术和地名地址匹配技术是地名地址检索服务中的两个关键技术[4]。利用SCWS对检索关键字和数据集进行分词,通过修改分词词典提高分词准确性。在postgreSQL中建立gin索引提高检索效率,并通过添加分级分类信息来缩小检索范围,提高检索精度。
1.1 通过词语切割进行地名地址服务检索
在地名搜索功能中,将地名地址短语进行分割,就能将地名数据的相关信息的文字描述以及用户输入的查询文本拆分成有意义的词供系统进行检索匹配[5],分词的准确性直接关系到检索服务是否能正确地识别用户的检索意图,进而影响用户的检索体验[6]。
相对于普通文本来说,地名地址具有以下几个特点[7]:①地名地址语句较为短小,上下文对词语的分割几乎没有影响。②地名地址中专有名词较多,具有独特性,对词语分割会造成困难。③地名地址中有具有明显分割标识的词语,如“路”“镇”“超市”等。④地名地址服务的词语中可能会有分割歧义,如“北马路”,可能会被错误地分割为“北”“马路”。因为地名地址短语的特殊性,对地名地址短语的分割技术有着特殊的要求。目前大多分词技术都是使用了混合算法,其中SCWS算法就是一种使用了词频词典的分词算法。
SCWS采用标准C代码开发,用在地名地址检索研究中有着以下优势:①SCWS没有任何第三方库函数依赖,提供了C的接口和PHP扩展,是目前使用最方便的开源免费中文分词软件之一,可以轻松植入任何现有的软件系统,适合做地名地址检索研究;②SCWS支持 GBK、UTF-8、BIG5 等汉字编码,切词效率高,可以提高地名地址检索的效率;③SCWS采用的是自行采集的词频词典,并辅以一定程度上的专有名词、人名、地名、数字年代等规则集,并且默认提供通用的互联网信息词库,提供 PHP编写的词典导入导出工具。用户可以自定义文本词典,可以定义基于词性的规则权重,从而人为地更新词典,提高检索的准确性;④SCWS 特别为全文索引考虑,提供了自创的复合分词,可以把长词再分成短词,把散字按二元切词法进行结合的功能,这适合地名地址检索名词的特殊性,适用于地名地址检索应用。
本文使用postgreSQL数据库进行地名地址数据存储,并采用基于SCWS的zhparser分词工具来进行分词检索。实验环境为Ubuntu系统,安装SCWS和zhparser之后,即可在postgreSQL数据库中确立要进行分级的检索对象。确定分词对象后,SCWS可以自动地根据对象的词频建立词频词典,其流程如图1所示。然后,就可以根据其词典进行分词,为地名地址全文检索奠定基础。
1.2 修正分词词典提高地名地址服务准确率
图1 词频词典的建立流程Fig.1 The establishment of a dictionary of word frequency
在地名地址服务中,SCWS建立的词频词典也是一个地名地址词典,其中的专有名词较多,可能会影响系统自动分辨的准确率。在地名地址检索服务中提供修正服务,发现检索分词错误的用户可以参与构建错误字典,提交开发者统一修正。
SCWS提供 PHP编写的词典导入导出工具,通过修改工具开发者可以将词典导入到txt文本中进行修改和编辑;同时也可以自定义文本词典和基于词性的规则权重,将之导入SCWS中,从而提高词典分词的准确性,进一步提高检索精度。修正词典服务的流程如图2所示。
图2 词频词典修正服务流程Fig.2 The service process for correcting the dictionary of word frequency
1.3 建立索引提高地名地址检索效率
地址匹配技术是指根据输入的包含地址信息的文字按照一定的地址匹配策略与地理编码库中的地址信息进行比对,服务按照特定的步骤为地址查找匹配对象,从而获得相应的空间位置[8]。为了能直接定位数据库中的记录,本文对搜索字段建立索引,大大提高了地名地址匹配的效率。
建立索引要考虑多种因素,如检索效率、时间空间开销等[9]。常用的B-tree索引是一种简单的树状索引,检索的综合效率较高,但在将检索字段分词后,B-tree索引检索的准确性和效率都有所下降,不适用于地名地址检索系统。百度、Google等检索使用了即时索引,检索的准确性和即时性高,可以最大程度地满足用户需求,但是较为复杂,开销较大,也不适用于本文的地名地址检索系统。
PostgreSQL中还有很多独特的索引,其中gin索引是一种将列(比如数组,全文检索类型)中的值拿出来,再存储到树形结构中的索引。它适合多字段和模糊检索,适用于地名地址检索服务。在本文的地名地址检索服务中,利用gin索引对关键词字段进行检索,可以优化检索效率。
服务中,首先要读出需要建立索引的关键字字段,对其进行分词,然后对分词后的字段建立索引,生成索引文件。用户输入检索关键字后,也是先经过同样的分词器进行分词,然后再设计检索器,对索引文件进行检索,生成检索结果返回。具体流程如图3所示。
图3 检索服务体系流程图Fig.3 The complete process of retrieve service system
1.4 分级分类检索提高地名地址服务多样性
在数据量大的情况下,同名数据很多,会很大程度上影响检索精度[10]。若用户想吃火锅,如果只是检索关键字“火锅”或者“火锅店”,那么卖火锅底料的店家也在检索结果之中,属于冗余信息;若用户想找“工商银行(公交站)”,则会检索出很多地区的公交站共31条,其中部分信息见表1,在用户期望地区之外的检索结果均为冗余信息。纷杂的信息会干扰用户的判断,影响用户的检索。因此,对地名地址数据进行级别和类型的划分,可以在检索时提高准确性,给用户带来更好的检索体验。
在级别的划分上,本文将兴趣点(Points of Interest,POI)的级别信息定为省市区三级。在检索服务中,可以选择级别信息,从而限制检索结果的区域范围,提高检索精度。
在类别的划分上,本文根据POI数据的特点,参考高德地图POI的分类标准,将POI数据进行三级分类。在检索服务中,可以选择分类信息,从而限制检索结果的类别,提高检索精度。其中部分分类标准如图4所示。
表1 “工商银行(公交站)”部分检索结果Tab.1 Partial search results of “ICBC(bus station)”
图4 部分分类准则Fig.4 Partial classification criteria
2 实验结果
为了确定服务的质量和效率,本文对研究的地名地址检索服务进行了测试实验。具体实验环境见表2。
表2 实验环境Tab.2 Experiment environment
在检索同一关键字时,使用分级分类信息和不使用分级分类信息所得到的结果是不同的。如若用户想在长沙市吃火锅,在不同检索条件下会返回不同结果,如图5所示。图5a中的柱状图表示检索“火锅店”时所有返回的所有结果,其中只有长沙市餐饮服务类型中的火锅店是用户实际需要的。图5b表示用户检索“长沙市”“火锅店”时的返回结果,其中蓝色部分是用户需要的结果,红色部分是冗余信息。图5c表示用户检索“餐饮服务”“火锅店”时的返回结果,其中蓝色部分是用户需要的结果,红色部分是冗余信息。从图中可以看出,如果分级分类信息不明确则会有很多冗余结果,对用户造成干扰。中,可以在输入时进行地理位置的联想,如图7所示。
图5 不同检索方式结果组成对比图Fig.5 Comparison results of diあerent search methods
图6 检索“广场”的结果展示Fig.6 The retrieval results of "square"
图7 路径规划模块中的联想功能Fig.7 Association function in path planning module
根据对地名地址检索方法的研究和优化,本文设计并实现了地名地址检索服务,并集成到本实验室higis系统中,为路径规划功能的实现奠定了基础。服务可以实现地理位置的检索,并在地图相应地点进行显示,如图6所示。地名地址服务集成到路径规划功能
在大数据的环境下,随着数据量的增加,检索时间的变化尤为重要。本文对地名地址服务进行性能测试,不同情况下检索时间的测试结果如图8所示,图中曲线分别是仅检索关键字加上分级分类信息时的检索时间随数据量的增长而变化的曲线。从图中可以看出,检索时间随数据量的增长变化不大,这说明本文的地名地址检索服务在数据量较大的情况下,也会有很高的运行效率,适用于大数据的地理信息系统。
图8 检索时间随数据量变化曲线Fig.8 The curves of the retrieval time with the diあerent amount of data
3 结束语
本文针对基于全文索引实现的传统地名地址服务在实际应用中的不足,基于PostgreSQL建立索引实现地名地址快速检索,探讨了地名地址全文检索技术与优化方案,通过修改分词字典和使用分级分类信息来优化检索结果。同时设计并实现了地名地址检索服务架构,进行了性能测试,证明其适用于大数据环境,并可以提供给用户更好的检索体验。