SuperMap地理编码服务特点


优化的中文分词与地址词典

英文是以词为单位,词与词之间用空格隔开,例如“Thank you.” 计算机很容易通过空格来识别 you 是一个单词。而中文是以字为单位,通过字组成的句子来表述意思。例如,“我爱北京天安门”,计算机很难知道“天安门”是一个不能拆分的词,这就需要我们进行分词。

把中文的汉字序列切分成有意义的词的过程,就是中文分词。中文分词的准确与否,直接影响到搜索结果正确性和相关度排序。中文分词是基于词典进行的。地址词典:就是有意义词的集合。 例如,“牡丹江海浪国际机场” ,分词的结果是:“牡丹江/海浪/国际/机场”,为什么不是“牡丹/江” 或 “牡/丹/江”?

SuperMap地址匹配服务采用了最大概率分词法,解决怎么分词的问题。

最大概率分词法的基本思想在于:

所有可能分词组合中各个字的概率之积越大,则更有可能是合理的词语,即A和B同时出现的概率(a*b)越大,越有可能是一个完整的词语。

例如,“应”和“该”两个字的频数分别是20和30,统计库词量为1000,则“应”和“该”的出现频率分别为0.02和0.03;二者一起出现的概率为:0.006,即“应该”这个词的频数不应该低于:“0.006乘以1000”,即6。这样,才能保证“应该”分词的结果是“应该/”,而不是“应/该/”。

五级地址库

SuperMap地址匹配服务后台有详实的地址库数据支撑,该数据采用了五级地址划分:

  1. 省/直辖市
  2. 地/市
  3. 区/县
  4. 街道/镇
  5. 小区/园区/村

通过五级地址库划分,可以更准确地匹配地名,为后续快速分组检索提供支撑。

地址库索引分组

按照地理编码的设计预期,如果每次搜索都对全国范围的全部地址库信息进行检索,效率会非常低。

因此,每次搜索只在固定的城市范围内搜索,搜索其他城市地址时,则切换城市。虽然地址库依然会为全国的地址数据创建索引,但是只在城市的范围内进行搜索,可大大提高检索效率,并在一定程度上编码同名地址的问题。

因此,这就需要将地址库索引文件分组,目前按照第二级地址(地/市)划分地址库。

优化city地址分词

SuperMap地址匹配服务,通过address参数传入具体地址信息,通过city参数传递具体访问地址的区域。例如:address=朝阳区酒仙桥北路超图软件&city=北京市。

但是,在实际应用中,address中的分词,仍然可能因为同名地址而出现匹配不精确的问题。例如,全国范围内,地名中有“朝阳”的地址非常多,很容易因为低一级字段的精确匹配而匹配到错误的市、区。

因此,SuperMap地址匹配服务,专门针对city字段进行了分词优化,保证检索地址库的时候,优先匹配到市,确定范围后再匹配区县,以及下一级别地址,避免因同名而导致的检索错误。

也就是说,我们可以传递参数:address=朝阳区酒仙桥北路超图软件&city=北京市朝阳区,把检索范围,精确到北京市朝阳区内,进一步提高匹配精度。

基于分组索引的地址匹配流程

  1. 根据city字段传入的城市名,确认地址分组。例如:city=北京市朝阳区,则先确定检索范围为北京市下属的朝阳区,不会再去检索其他区域的数据
  2. 根据词典库,对address传入的详细地址分词,例如:address=酒仙桥北路超图软件,则确定分词为:酒仙桥/北路/超图/软件
  3. 读取对应倒排索引文件,获取所有分词的关键字信息
  4. 将得到的所有关键字信息排序,结果是将来自原始数据同一条记录的关键字排在一起,并且是按照分词的位置先后排列,将所有相关记录按照记录匹配长度、记录连续匹配长度、输入地址匹配长度、输入地址连续匹配长度等因素,逐一计算综合得分,分数越高,匹配度越好。
  5. 取出用户指定的前N条分数最高的详细地址记录

地址库的追加更新

SuperMap地址库采用了追加更新机制,包括:

  • 追加分组信息到地址分组文件
  • 追加地址索引到已有索引文件:
    • 倒排索引表追加,合并倒排表
    • 地址信息追加

优化与兼容

针对特殊字符,SuperMap地理编码服务做了兼容处理,包括:

  • 兼容全角字符
  • 兼容特殊字符#、|等
  • 兼容空格

地址匹配服务支持批量搜索,一次请求可传入最多10条地址数据。

使用方式:

  • 在请求地址中增加batch=true
  • address参数中直接传入多个地址,每条数据用英文逗号“,”分隔