一种高效拆分长途电话区号的方法 【技术领域】
本发明涉及一种高效拆分长途电话区号的方法,确切地说,涉及一种使用位图映射法对长途电话区号进行拆分的方法,属于电信业务中的数据处理技术领域。背景技术
目前,为了进行长途电话的流量流向分析,关键在于对被叫号码进行长途区号拆分。在传统的区号拆分方法中,首先要建立一个长途区号表,该表包含所有地区名字,对应长途区号,以及其他相关信息。当从用户呼叫话单对被叫号码进行区号拆分时,由于每个长途区号的数字位数长度大小不一,对每个被叫号码都需要查询整个区号表,以找到其对应的区号。有些改进的方法是首先对长途区号进行排序,在匹配时采用区间二分法来加速匹配过程。但是由于电信长途电话的话单数量非常庞大,每次拆分需要的比较次数还是比较多,处理效率仍然不高。
从传统的区号拆分方法可以发现,大量的处理时间是花费在判断被叫号码是否是一个合法长途区号上,可以考虑如果能够建立一种长途区号的映射关系,使得只要通过简单的比较,就能从被叫号码中快速判定哪些组合是有效长途区号,哪些组合不是有效长途区号的话,无疑可以有效地提高业务处理效率。
位图映射法是映射法地一个变种,其输出只有0和1两个值。通过逻辑定义输入值和输出值的映射,可以快速对输入值进行分类。例如定义1是有效映射,0是无效映射,就可以方便地区分出有效映射和无效映射的输入值。发明内容
本发明的目的是提供一种高效拆分长途电话区号的方法,也就是提供一种利用位图映射法对长途电话区号进行拆分的方法。使用该方法可以大大提高数据处理效率,能够从用户呼叫话单中的被叫号码中快速拆分出长途区号,为长话流量流向分析和计费提供实时数据。
本发明的目的是这样实现的:一种高效拆分长途电话区号的方法,其特征在于:使用位图映射法拆分长途电话区号,以确定长话流量和流向。
所述的使用位图映射法拆分长途电话区号的方法,包括下列步骤:
A、构建国内、国外两个多维长途电话区号位图映射表;
B、确定映射规则,并根据国内、国外两个区号位图映射表进行长途电话区号拆分。
所述的步骤A中,在构建国内、国外两个多维区号位图映射表之前进一步包括下列步骤:
A1、分别为国内长话区号和国际长话区号映射表建立各自的多维数组,该两个多维数组中的每个维度顺序对应长话区号的一位数字;
A2、根据国内长话区号的位数在3-5位之间,建立国内长话区号的多维数组为5维,对于其位数少于5位的国内长话区号,通过在其后面添补0的方式使该数组内的所有长话区号位数一致;因为国内长话区号的首位均为0,这个维度不需要做映射,所以国内长话区号数组的维数是:国内长话区号位数最大值5-1=4(维);
A3、根据国际长话区号的位数在4-8位之间,建立国际长话区号的多维数组为8维,对于其位数少于8位的国际长话区号,通过在其后面添补0的方式使该数组内的所有长话区号位数一致;因为国际长话区号的首两位均为00,这两个维度不需要做映射,所以国际长话区号数组的维数是:国际长话区号位数最大值8-2=6(维);
所述的步骤A中,在构建国内、国外两个多维区号位图映射表时包括下列步骤:
A4、初始化一个4维的国内区号数组,其初始值都置为0;
A5、初始化一个6维国际区号数组,其初始值都置为0;
A6、从长途区号表中读出一个形式为R1R2R3…Rm的区号,进行分析处理:如果该区号前两位为“00”,进行步骤(A7)操作;如果该区号首位为“0”,次位不为“0”,进行步骤(A8)操作;否则,作为异常区号退出;
A7、作为国际区号,把R3…Rm转换成数字,然后赋值:A2[R3][R4]…[Rm][0]…[0]=1;
A8、作为国内区号,把R2…Rm转成数字,然后赋值A1[R2][R3]…[Rm][0]…[0]=1;
A9、继续从长途区号表中取出下一个区号,并返回步骤(6)循环进行分析处理;直至将长话区号表中的全部区号处理完毕。
所述的步骤A只要在进行区号拆分之前初始化一次。
所述的步骤B中,所述的映射规则是:对于指定维数的数组,初始化的映射值都置为0,表示无效映射;在处理长话区号时,把有效长话区号的映射值置为1。
所述的步骤B中,根据国内、国外两个区号位图映射表进行长途电话区号拆分包括下列步骤:
B1、从通话清单中分拣出被叫号码;
B2、如果该被叫号码首位为“0”,次位不为“0”,则其区号位数在3~5之间,属于国内长话区号,置标注F=1;如果该被叫号码前两位为“00”,则其区号位数在4~8之间,属于国际长话区号,置标注F=2。如果该被叫号码不是上述两种情况,则其不是合法的长途被叫号码,异常退出;
B3、对拆分的区号长度作初始化,即设定需要拆分出长话区号位数的循环变量k为该映射表的最大位数,并从其最大位数开始拆分;
B4、判断变量k是否大于该映射表的最小位数;若是,执行后续步骤,否则异常退出,说明拆分不成功;
B5、从被叫电话号码取出前k位,并将其转换成数值为C1C2…Ck
B6、如果F=1,并且A1[C2][C3]…[Ck]…[0]=1,则C1C2…Ck为合法国内长话区号,拆分成功,退出;
B7、如果F=2,并且A2[C3][C4]…[Ck]…[0]=1,则C1C2…Ck为合法国际长话区号,拆分成功,退出。
B8、如果两个步骤B6和B7的拆分都不成功,则对该需要拆分的长话区号位数的循环变量k设置为:k=k-1,即减少匹配的区号位数,也就是说,如果前k位不是合法的区号,就检查前k-1位是否是合法区号,再转入步骤B4继续进行拆分处理。
所述的步骤B3中初始化设定的需要拆分出长话区号位数的循环变量k,对于国内长途电话区号位图映射表是5维,对于国际长途电话区号位图映射表是8维。
所述的步骤B5中从被叫电话号码取出需要拆分出长话区号位数的循环变量k,也就是需要匹配区号的位数前k位中的k,对于国内长途电话区号位图映射表是5维,对于国际长途电话区号位图映射表是8维。
本发明的特点是利用长途区号的特性,建立长途区号映射表,再通过映射表进行几次简单的比较,就可以直接得到被叫号码的长途区号,效率很高。这种位图映射法的处理方法要比传统方法减少了上百倍的比较操作,比改进的二分匹配法也要好几倍。另外,这种位图映射法的处理时间只和国内、国外的长话区号的最大位数的长度有关,而和长途区号的个数无关,使得该方法很容易扩展,工作的可靠性与稳定性很好。本发明的方法可以应用于电信长途计费系统,拆分出长途区号进行计费操作,或者确定计费费率。也可以应用于网管或话务分析系统,以便进行流量和流向分析。附图说明
图1是本发明建立位图映射表处理流程图。
图2是本发明利用位图映射法拆分方法流程图。具体实施方式
本发明是一种使用位图映射法高效拆分长途电话区号的方法,以确定长话流量和流向。该方法主要包括两个步骤:
A、构建国内、国外两个多维长途电话区号位图映射表;
B、确定映射规则,并根据国内、国外两个区号位图映射表进行长途电话区号拆分。
本发明首先对长途电话区位号码的特征,也就是输入值进行分析研究。发现所有长话区位号码都是由数字0-9组成。其中国内长途电话的区号首位为0,次位不为0;国际(含港澳台)长途电话的区号首两位均为00。而且,虽然各个长话区号的位数不固定,但是其位数都不太长。国内长话区号位数在3~5位之间,例如:北京是010,云南错那是08030。国际长话区号位数在4~6位之间,例如:日本是0081,科科斯岛是00619162。
本发明使用位图映射法拆分长途区位号码的基本原理是:对于每一个长途区号来说,都是由几个数字组成的字符串信息,形如R1R2R3…Rm,为了建立映射关系,可以用m维空间方式表示该长话区号,对符合国内或国际长话区号字符串信息特征的维度组合分别设置一个标注,没有做标志的维度组合就不是合法的区号。这样只需要检查从被叫号码中拆分出来字符串的维度组合是否为一个有效标志,就可以完成长话区位号码的拆分。考虑到国内区号和国际区号长度不同,为了减少判断次数,本发明构建国内、国外两个立两个区号位图映射表,分别用于国内长话区号和国际长话区号的拆分。然后确定映射规则,并根据国内、国外两个区号位图映射表进行长途电话区号拆分。
在构建国内、国外两个多维区号位图映射表之前,首先进行初始化操作:即分别为国内长话区号和国际长话区号映射表建立各自的多维数组m1和m2,该两个多维数组中的每个维度顺序对应长话区号的一位数字。根据国内长话区号的位数在3-5位之间,建立国内长话区号的多维数组为5维,对于其位数少于5位的国内长话区号,通过在其后面添补0的方式使该数组内的所有长话区号位数一致;例如:广州长话区号020表示成A1[2][0][0][0]=1,深圳长话区号0755表示成A1[7][5][5][0]=1。因为国内长话区号的首位均为0,这个维度不需要做映射,所以国内长话区号数组的维数m1是:国内长话区号位数最大值5-1=4(维)。再根据国际长话区号的位数在4-8位之间,建立国际长话区号的多维数组为8维,对于其位数少于8位的国际长话区号,通过在其后面添补0的方式使该数组内的所有长话区号位数一致;因为国际长话区号的首两位均为00,这两个维度不需要做映射,所以国际长话区号数组的维数m2是:国际长话区号位数最大值8-2=6(维);
参见图1,具体介绍构建国内、国外两个多维区号位图映射表的实施例操作步骤,这些操作步骤只需要在进行区号拆分之前初始化一次:
(1)初始化一个(m1-1)=4维的国内区号数组A1,其初始值都置为0;
(2)初始化一个(m2-1)=6维国际区号数组A2,其初始值都置为0;
(3)检查长途区号表中全部区号是否都处理完毕?若否,则顺序进行步骤(4)操作,若是,则完成全部操作,运行结束;
(4)从长途区号表中读出一个形式为R1R2R3…Rm的区号,进行分析处理;
(5)判断该区号的前两位R1R2是否都为“0”?若是,进行步骤(7)操作;否则进行步骤(6)操作;
(6)判断该区号的前两位R1R2是否同时满足:R1为“0”和R2不为“0”?若是,进行步骤(8)操作;否则进行步骤(9)操作;
(7)确定为国际长话区号,把R3…Rm转换成数字,同时设置标注值:A2[R3][R4]…[Rm][0]…[0]=1,并返回步骤(3);
(8)确定为国内长话区号,把R2…Rm转成数字,同时设置标注值:A1[R2][R3]…[Rm][0]…[0]=1,并返回步骤(3);
(9)作为异常区号处理。
参见图2,下面根据本发明设定的映射规则,即对于指定维数的数组,初始化的映射值都置为0,表示无效映射;在处理长话区号时,把有效长话区号的映射值置为1,描述对国内、国外两个区号位图映射表进行长途电话区号拆分的实施例操作步骤:
(11)判断话单是否都处理完了?若否,则顺序进行步骤(12)操作,若是,则完成全部操作,运行结束;
(12)从通话清单中分拣出被叫号码C1C2…Cm;
(13)判断该被叫号码的首两位C1C2是否都为“0”?若是,进行步骤(14)操作;否则进行步骤(15)操作;
(14)确定为国际长话区号,其长话区号位数的最大值V1=m2=8,最小值V2=n2=4,设置标注F=2(国际长话区号);
(15)判断该被叫号码的首位C1C2是否同时满足:C1为“0”和C2不为“0”?若是,进行步骤(16)操作;否则进行步骤(17)操作;
(16)确定为国内长话区号,其长话区号位数的最大值V1=m1=5,最小值V2=n1=3,设置标注F=1(国内长话区号);
(17)作为异常被叫号码进行处理,异常退出;
(18)初始化被叫电话号码的长途区号,即设定需要拆分出长话区号位数的循环变量k为该映射表的最大位数V1,并从其最大位数开始拆分;
(19)判断本次需要拆分的被叫电话号码的长途区号位数k是否小于该映射表的长途区号位数最小值;若否,顺序执行步骤(20)操作,否则,进行步骤(21)操作;
(20)判断该长途区号是国内长话区号,F=1,在国内长话区号映射表是否可以找到合法映射:A1[C2][C3]…[Ck]…[0]=1?若是,拆分成功,其国内长话区号为:C1C2…Ck,若否,执行步骤(22)操作;
(21)说明长途区号拆分失败,异常处理退出;
(22)判断该长途区号是国际长话区号,F=2,在国际长话区号映射表是否可以找到合法映射:A2[C3][C4]…[Ck]…[0]=1?若是,拆分成功,其国际长话区号为:C1C2…Ck,若否,执行步骤(23)操作;
(23)减少要匹配的区号位数,即将被叫电话号码的长途区号位数的循环变量k设置为:k=k-1。再转入步骤(19)继续进行拆分处理;也就是说,如果前k位不是合法的区号的话,再转入检查前(k-1)位是否是合法区号。