具体实施方式
以下结合附图对于本发明的具体实施方式做详细说明。
根据信函寄达地的不同,信函分拣分两种方式:本口分拣和转口分拣。本口分拣是信函寄达地为分拣机所在地区的信函,它需要精确到投递支局或投递道段的分拣;转口分拣是信函寄达地为除分拣机所在地区的其他地区的信函,它按分拣方案的不同需要精确到省级、地市级或县区级的分拣。对于这两种分拣方式,都需要建立相应得地址库来驱动信函的中文地址识别。
对于转口地址存储格式,如图1所示表示的转口地址表结构,由全国三级行政区划组成,分别是31个省级行政区划(如浙江省),每个省级行政区划下为其地市级的行政区划(如杭州市),每个地市级行政区划又包含多个县区级的行政区划(如余杭区)。每个行政区划都标注了该区域内邮编的范围,如比如余杭区的邮编前四位为3111,后两位不确定,所以用3111xx表示,x表示任意0~9的数字。特别说明的是地级市标注的邮编为其中心城区的邮编。由此建立了一张覆盖全国精确到县区行政区划的地名表以及其对应的邮编。本发明将表中的每个地址条目称为查询地址。
对于本口地址存储格式,本口地址分为道路地址和单位名称两个。
对于道路地址信息,采用道路与门牌号相关结合的形式表示。而对于单位名称信息,其内容多样化,可以是某小区、公司、大厦、机关、学校、小地名等各种除路名以外的其他地址表达形式。首先需要去除这些地址信息中一些冗余的信息,比如对于浙江杭州的本口单位信息,设置“浙江”,“浙江省”,“杭州”“杭州市”“公司”“有限公司”等常用词作为冗余信息,去除这些信息并不影响地址的表达,因此我们在不影响地址表达的原则下下去除这些信息。去除后的表达称为该条地址的简称。比如:
“浙江省人民政府”的简称为“省人民政府”
“浙江大学”的简称任为“浙江大学”
“杭州阿里巴巴有限公司”的简称为“阿里巴巴”
采用简称的优点在于,由于本口单位信息较长,完全匹配的难度很大,而如“浙江省”的词组在地址中出现频率很高,会严重影响两条了类似地址的区分。采用简称可以较大程序的出去干扰,提高匹配度。
对于去除冗余后地址条目即地址简称,接下来要提取关键词作为检索,为后续匹配作准备。这里关键词的定义是:某条地址中的连续三个字组成的词,而且该词在其他地址中出现的频率最低。
道路地址信息的表示形式如下:
序号 |
路名 |
奇偶标志 |
起始号 |
终止号 |
邮编 |
所属区且 |
投递支局 |
道段号 |
检索 |
1 |
潮王路 |
奇 |
7 |
53 |
210014 |
下城区 |
|
|
|
2 |
德胜路 |
偶 |
328 |
10000 |
310015 |
拱墅区 |
|
|
|
|
|
|
|
|
|
|
|
|
|
“路名”:即道路的名称。如中山北路、世纪大道、长庆街、祖庙巷、桃花弄等等。注意名称中不可出现任何标点符号。
“奇偶标志”:标明该段道路的投递号码仅为奇数号、仅为偶数号还是为连续号码。
“起始号”:该段道路投递号码的起始号。
“终止号”:该段道路投递号码的终止号。若该段道路的终止号未知,则定义其为“9999”(奇数号或全号时)或“9998”(偶数号时)。
“邮编”:该段道路的邮政编码。
“所属区县”:该段道路所在的区县。其中,区县是指市辖区、县级市、县等等。
“段道编号”:该段道路所属段道编号。
单位名称信息的表示形式如下:
每条单位信息按行来储存,包含“单位名”、“邮编”、“所属区县”、“实际地址”、“简称1”、“简称2”、“简称3”、“段道编号”、“备注”9项属性,每项信息按列储存。如下表所示单位地址的投递信息:
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
1 |
单位名 |
邮编 |
所属区县 |
实际地址 |
简称1 |
简称2 |
简称3 |
段道编号 |
备注 |
2 |
杭州市西湖区人民法院 |
310012 |
西湖区 |
文二西路9号 |
西湖区人民法院 |
西湖区法院 |
|
|
|
“单位名”:即单位的名称。例如浙江大学、恒励大厦、杭州市西湖区人民法院、中融城市花园等等。名称一定要写全称,例如“浙江省高级人民法院”不可以写为“省高级人民法院”,但“省高级人民法院”可写入“简称1”一栏。注意名称中不可出现任何标点符号。
“邮编”:该单位所在地区的邮政编码。
“所属区县”:该单位所在的区县。其中,区县是指市辖区、县级市、县等等。
“实际地址”:该条单位信息所表示的单位所在的实际地址。如图10所示。
“简称1”:该条单位信息所表示的单位的简称。若无则为空。如图10所示。
“简称2”:该条单位信息所表示的单位的简称。若无则为空。
“简称3”:该条单位信息所表示的单位的简称。若无则为空。
“段道编号”:该单位实际地址所属段道编号。
“备注”:备注信息。
其中的特殊情况有:
[A]对于XX里、XX坊、XX苑、XX村、XX花园、XX小区以及类似的这种住宅小区大多数情况下均存放在“单位”工作表中。但是若出现某一住宅小区分属于不同投递局,则将其储存在“道路”工作表中。例如白马花园1-20号属于甲投递局,21-40号属于乙投递局。则白马花园存放于“道路”工作表中而不是“单位”工作表。存放格式如下:
甲投递局.xls中的“道路”工作表
|
A |
B |
C |
D |
E |
F |
G |
H |
1 |
路名 |
奇偶全 |
起始号 |
终止号 |
邮编 |
所属区县 |
段道编号 |
备注 |
2 |
白马花园 |
全 |
1 |
20 |
111111 |
白云区 |
|
|
乙投递局.xls中的“道路”工作表
|
A |
B |
C |
D |
E |
F |
G |
H |
1 |
路名 |
奇偶全 |
起始号 |
终止号 |
邮编 |
所属区县 |
段道编号 |
备注 |
2 |
白马花园 |
全 |
21 |
40 |
111111 |
白云区 |
|
|
[B]对于“东湖·香榭水岸”这种格式的名称,由于“单位名”中不可出现标点符号,则需表示为“东湖香榭水岸”。而对于“沙湖村(原沙湖新村)”这种格式的名称,可将括号去掉,将“原沙湖新村”这一注释信息放入对应的“备注”一栏。
[C]对于邮政专用信箱,应存放于“道路”工作表中,存放格式如下。而其它信箱不可存放入“道路”工作表中。
邮政专用信箱存放格式表
|
A |
B |
C |
D |
E |
F |
G |
H |
1 |
路名 |
奇偶全 |
起始号 |
终止号 |
邮编 |
所属区县 |
段道编号 |
备注 |
2 |
XX市邮政专用信箱 |
奇 |
1521 |
1521 |
111111 |
白云区 |
|
|
[D]对于有***数字番号的部队,例如“73022部队”,应存放于“道路”工作表中,存放格式如下表。
有***数字番号的部队
|
A |
B |
C |
D |
E |
F |
G |
H |
1 |
路名 |
奇偶全 |
起始号 |
终止号 |
邮编 |
所属区县 |
段道编号 |
备注 |
2 |
部队 |
偶 |
73022 |
73022 |
111111 |
白云区 |
|
|
[E]而其他的部队如“武警部队第八中队”,则存放于“单位”工作表中,如下表所示。
不含***数字番号的部队
|
A |
B |
C |
D |
E |
F |
G |
H |
I |
1 |
单位名 |
邮编 |
所属区县 |
实际地址 |
简称1 |
简称2 |
简称3 |
段道编号 |
备注 |
2 |
武警中队第八部队 |
111111 |
白云区 |
白云路222号 |
|
|
|
|
|
对于一幅信函图像,为了得到最终的分拣信息,需要运用图像分析、汉字识别、数据库查询等方法对图像进行处理。图2是对图像信息进行处理的基本步骤,首先需要对信函图像进行分析,得到收件人地址的区域;再对地址区的汉字按行进行分割,得到多行文字;接着采用第一和第二,两种汉字分割算法对每行文字分割成单字;对于第一算法得到的单字,分别采用了L和W汉字识别算法对单字进行识别,而对于第二算法得到的单字,使用H汉字识别算法进行单字识别;最后地址库驱动算法结合L、W、H三种算法的识别结果和地址库信息获取最终分拣机需要分拣信息。在这里第一和第二汉字分割算法可以是汉字分割算法中的一种,L、W、H三种算法可以是汉字识别算法中的一种。
本发明提出的技术方案核心是地址库驱动,它的基本思想是首先建立一个包含标准地址信息条目的地址库,而对每幅信函图像由模式识别技术得到一个包含地址信息的识别结果,对于地址库中的每条查询地址信息条目,在识别结果中进行匹配,获取匹配度最高的查询地址信息条目,分析匹配度等信息,若满足要求则输出该条目对应得分拣信息,否则没有信息。对于地址库驱动,它的基本流程如图3。
地址库驱动的输入为三种汉字识别结果(分别为H、L、W算法),在图2中可以看到L、W算法使用相同的字分割算法,而H算法使用了另一种字分割算法,因此L、W算法的识别结果字符串具有相同的长度,而H算法的识别结果字符串的长度与前两种可能不同,因此首先对这三种识别结果进行对齐,产生一个字符串集D,它的每个位置都有1至3个候选字(分别为H、L、W的识别结果)。对于字符串集D,若需要进行转口分拣,则使用转口表地址条目与D进行匹配,判决得到分拣信息;若需要进行本口分拣,则使用本口地址表进行匹配,判决得到本口分拣信息;若进行本转口混合分拣,则先进行转口地址识别,若结果为本口信函时,再进行本口地址识别。
以下对于结果识别中的涉及的问题分别加以叙述。
1.识别结果对齐及识别结果字符串集的建立
为了方便地址库驱动的匹配并充分利用三种算法(H、L、W算法)的识别结果,首先需对三种识别进行综合得到一个优化的字符串集D,该集合D的每个字都有1至3个候选字,分别为(H、L、W算法的识别结果),并且候选字按优先级进行了排序。设H、L、W算法的识别结果字符串分别为Hr、Lr、Wr,字符串的长度分别为Hl、Ll、Wl,那么Ll与Wl相等,而Hl则不一定相等。为了不确保不剔除有用信息,对齐后的字符串长度Dl为Hl、Ll、Wl的最大长度,即
Dl=max(Hl,Ll)
在这里采用了Needleman-Wunsch算法对识别结果进行对齐处理,由于识别结果中Lr,Wr已对齐,因此只需要Hr与Lr或Wr对齐即可,也就是在匹配时只要Hr中的字符与Lr或Wr中同一位置的两个字符的任意一个相同,则认为Hr中的字符与Wr和Hr的字符匹配。为此对Neeldeman-Wunsch算法进行了一些改进,下面是改进的Needleman-Wunsch算法的介绍:
初始条件:M(i,0)=M(0,j)=0 (0≤i≤Ll,0≤j≤Hl)
Tx(i,0)=Tx(0,j)=0 (0≤i≤Ll,0≤j≤Hl)
Ty(i,0)=Ty(0,j)=0 (0≤i≤Ll,0≤j≤Hl)
递归条件:
其中M,Tx,Ty均为(Ll+1)*(Hl+1)的矩阵,M为匹配得分矩阵,Tx,Ty为回溯矩阵,表示M的每个单元是相邻的哪个单元得到,Tx记录x方向的位置,Ty记录方向的位置。σ为得分函数,当Hr(j)与Lr(i),Wr(i)任一个相等时,匹配得分为Mat;当不相等时,错配得分为Mis。而添加空格的惩罚得分为W。同时M每个单元的值依赖其左、左上、上三个方向的值。在这里我们设计Mat为2,Mis为-1,W为-2。从矩阵的(Ll,Hl)向前回溯到(0,0),根据回溯矩阵的指向,得到对齐后的字符串Hd,Wd,Ld,它们组成了字符串集D,且长度为Dl=max(Hl,Ll)。
2.转口地址识别
转口地址识别包含了两个部分,转口地址库的匹配与转口匹配结果的判决。
2.1.转口地址库的匹配
在图1中可以看到,转口地址表中的查询地址有三种类型:省级地址、地市级地址、县区级地址。而对于每个查询地址,都可以解析为两部分,这里称为地名和级别名。比如“北京市”,北京是地名,而市是级别名,就一条地址而言地名包含了绝大部分信息,而级别名对很多地址都是相同的,在转口表中级别名主要是“市”“省”“自治区”“县”“区”等。对于一个识别字符集D,一般来说要对每个查询地址都进行匹配,计算出它的匹配度。在这里采用了Smith-Waterman算法进行匹配得分计算,Smith-Waterman算法输入查询序列为转口表的某一条地址,而由于Smith-Waterman算法输入的库序列为有三个候选字的字符串集D,因此对Smith-Waterman算法进行了改进。
首先对改进的Smith-Waterman算法进行介绍。设转口表中的某条地址为字符串Q,其长度为Ql,下面是改进的Smith-Waterman算法的公式:
初始条件:
M(i,0)=E(i,0)=F(i,0)=0 (0≤i≤Ql)
M(0,j)=E(0,j)=F(0,j)=0 (0≤j≤Dl)
递归条件:
E(i,j)=max{E(i,j-1)-r,M(i,j-1)-q-r,0} (5)
F(i,j)=max(F(i-1,j)-r,M(i-1,j)-q-r,0} (6)
M(i,j)=max{0,M(i-1,j-1)+σ(Q(i),D(j)),E(i,j),F(i,j)} (7)
其中,M,E,F都为(Ql+1)*(Dl+1)的矩阵,σ为得分函数,q为空位开发处罚,r为空位延伸处罚,Mat匹配得分,Mis位错配得分。
对于转口地址表中的每条查询地址,通过Smith-Waterman算法计算,都从字符串集D中得到一段字符串R,该段字符串R与该条查询地址最大的匹配度,以及R在D中的位置。由于省、地市、县区三级地址之间存在从属关系,为了减少地址表的匹配次数,转口地址表的匹配流程如下图4。
经过经转口地址表的匹配,获取匹配度大于设定域值的地址组成集合DA,集合DA中包含了所有满足域值的各省、地市、县区的等不同级别的查询地址条目。根据转口地址表中地址的从属关系,若DA集合中的查询地址具有从属关系,将其组合成一个查询地址条目,比如DA集合中包含了“浙江省”“杭州市”“台州市”三条信息,则将组合成“浙江省杭州市”和“浙江省台州市”两个信息。根据从属关系组合后的集合DA称为集合DB。
2.2.转口匹配结果的判决
集合DB中每个条目称之为地址串,地址串可以由1~3个查询地址组成,比如“北京市”,“上海市浦东新区”,“浙江省杭州市余杭区”分别为1,2,3个查询地址组成的地址串。DB是包含一条或多条地址串的集合,为了从中选取正确的一条地址串,需要建立匹配结果的评价模型进行判决。对于每个查询地址,都具有以下几条信息:匹配度、匹配位置邮编。在这里如果识别结果中包含邮编,则能够提取邮编识别的信息。
首先该模型需要建立匹配度的评分原则,具体步骤如下:
[A]将查询地址分为地名+级别名两部分,长度为a1和a2
[B]查询地名和级别名分别在匹配字符串R(长度Rl)中的字符匹配个数b1和b2
[C]设定地名和级别名完全匹配的权值为c1,c2,其中c1=4,c2=1
[D]计算匹配得分
S1=(c1*b1/a1+c2*b2/a2)/(c1+c2) (9)
[E]对地名被完全匹配进行奖励
由公式可知S2为1.0时查询地址完全匹配。
[F]设定查询地址完全匹配和不完全匹配时的权值,分别为m1,m2,其中m1=100,m2=20。
区分完全匹配和不完全匹配的权值,是由于查询地址完全匹配时,我们认为该识别信息不会引起任何歧义。S3表示了每个查询地址的得分,最高分为100,由公式可知,查询地址中若地名在字符串集D中匹配S3≥16。由于一般情况下地名反应了地址信息,我们选取门限MT1=16,认为查询地址基本可信任。而当级别名完全匹配b2/a2=1,地名匹配度为b1/a1=0.5时,比如字符串集D中内容为“浙江省杭川市”,那么查询地址“杭州市”的匹配度得分S3=12,此时我们认为该条查询地址包含部分地址信息,可能通过其他信息比如邮编、其上下级地址关联、地名的排它性等因素,确定“杭州市”是正确信息,因此选取门限MT2=12,认为查询地址有可用地址信息。
[G]将S3在门限MT2及以上的查询地址组成集合DA,并由DA根据查询地址的从属关系,得到集合DB。接下来模型需要对DB中的每个地址串进行得分评价。设地址串得分为S4,其包含的最多三级查询地址(省级、地市级、县区级)的得分分别为ss1,ss2,ss3(不存在时得分为0),由以下判断准则:
(1)那么当地址串中任一查询地址得分等于或大于MT1时,
S4=ss1+ss2+ss3 (12)
(2)当地址串中存在所有查询地址得分小于MT1时(存在时必大于或等于MT2),根据查询地址在D中的匹配位置,按匹配位置是否符合中文地址的书写方式,即是否按省级、地市级、县区的顺序进行书写,取不同的值:
S4=ss1+ss2+ss3 若匹配位置符合书写顺序 (13)
S4=max(ss1,ss2,ss3) 若书写不符合书写顺序 (14)
根据以上准确,我们得到了每个地址串的得分,上述的“浙江省杭川市”得分应为S4应为112。
[H]若不存在邮编识别信息,则S4即是地址串的最终得分;若邮编识别信息存在,则将邮编识别信息加入地址串的评分体系。当邮编识别信息存在时,使用识别邮编与地址串中每级查询地址的邮编进行比对,得到能够匹配成功的最低一级查询地址,如邮编“310001”能够匹配到“浙江省杭州市”的地市级,而“320001”只能匹配到省级。对于一个地址串,若其某级查询地址邮编和邮编识别信息匹配成功,则对其得分会有一个加性的奖励。某级匹配的基本奖励值为MW,同时根据邮编匹配级别和查询地址匹配度得分S3的不同,对MW设定了五级不同的权值。由于地市级、县区级邮编匹配是4位邮编匹配,而省级邮编匹配为2位邮编匹配,所以地市级、县区级匹配比省级有更高的权值,而对于S3≥MT1的查询地址若得到邮编的验证,也应具有更高的权值。具体规则如下:
当匹配到省级时
当匹配到地市级时
当匹配到县区级时
(20)
MW的值是根据识别邮编的准确度而设定的,在这里我们设定MW为40,即若邮编与DB集合中的查询匹配时,是相对可信的。
以上建立匹配结果评价模型的整个过程,集合DB中的每个地址串经过评价都会得到相应的评价得分。那么接下来需要判决集合DB中哪个地址串正确表述信函收件人地址。这里选取了最简单的判决方式,即对地址串按评价得分、各地址串中查询地址得分、地址串在字符串集D中的匹配位置等进行排序,选取排序位置最高的1~2个地址串进行分析,得到最终结果,具体流程如图4。
说明:MT3为最终判决评价等分的域值,MT3的取值有两种情况,在邮编识别结果未综合入评价模式时,这里取MT3=MT1+1;当邮编识别结果综合入评价模型型时MT3=MW+MT1+1。
下面以几个例子说明以上的评价判决模式的判决过程和结果:
例1“上海市福州路”,“上海市”得分100>“福州”得分17,故结果为“上海市”。
例2“442000厦门电力公司”“厦门”得分16,由于邮编存在且不匹配,故据识。
例3“浙江省杭川市”,“浙江省杭州市”得分为112,故结果为“浙江省杭州市”。
例4“上海市全山区”“上海市金山区”得分为112,“上海市宝山区”得分为112,故结果为“上海市”。
3.本口地址识别
本口地址识别是利用本口地址表对识别结果字符串集D进行匹配,取得匹配地址在本口表中对应的投递支局或投递道段信息。本口地址表的存储方式,它包括道路地址和单位名称两个表,这时由于道路地址和单位名称是收件人地址的两种表达形式。本口地址识别也包含了匹配和判决两个部分。
4.在本口地址识别的基本流程如图5所示,它包括了道路地址表的匹配和单位名称表的匹配。同时每个表的匹配又分为模糊匹配和精确匹配两部分,对两个表的似然的多个匹配结果按投递信息的一致性以及邮编识别信息进行综合判断,得到分拣信息。下面逐一介绍各个步骤。
4.1.模糊匹配
这里的匹配采用两步匹配,模糊匹配和精确匹配,主要原因是精确匹配的时间消耗很大,而道路地址表和单位名称表的地址条目容量很大,为了提高速度,设计了快速的模糊匹配算法,使用该算法进行模糊匹配为精确匹配提高一个相对很小的候选集。在模糊匹配前,首先需要对道路地址表和单位名称表进行检索字的提取,检索字是从道路名或单位名中抽取的长度为3的字符串,抽取原则是表中所有抽取的检索字相互之间的相似性最小。模糊匹配利用检索字去匹配中文识别结果,采用直接搜索的快速比较算法,选取匹配度大于某一域值的条目作为精确匹配的候选集。分别对道路地址表和单位名称表进行模糊匹配得到两个候选集成为道路模糊匹配集和单位模糊匹配集。
4.2.精确匹配
在模糊匹配时,由于采用了长度为3的检索字代替了实际的道路名或单位名进行匹配,它初选出了两个模糊候选集,但是并不代表实际道路名或单位名的匹配度。精确匹配就是对模糊候选集中每个条目与字符串集D再进行一次匹配,匹配的算法采用了上文介绍的改进的Smith-Waterman算法。本口地址匹配度(Sl)的计算采用以下公式:
Sl=Match/max(Lin,Rl) (21)
其中Match表示匹配字符个数,Lin表示道路名或单位名的字符串长度,Rl为Smith-Waterman算法输出的匹配字符串R的长度。由于道路名和单位名的多样性和相互之间的相似性等因素影响,精确匹配后只选取完全匹配(Sl=1.0)的条目作为结果。那么经过两个表的匹配后,会0到多个道路名的结果和0到多个单位名的结果。产生多个道路名结果的原因是字符串集D中本身包含多条路名,比如“人民路中山路路口”包含了“人民路”和“中山路”,又比如“中山西路”包含了“中山西路”和“山西路”;而对于多个单位名也存在以上的情况。同时匹配结果中引起歧义还包括单位名称表中存在多个名字相同的单位名,它们分属于同一城市的两个不同的地方,或者存在多条同名的路。
对于匹配的道路结果,由于同一条路的不同门牌分属于不同投递支局或投递道段,故需要提取它的门牌号,这时认为门牌号是紧跟路名的一串数字,提取门牌号后会得到道路+门牌号的结果,否则只有道路。对道路+门牌号的结果在道路地址表中查询,可能会得到唯一确定的投递信息,或多条不同投递信息(多条同名路时);对于只有道路名在道路地址表中查询,可能得到唯一的投递信息(道路只属于一个投递支局或道段),多条投递信息(多个同名路),不确定投递信息(道路属于多个投递支局或道段)。以上对同一条道路查询总结了三种结果,这里分别称为确定道路匹配结果,重复道路匹配结果,不确定道路匹配结果。而单位查询只有两种情况确定单位匹配结果和不确定单位匹配结果。
4.3.精确匹配结果的判决
对于精确匹配产生的结果,由于上文分析的多种情况,需要通过邮编、匹配位置所属区县等信息进行综合判决,最终得到正确的分拣信息。
图6是当道路表或单位表精确匹配后存在有多个结果时,通过邮编匹配、所属区县匹配、匹配结果投递支局或道段相互比较等信息进行校验,剔出不准确信息或冗余信息,得到唯一的投递支局或道段。经图6的信息校验后,分别得到了由道路地址表和单位名称表得到的唯一或多个投递支局或道段,若道路名和单位名的匹配中只有一项有投递支局或道段结果,若投递支局或道段唯一,则输出该分拣信息,否则无信息。若道路名和单位名匹配都存在投递支局或道段结果,则需要通过相互的校验获得最后的分拣信息。如图7所示,若两者按投递支局或道段进行比较,若存在唯一的相同投递支局或道段,输出该投递支局或道段作为分拣信息,否则如果道路地址的匹配投递信息结果本身唯一,采用该信息作为分拣信息,其他情况下认为信息不确定而无法决定投递支局或道段。
以上介绍了地址库驱动的信函自动识别和分拣方法,它实际应用于信函分拣机的识别模块中。经实践表明,在地址库相对准确完整、识别率基本保证的情况下,该方法能够有效对识别结果进行分析校正,得到准确的结果。该方法能够成功使用的关键在于地址库的准确性,尤其是本口地址库中道路地址表信息的完整性和单位名称表的有选择性录入。同时在信函图像包含邮编和完整地址的情况下也能取得更好的结果。