五、具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
如图1所示,为本发明一种通讯地址识别和标准化的方法流程图。具体方法步骤可如下所示:
步骤S100:输入通讯地址。由于地域的差别,用户输入的习惯等原因,输入的通讯地址可能不是严格按照国家行政标准地址的表达方式。如用户输入的地址“广东深圳宝安西乡”。
步骤S200:利用地址元数据字典,对所述输入的通讯地址进行切分,并生成切分的地址元数据组;
所述的地址元数据字典,如图2本发明较佳实施例的地址元数据字典结构图所示。所述的地址元数据字典200包括分级地址元数据字典210和地址别名元数据字典220。所述的分级地址元数据字典210用于存储分级地址元数据,分级地址元数据字典210可为四级分级地址元数据字典或六级分级地址元数据字典。
所述的四级分级地址元数据字典按行政区域来划分。在本发明实例中提供一种四级分级地址模型用以构成四级分级地址元数据字典,如“表1、四级分级地址模型(a)”所示。省,自治区,直辖市将作为四级分级地址模型的第一级;副省级城市,地级市,直辖市辖区,县,自治县,县级市,旗,自治州,地区将划分四级分级地址模型的第二级;副省级城市辖区,地级市辖区将为四级分级地址模型的第三级;乡镇,道路,自然村,相关编号,建筑物的名字将成为四级分级地址模型的第四级。此种分级模型较常应用于身份证和一般书写上的通讯地址。
表1、四级分级地址模型(a)
在本发明实施例中还可采用另一种四级分级地址模型用以构成四级分级地址元数据字典,如“表2、四级分级地址模型(b)”所示。省,自治区,直辖市将作为四级分级地址模型的第一级;副省级城市,地级市,自治州,地区将划分四级分级地址模型的第二级;直辖市区,副省级城市辖区,地级市辖区,县,县级市,自治县,旗将为四级分级地址模型的第三级;乡镇,道路,自然村,相关编号,建筑物的名字将成为四级分级地址模型的第四级。此分级模型较为严谨,严格按照国家行政区域的等级划分,较常用于互联网中的地址分类和分级信息。
表2、四级分级地址模型(b)
所述的六级分级地址元数据字典同样按行政区域来划分。在本发明实施例中可采用一种六级分级地址模型用以构成六级分级地址元数据字典,如“表3、六级分级地址模型(a)”所示。省,自治区,直辖市将作为六级分级地址模型的第一级;副省级城市,地级市,直辖市辖区,县,自治县,县级市,旗,自治州,地区将划分六级分级地址模型的第二级;副省级城市辖区,地级市辖区将为六级分级地址模型的第三级;乡镇将成为六级分级地址模型的第四级;街,道,路,自然村将作为六级分级地址模型的第五级;编号将作为六级分级地址模型的第六级。此种分级模型也较常应用于身份证和一般书写上的通讯地址。
表3、六级分级地址模型(a)
在本发明实施例中还可采用另一种六级分级地址模型用以构成六级分级地址元数据字典,如“表4、六级分级地址模型(b)”所示。省,自治区,直辖市将作为六级分级地址模型的第一级;副省级城市,地级市,自治州,地区将划分六级分级地址模型的第二级;直辖市区,副省级城市辖区,地级市辖区,县,县级市,自治县,旗将为六级分级地址模型的第三级;乡镇将成为六级分级地址模型的第四级;街,道,路,自然村将作为六级分级地址模型的第五级;编号将作为六级分级地址模型的第六级。此分级模型较为严谨,同样是严格按照国家行政区域的等级划分,较常用于互联网中的地址分类和分级信息。
表4、六级分级地址模型(b)
从上述分级地址模型的表中可看出,六级分级地址元数据字典与四级分级地址元数据字典相比,其地址数据信息更详细、明确,字典规模相对较大。
所述的分级地址元数据字典210可采用Trie树存储结构。所述的Trie树存储结构可采用双数组的方法实现。采用双数组实现的Trie数据结构,所有词条将被编译成字典树,这种字典树是一个确定的有限自动机(DeterministicFiniteAutomaton,DFA)。
所述的地址别名元数据字典220用于存储地址别名元数据,并与分级地址元数据字典210中的元数据具有映射关系。分级地址元数据字典210和地址别名元数据字典220是一对多的关系,例如分级地址元数据字典210中的地址元数据“安徽省”,与地址别名元数据字典220中的地址别名元数据“安徽”、“皖”,就是一对多的关系。在同一个级别地名元数据集合内一个地址别名元数据只能对应一个地址元数据,因此可以在同一个级别地名元数据集合内将地址别名元数据和地址元数据之间建立映射关系,即将地址别名元数据映射到地址元数据,实现对地址元数据统一的处理。
所述的切分可用所述地址元数据字典200的分级地址元数据字典210,采用向右最大匹配算法对所述用户输入的通讯地址进行匹配和切分。
所述的分级地址元数据字典210可采用Trie树存储结构。所述的Trie树存储结构采用双数组的方法实现。采用双数组实现的Trie数据结构,包含两个数组,分别是数组Base[],所述数组Base[]用于存放当前状态相对下一输入变量的初始偏移量(防止冲突);数组Check[],所述数组Check[]用于存放当前状态的前驱状态的位置。存储的所有词条将被编译成字典树,这种字典树是一个确定的有限自动机(DeterministicFiniteAutomaton,DFA)。在本发明较佳实施例中可采用向右最大匹配算法实现对所述用户输入的通讯地址进行匹配和切分,以输入的字符串中每个字符的Unicode码为确定的有限自动机(DeterministicFiniteAutomaton,DFA)的输入变量为例(以UTF-8,GBK或GB18030编码的每一个字节作为DFA的输入变量亦然),向右最大匹配算法执行过程如下:
从初始状态开始,根据输入变量的值,获取下一个状态,通过以下公式获得:
Base[s]+c=t公式(1)
Check[Base[s]+c]=s公式(2)
其中s为当前状态,c是输入变量的值,t是下一个状态的位置,公式(2)用来校验,表示下一状态的前驱是当前状态。若当前状态为结束状态则Base数组中对应位置的值为负数,否则为正数(表示当前状态为非结束状态或者中间状态)。
根据以上的计算方式依次读取字符串每一个字符对应的Unicode值为输入变量的值,从当前状态计算下一状态,然后把下一状态作为当前状态递归执行下去,直至结束。结束的情况有如下几种:
1)、输入的字符串达到结束位置
2)、用来校验的公式(2)的条件不满足
当达到结束位置时,最后一个经过的结束状态对应的输入变量为最大匹配位置,返回其相对起点的距离即为最大匹配长度。
根据以上的执行过程不难看出此算法的复杂度为O(n),n为被检索字符串的长度。此算法与字典的规模(即字典包含的词条数量)无关。
结合图3本发明较佳实施例的Trie树原理结构示意图,可很好的理解上述向右最大匹配算法的实现过程和原理。如用户输入的地址为“广东深圳宝安西乡”,通过地址元数据字典,采用向右最大匹配算法匹配和切分之后的地址为“广东深圳宝安西乡”。
步骤S300:对所述切分的地址元数据组进行标注,并生成标注的地址元数据组;
利用所述地址元数据字典200的分级地址元数据字典210,可对所述切分的地址元数据组依据预先定义的标注属性进行标注,并生成标注的地址元数据组。由于用户输入的随意性,很可能把地址信息输错,或者在正确的各级地址之间掺加随意文本,这就要求系统具有强大的健壮性和处理能力。为了实现上述发明目的,本发明较佳实施例中提供了一地址信息标注的处理方法,地址信息标注的处理方法由于分级地址元数据字典的模型不同而不同,在较佳实施例中以“表1、四级分级地址模型(a)”为例,其处理方法如下所示:
标注属性的预先定义如下所示:
1)、省,自治区,直辖市为第一级,在切分出来的第一级地址元数据后面附加标注符号“(1)”,即一级地址;
2)、副省级城市,地级市,直辖市辖区,县,自治县,县级市,旗,自治州,地区为第二级,在切分出来的第一级地址元数据后面附加标注符号“(2)”,即二级地址;
3)、副省级城市辖区,地级市辖区为第三极,在切分出来的第一级地址元数据后面附加标注符号“(3)”,即三级地址;
4)、乡镇,道路,自然村,建筑物的名字等为第四级,在切分出来的第一级地址元数据后面附加标注符号“(4)”,即四级地址;
5)、针对非地址信息的数据、系统不能识别的地址信息,附加标注符号“(0)”,即零级地址。
按照以上的定义,如用户输入的地址为“广东深圳宝安西乡”,通过分级地址元数据字典210,采用向右最大匹配算法匹配和切分之后的地址为“广东深圳宝安西乡”;经过标注之后的地址可为“广东(1)深圳(2)宝安(3)西乡(4)”。由于不同级别的地址元数据存在同名的情形,因此对所述输入的地址进行标注时,会出现多种标注情形。如上述输入的地址就有四种标注的情形:“广东(1)深圳(2)宝安(3)西乡(4)”、“广东(1)深圳(2)宝安(3)西乡(2)”、“广东(1)深圳(4)宝安(3)西乡(4)”、“广东(1)深圳(4)宝安(3)西乡(2)”。
相应的,按照上述的定义,一般的标注顺序有以下一些类型,如“表5、一般标注顺序举例”所示:
表5、一般标注顺序举例
以“表2、四级分级地址模型(b)”、“表3、六级分级地址模型(a)”、以及“表4、六级分级地址模型(b)”为例的地址信息的标注处理方法亦可以类似上述的处理方式进行标注。不同的是,六级分级地址元数据字典的标注类型相对于四级分级地址元数据字典要更详细一些。
步骤S400:对所述标注的地址元数据组,计算其相应的权值并输出权值最大的地址元数据组;
输入的地址经过地址切分、地址标注处理之后,将得到一个或多个标注的地址元数据组。如输入地址“广东深圳宝安西乡”,可得到以下四种标注状态:“广东(1)深圳(2)宝安(3)西乡(4)”、“广东(1)深圳(2)宝安(3)西乡(2)”、“广东(1)深圳(4)宝安(3)西乡(4)”、“广东(1)深圳(4)宝安(3)西乡(2)”。在本发明实施例中可依据动态规划算法来计算其相应的权值并输出权值最大的地址元数据组。
所述的动态规划算法,在本发明实施例中可采用了动态规划算法中的经典算法:维特比(Viterbi)算法来计算最优的地址等级标注序列,算法中的观察值和状态均为地址等级。该算法包含如下内容:
一个初始状态值:
Pin×1=(π1,π2,π3,...,πn)T公式(3)
其中πi是地址级别为i的初始概率。Pi内的值根据经验设定,其内的每个值大小遵循如下原则:地址行政级别越高对应的初始概率越高,如省级的初始概率大于市级的。一个概率转移矩阵An×n:
其中
aij=P(qt=j|qt-1=i)1≤i,j≤n
表示当前的地址级别为i,下一地址级别为j的概率。矩阵A里的每个值根据经验设定。例如矩阵A中每个aij的值大小应遵循如下原则:
1)、一般情况下(i,j)构成一个逆序(i>=j)时,aij的值应原则上小于所有非逆序(i<j)的值,此条件为了保证标注序列的最终结果按照地址级别递增的方向。
2)、当地址分级模型中存在某一级别地址可以连续的情况,如“(4)+”表示第四级地址可以连续出现,对应的a44的值要稍大一些,否则就稍小一些。
其上的约束为:
维特比(Viterbi)算法的执行流程如下:
1)、初始化
δ1(i)=πi,1≤i≤n公式(4)
公式(5)
2)、循环执行
公式(6)
公式(7)
其中2≤t≤T,1≤j≤n
3).结束
公式(8)
公式(9)
通过回溯算法获得最佳标注序列,如下公式:
t=T-1,T-2,...,1公式(10)
举例来说明上述算法的实现。因分级地址元数据字典的模型不同,维特比(Viterbi)算法的Pi和A的具体值将有所不同。在本发明实施例中,以“表1、四级分级地址模型(a)”为例,Pi和A可取以下初始状态值:
Pi={0.05,0.45,0.25,0.15,0.1};
A={{0.05,0.45,0.25,0.15,0.10},
{0.05,0.23,0.45,0.17,0.10},
{0.05,0.18,0.25,0.30,0.22},
{0.05,0.35,0.05,0.05,0.50},
{0.05,0.30,0.15,0.05,0.45}};
如输入的地址为:“广东深圳宝安西乡”,经过所述的地址切、地址标注处理之后可得到以下四种标注状态:“广东(1)深圳(2)宝安(3)西乡(4)”、“广东(1)深圳(2)宝安(3)西乡(2)”、“广东(1)深圳(4)宝安(3)西乡(4)”、“广东(1)深圳(4)宝安(3)西乡(2)”。根据维特比(Viterbi)算法,我们可得知四种标注状态的权值:
1)、广东(1)深圳(2)宝安(3)西乡(4);P=0.030375
2)、广东(1)深圳(2)宝安(3)西乡(2);P=0.0030375
3)、广东(1)深圳(4)宝安(3)西乡(4);P=0.001125
4)、广东(1)深圳(4)宝安(3)西乡(2);P=1.125E-4
概率最大的标注序列为第一种标注状况。因此动态规划算法输出的结果也是第一种标注状态“广东(1)深圳(2)宝安(3)西乡(4)”。
以“表2、四级分级地址模型(b)”、“表3、六级分级地址模型(a)”、以及“表4、六级分级地址模型(b)”为准的权值处理方法亦可以类似上述的处理方式进行处理。
步骤S500:利用地址元数据字典,对所述权值最大的地址元数据组进行标准化,生成标准化的通讯地址。
经过前述四个步骤之后,将得到一权值最大的地址元数据组,步骤S500将对权值最大的地址元数据组进行标准化,生成标准化的通讯地址。所述标准化将利用所述地址元数据字典模块200的地址别名元数据字典220,对输入的地址别名进行标准化,地址标准化的名称为地址的官方全名。如:“沪”标准化为“上海市”、“粤”标准化为“广东省”、“广西”标准化为“广西壮族自治区”、“北京”标准化为“北京市”等等。如上述输入地址为“广东深圳宝安西乡”,经过标准化处理,将得到标准化的地址“广东省深圳市宝安区西乡镇”。
所述地址标准化对零级地址(即标注为“0”)的地址信息将作如下处理:
1)、零级地址出现在四级地址第一次出现之前。由于一级,二级,三级地址收集的相对较全,一般不会出现未被收录的前三级地址。如果零级地址出现在四级地址第一次出现之前,一般都是由于用户输入错误的地址而引起的,在本发明实施例中地址标准化模块340将默认的对零级地址前后其他非零级别的地址进行标准化。当然,在其他实施例中也可作删除标注为“(0)”级的地址文本、或者对标注为“(0)”级的地址文本不作标准化处理。
2)、零级地址第一次出现在四级地址之后。此种情况可能是由于地址数据不够齐全造成的(如:以“表1、四级分级地址模型(a)”为分级地址模型的地址元数据字典,将会出现“道路”之后的数据无法识别,如典型建筑物,小区名称等),或者输入错误造成的,此种情况在本发明较佳实施例中将对零级地址第一次出现之前的最后一个标注为“(4)”的之后所有标注元数据组均不做标准化处理。例如,对于如下通讯地址:“湖北省武汉市武昌区珞瑜路1037号皖新花园7栋3单元203室”。其标注序列如下:“湖北省(1)武汉市(2)武昌区(3)珞瑜路(4)1037号(4)皖(1)新花园(0)7栋(4)3单元(4)203室(4)”。当地址数据库中的数据不够全时,对于上述情况的处理如下:第一次标注为零级地址的数据为“新花园”,其前面最后一个标注为四级地址的数据为“1037号”,则“1037号”之后的所有标注序列均不作标准化处理,因此“1037号皖新花园7栋3单元203室”的最终结果序列应该是“1037号皖新花园7栋3单元203室”,而不是“1037号安徽省新花园7栋3单元203室”。
步骤S600:输出所述标准化的通讯地址。
在本发明另一较佳实施例中,步骤S400还包含以下步骤,如图4本发明另一较佳实施例中的修正方法流程图所示:
步骤S410:利用所述地址元数据字典,对所述权值最大的地址元数据组标注序列判定是否和所述地址元数据字典的约束条件一致;
步骤S420:倘若不一致,对所述权值最大的地址元数据组的标注进行修订;
步骤S430:生成修订后的地址元数据组。
在本发明另一较佳实施例中,所述地址元数据字典还包括一地址元数据修正字典230,如图5本发明另一较佳实施例的地址元数据字典结构图所示。所述地址元数据修正字典230,用于存储所述的约束条件数据。所述地址元数据修正字典230存放的是以下2种类型的约束条件数据:
1)、针对区与县或者县级市同名的情况下,存放其约束条件。例如:在四级地址模型(a,b)和六级地址模型(a,b)中,区的别名和县或县级市的别名存在相同的情形。如“太和县”(隶属安徽省阜阳市)和“太和区”(隶属辽宁省锦州市),它们的别名都为“太和”,在经过动态规划算法计算最优标注序列时,“太和”均被标注在区一级,因此还需要对最优的候选结果以一约束条件进行校正处理。在本发明实施例中,将存放的约束条件为:“太和→阜阳市”,该约束条件表示“太和”是“阜阳市”下的一个县。
2)、针对乡、镇与县或县级市同名的情况下,存放其约束条件。例如在四级地址模型(a)和六级地址模型(a)中,存在乡、镇与县或县级市同名的情况。如地址“福建龙岩长汀和平路”,此时的“长汀”将被标注在乡镇级地址级别上,实际上它是“龙岩市”下的一个县,即“长汀县”,而不是“黑龙江省牡丹江市海林市”下的“长汀镇”,因此也要依据约束条件进行判断,约束条件为:“长汀→龙岩市”,该约束条件表示“长汀”是“龙岩市”下的一个县。
所述修正可通过地址元数据修正字典230判定权值最大的地址元数据组是否一致,即是否符合约束条件;倘若不一致,也就是不符合约束条件,则说明所选择的最优结果存在问题;将对所述权值最大的地址元数据组的标注进行修订;生成修订后的地址元数据组。
举例来说明另一较佳实施例的实现。在本发明另一较佳实施例中,以“表1、四级分级地址模型(a)”为例,Pi和A可取以下初始状态值:
Pi={0.05,0.45,0.25,0.15,0.1};
A={{0.05,0.45,0.25,0.15,0.10},
{0.05,0.23,0.45,0.17,0.10},
{0.05,0.18,0.25,0.30,0.22},
{0.05,0.35,0.05,0.05,0.50},
{0.05,0.30,0.15,0.05,0.45}};
如用户输入的地址为“黑龙江黑河五大连池新发乡”,经过地址切分模块310、地址标注模块320以及权值模块330的处理,可知输入地址的标注和权值状况如下:
1)、“黑龙江(1)黑河(2)五大连池(4)新发乡(4)”P=0.0200475;
2)、“黑龙江(1)黑河(2)五大连池(2)新发乡(4)”P=0.0111375;
3)、“黑龙江(1)黑河(4)五大连池(4)新发乡(4)”P=0.0091125;
4)、“黑龙江(1)黑河(4)五大连池(2)新发乡(4)”P=0.001485。
这时候输出权值最大的元数据组:“黑龙江(1)黑河(2)五大连池(4)新发乡(4)”。利用地址元数据字典200中的地址元数据修正字典230,对所述权值最大的元数据组判定可知,“黑河(2)五大连池(4)”与约束条件“五大连池→黑河市”是不一致的。此时,将对所述权值最大的地址元数据组“黑龙江(1)黑河(2)五大连池(4)新发乡(4)”的标注进行修订;生成修订后的地址元数据组“黑龙江(1)黑河(2)五大连池(2)新发乡(4)”,并输出给所述地址标准化模块。