• 一种基于匹配规则的模糊中文地址地理赋值方法

    • 摘要:

      一种基于匹配规则的模糊中文地址地理赋值方法,属于地理信息系统的地址赋值领域.首先读入地址字符串与标准地址库;查询与分割地址字符串中的行政区划部分并过滤缩小目标数据集;然后,借助匹配规则树与规则库,针对地址字符串中经常出现的地址要素残缺与地址歧义等模糊问题,实现地址的分词与匹配,返回满足要求的匹配记录.本发明整合了地理赋值中的地址分词与数据库匹配两个重要环节,实现了在分词的同时完成地址的数据库匹配,且有效的解决了模糊中文地址的地址匹配问题,提高了地址匹配的准确性与正确性.

    • 专利类型:

      发明专利

    • 申请/专利号:

      CN201010221943.9

    • 申请日期:

      2010.06.30

    • 公开/公告号:

      CN101882163A

    • 公开/公告日:

      2010-11-10

    • 发明人:

      程昌秀 于滨

    • 申请人:

      中国科学院地理科学与资源研究所

    • 主分类号:

      G06F17/30(2006.01)I

    • 主权项:

      一种基于匹配规则的模糊中文地址地理赋值方法,其特征在于步骤如下:(1)数据准备:a)输入地址字符串Addr;b)读入整个标准地址库,作为目标数据集RecSet;标准地址库中包含以下内容:12位代码表示的行政区划;存储详细街道地址中最小地址要素的五个字段,即道路1、门牌号2、住宅小区3、楼牌号4、兴趣点POI(Point?of?Interest)5;用于存储空间信息的字段,存储地理坐标、经纬度或建筑物编码;c)读入行政区划代码表;表中包括以下几个字段:序号,行政区划名称,行政区划级别,行政区划12位代码;d)定义匹配规则库,将地址总结为地址公式,并根据步骤(1)中步骤b)里所述标准地址库中对应的字段编号,将每条地址公式转化成对应的地址规则并存储到文本文件Rule中;(2)读入标准地址库、行政区划代码表和规则库;地址字符串作为待匹配记录,用Addr表示;标准地址库作为初始目标数据集,用RecSet表示;(3)将Addr中的行政区划部分转换为12位代码,缩小目标数据集:a)在行政区划代码表中,搜索Addr中存在的行政区划标志词,根据所述行政区划标志词从Addr中识别并拆分出行政区划部分;b)如果搜索到的行政区划标志词为多个,则比较各个行政区划标志词的级别属性,确定行政区划标志词中行政级别最低的词语,并据此将所述行政区划部分转化为与确定的行政级别最低的词语相对应的12位行政区划代码;c)过滤RecSet,除去与得到的12位行政区划代码不符的记录;d)将除去的行政区划部分的地址字符串重新赋值为Addr;(4)对Addr进行地址分词与匹配,将分词结果存储到数组Addr_Split[i]里,将匹配结果存储到数据集RecSet里:a)定义Addr的子串为Sub,首先将整个Addr赋值给Sub,定义歧义栈为Stack,Stack用于存储匹配中产生的语义歧义,Stack中存储的元素为结构体变量Struct(i);b)查询地址匹配规则库,根据查询规则库的次数,限定步骤(4)中步骤c)里的搜索字段范围;如果为第n次查询规则库,则依次访问库中的每条规则,将每条规则中第n个字段的合集限定为搜索字段范围;c)判断Sub是否为空:i)如果Sub为空,则继续查看Stack是否为空,如果Stack也为空,则地址分词匹配失败,整个方法终止退出;如果Stack不为空,则根据先进后出原则取出栈顶元素,将Struct(i)中的各个值赋给相应变量,并根据结构体变量中存储的匹配字段分量中存储的值,将该字段标记为匹配,转到步骤(4)中的步骤e);ii)如果Sub不为空,则调用最大正向匹配算法,根据步骤(4)中的步骤b)里限定的字段,在RecSet相应字段中分别搜索与Sub匹配的记录;d)判断与Sub匹配的字段个数:i)如果匹配失败,则继续调用最大正向匹配算法进行分词,转到步骤(4)中的步骤c);ii)如果匹配的字段个数大于1,则将Sub存储到分词数组Addr_Split[i]中;由于产生了歧义,将每一种歧义情况的多个分量存储到结构体变量Struct(i)中,并依次存入Stack中;取出栈顶元素,并根据栈顶元素中存储的匹配字段,将该字段标记为匹配;iii)如果匹配的字段个数等于1,则将Sub存储到分词数组Addr_Split[i],并将查询到的匹配字段标记为匹配;e)查询规则库,比对已经标记为匹配的字段与每条规则,查看是否有满足条件的规则存在:i)如果存在,则返回分词结果数组Addr_Split与匹配结果数据集RecSet,整个方法终止退出;ii)如果不存在,则将查询到的子串Sub在字符串Addr中去掉,重新赋值为Sub=Addr-Sub,返回步骤步骤(4)中的步骤b)继续进行分词匹配.