具体实施方式
下面结合具体实施方式和附图对本发明进行详细描述。
如图1所示,版式文件的自动成文的方法包括以下步骤:
第一步:从版式文件中获取的文字块集合{S}中筛选出文字块属性为标题的文字块,设置为标题块集合{T},并从原集合{S}中去除;
第二步:创建文章集合{A};按文字块的信息,对标题块集合{T}进行比较、聚类;筛选出属于同一文章的文字块,得到文字块集合;验证筛选文字块集合中的文字块是否属于同一篇文章;创建相应的文章,将文字块集合设置为文章的标题块集合;将创建的文章添加到文章集合{A}中;最后得到文章集合{A};
第三步:将文字块集合{S}中的每一个文字块与文章集合{A}进行聚类,找到能跟文章集合{A}中文章匹配的文字块,设置该文字块为该文章的正文,并从文字块集合{S}中删除该文字块;
第四步:查看文字块集合{S}中是否存在文字块,若存在,为该文字块创建一篇文章,并将文字块设置为该文章的正文,将此文章添加到文章集合{A}中;
第五步:依次获取文章集合{A}中的每篇文章,设置每篇文章的其他组成信息。
根据每篇文章的不同,该篇文章可能包含着引题,标题,副题,正文,附图等相关内容,因此,其他组成信息为引题,标题,副题,附图中的一种或者全部信息。
下面结合附图2和图3对具体实施方式进行阐述:
文字块集合{S}中筛选出文字块属性为标题的文字块是现有技术中的一般操作,在此不再详述,如图2所述的文字块中,“4同胞在尼遭武装劫匪抢劫”、“中国参演部队开始回撤”、“我国铁路最大机车采购项目签订”、“质检总局工作组进驻14省区市”等都是其中的标题块。形成标题块集合{T}之后,需要按文字块的信息,对标题块集合{T}进行比较、聚类;得到文章集合{A}。
本实施例中按文字块的信息,对标题块集合{T}进行比较、聚类的具体实现方法为:
A21:创建一个新的文字块集合{R},选取标题块集合{T}中第一个文字块,设为T1,将文字块T1添加到集合{R}中,并从标题块集合{T}中删除;
A22:以文字块T1为依据,对标题块集合{T}进行遍历,筛选出标题块集合{T}中与文字块T1的近邻的文字块;筛选出来的文字块放置在文字块集合{R}中,并从标题块集合{T}中删除筛选出来的文字块;依次获取筛选出来的文字块,设置为T1,再次执行本步骤,直至文字块集合{R}中的文字块取完为止;最终得到文字块集合{R};
A23:创建一篇文章;筛选文字块集合{R},筛选出不属于同一篇文章的文字块并重新添加到标题块集合{T}中,并从文字块集合{R}中删除;检索完之后,将该文字块集合{R}设置成为文章的标题块集合;将创建的文章添加到文章集合{A}中;
A24:重复步骤A21和A23;直至标题块集合{T}中文字块取完为止;最后得到文章的集合{A}。
在本实施例中,“4同胞在尼遭武装劫匪抢劫”和“其中1名女子被枪杀”的两个属性为标题的文字块分别为T1和T2,需要计算他们之间是否近邻。
判断这两个文字块近邻的操作为:
在本实施方式中,取到的“4同胞在尼遭武装劫匪抢劫”文字块T1的左上角坐标为(31,584),右下角坐标为(271,605);文字块T1的宽度为W1=240,文字块T1的高度H1=21,文字块T1的字体大小为f1=20;
被遍历到的“其中1名女子被枪杀”文字块T2左上角坐标为(31,611),右下角坐标为(156,624);文字块T2的宽度为W2=125,文字块T2的高度H2=13,文字块T2的字体大小为f2=13;
版面平均字体大小为所有的文字块的字号的平均值,设置为AvgFontSize;现在该版面的平均字体大小为8.47;然后进行如下操作:
(4.1)通过如下公式计算文字块T1与文字块T2紧邻的有效距离:
DistThreshold=C1*AvgFontSize+max(f1,f2)/C2;
其中C1为两个文字块之间的间距系数,C2为文字块的均分系数;
(4.2)计算文字块T1与文字块T2重叠度:
水平方向上的最小重叠度:
OverlapXMin=(min(X1’,X2’)-max(X1,X2)))/min(X1’-X1,X2’-X2);
垂直方向上的最小重叠度:
OverlapYMin=(min(Y1’,Y2’)-max(Y1,Y2)))/min(Y1’-Y1,Y2’-Y2));
(4.3)计算文字块与文字块的重叠距离:
水平方向上的重叠距离DistX:
DistX=max(X1,X2)-min(X1’,X2’);
垂直方向上的重叠距离DistY:
DistY=max(Y1,Y2)-min(Y1’,Y2’);
以上max(a,b)表示取两者的较大值,min(a,b)表示取两者的较小值;
(4.4)判定如下条件是否其中一项成立:
AA.文字块T1对应的文字块的排版类型为从左到右的横排或者从右到左的横排时,且OverlapXMin>Dxmin且DistY<DistThreshold;
BB.文字块T1对应的文字块的排版类型不是从左到右的横排或者从右到左的横排时,且OverlapYMin>Dymin且DistX<DistThreshold;
其中Dxmin和Dymin为两个文字块之间水平和垂直方向上的最小近邻重叠系数;
如果以上任何一项成立,那么文字块T1与文字块T2近邻,将文字块T2从文字块集合中删除,添加到文字块集合{R}中。
在实际的应用中,可以根据实际的需要来调整Dxmin和Dymin取值的大小。在本实施方式中,此时C1取值为1.5,C2取值为4;Dxmin和Dymin取值都为0.8;计算得出的DistThreshold=17.92;OverlapXMin=9.9;DistY=6.78;经过上面方法的计算,在图2中“4同胞在尼遭武装劫匪抢劫”和“其中1名女子被枪杀”的两个属性为标题的文字块满足以上条件的AA条件;因此,计算出来的文字块T1与文字块T2是近邻的。将文字块T2从标题块{T}集合中删除,添加到文字块集合{R}中。
同样在图2中“我国铁路最大机车采购项目签订”和“总金额近300亿元其中500台机车签订合同”两个属性为标题的文字块满足以上条件的AA条件;在图3中“送去新春的间候”和“省委省政府举行外企新春联欢会王儒林走访慰问侨界知名人士”两个属性为标题的文字块满足以上条件的BB条件。都是相近邻的文字块。
对于不属于同一文章的文字块,需要进行筛选,筛选出不属于同一文章的文字块,得到文章的标题块集合步骤如下:
(5.1)获取最大字号的文字块的排版类型,若为从左到右的横排或者从右到左的横排时,按照“从低到高,从左到右”排序文字块集合{R}中的文字块;若不是,按照“从左到右,从底到高”排序文字块集合{R}中的文字块;创建一篇文章,获取文章的标题块集合{R}中最大字号的文字块;
(5.2)以最大字号的文字块为分界点,如果最大字号以前存在多个文字块那么从后往前遍历最大字号以前的多个文字块的字号是否相等;从后往前遍历的比较过程是:以最大字号的文字块前一个文字块作为当前块,遍历当前块和它前一个文字块字号是否相等;相等则将前一个块设置为当前块,继续同它的前一个文字块进行比较;不等则从集合{R}中第一个文字块到当前块的前一个文字块从集合{R}中删除,并添加到标题块集合{T}中,以保证最大字号前的文字块的字号大小相等;
(5.3)以最大字号的文字块为分界点,如果最大字号以后存在多个文字块那么从前往后遍历最大字号以后的多个文字块的字号是否相等;从前往后遍历的比较过程是:以最大字号的文字块后一个文字块作为当前块,遍历当前块和它后一个文字块字号是否相等;相等则将后一个块设置为当前块,继续同它的后一个文字块进行比较;不等则将集合{R}中当前块以后的文字块从集合{R}中删除,并添加到标题块集合{T}中,以保证最大字号后的文字块的字号大小相等。
经过上面的验证标题块集合是否属于同一篇文章,在图4中将属性为标题的“补贴4成成本缺口依然大”的文字块从标题块集合中筛选了出来,保证了标题块集合中的文字块属于同一篇文章的正确性。在实际的应用过程中,可以根据实际的情况和应用的需要来分析是否需要执行此步骤。
得到文章集合{A}后,从文字块集合{S}中获取与文章集合{A}中匹配的文字块,具体操作如下:
如图5所述的“4同胞在尼遭武装劫匪抢劫”为标题的文章中,包括:标题块、副题块以及正文块,其正文块是否属于该篇文章,需要进行判断,同样,本实施例采用以下方法进行:
(8.1)从文字块集合{S}中取第一个文字块,文字块设为T1
(8.2)从文章集合{A}中依次获取文章,设置为A,从文章A中获取该文章的标题块集合;
(8.3)依次获取文章标题块集合中的文字块,设为T2,查看文字块T1是否与文字块T2是否是近邻;近邻条件成立,记录文字块与文章的重叠度,之后重新获取文章,执行(8.2)步骤;近邻条件不成立,获取文章标题块集合中的下一个文字块继续同文字块T1比较是否为近邻关系;文章标题块集合依次遍历结束后,重新获取文章,执行(8.2)步骤;文章集合遍历结束后,执行以下步骤;
(8.4)获取与文字块T1重叠度最大的文章,设置该文字块到文章对象的正文块集合中,并且从文字块集合{S}中删除;
(8.5)从文字块集合{S}中取下一个文字块,设文字块为T1,再次从步骤(8.2)开始执行,直至文字块集合{S}中对应的文字块取完为止;
(8.6)依次从文章集合中获取每篇文章的正文块集合,如果文章的正文块集合包含多个文字块时将其合并成为一个文字块,文章正文块集合中所有文字块成为合并文字块的子块,将此合并文字块设置为文章的正文;如果文章的正文块集合只包含一块则将该正文块设置为文章的正文。
判断两个文字块近邻的方法如下:
(9.1)计算两个文字块垂直方向上的最小重叠度OverlapYMin以及水平方向上的最小重叠度OverlapXMin;
此实施例中采用以下公式进行计算:
水平方向上的最小重叠度:
OverlapXMin=(min(X1’,X2’)-max(X1,X2)))/min(X1’-X1,X2’-X2);
垂直方向上的最小重叠度:
OverlapYMin=(min(Y1’,Y2’)-max(Y1,Y2)))/min(Y1’-Y1,Y2’-Y2));
以上max(a,b)表示取两者的较大值,min(a,b)表示取两者的较小值;
(9.2)计算两个文字块垂直方向上的重叠度OverlapY和水平方向上的重叠度OverlapX;
此实施例中采用以下公式进行计算:
垂直方向上的重叠度:
OverlapY=(min(Y1’,Y2’)-max(Y1,Y2)))/(max(Y1’,Y2’)-min(Y1,Y2));
水平方向上的重叠度:
OverlapX=(min(X1’,X2’)-max(X1,X2)))/(max(X1’,X2’)-min(X1,X2));
(9.3)计算两个文字块之间近邻的距离DistThreshold;
DistThreshold=C1*AvgFontSize+f2/C2;
其中C1为两个文字块之间的间距系数,C2为文字块T2均分系数;AvgFontSize为版面的平均字体大小;f2为T2文字块的字体大小。在本实施方式中此时C1取值为2,C2取值为5;
(9.4)计算文字块与文字块的重叠距离DistX和DistY;
计算文字块与文字块的重叠距离:
水平方向上的重叠距离DistX:
DistX=max(X1,X2)-min(X1’,X2’);
垂直方向上的重叠距离DistY:
DistY=max(Y1,Y2)-min(Y1’,Y2’);
以上max(a,b)表示取两者的较大值,min(a,b)表示取两者的较小值;
(9.5)判定如下条件是否其中一项成立:
A.OverlapX>Dx且OverlapY>Dy;
B.OverlapXMin>Dxmin且OverlapY>Dy;
C.OverlapYMin>Dymin且OverlapX>Dx;
D.OverlapYMin>Dymin且OverlapXMin>Dxmin且(X2’-X2)>C*AvgFontSize;
E.文章的标题块集合中最大字号的文字块的排版类型为从左到右的横排或者从右到左的横排时,且OverlapX>0且OverlapXMin>Dxmin且DistY<DistThreshold且Y2<Y1;;
F.文章的标题块集合中最大字号的文字块的排版类型不是从左到右的横排或者从右到左的横排时,且OverlapY>0且OverlapYMin>Dymin且DistX<DistThreshold;
上述中Dx和Dy为两个文字块之间水平和垂直方向上的近邻重叠系数,Dxmin和Dymin为两个文字块之间水平和垂直方向上的最小近邻重叠系数,其中C为字体的放大系数;
如果以上条件任何一项都成立,则表示两个块近邻;近邻成立的时候记录两个文字块的重叠度;文章的标题块集合中最大字号的文字块的排版类型若为从左到右的横排或者从右到左的横排时,那么文字块T1与文章对象的重叠度为OverlapX;若不是,文字块T1与文章对象的重叠度为OverlapY。
在本实施例中,其中A条件中Dx=0.8和Dy=0.8;B条件中Dxmin=0.95,Dy=0.2;C条件中Dymin=0.95,Dx=0.2;D条件中Dxmin=0.95,Dymin=0.95,C=6;E条件中Dx=0.8;F条件中Dy=0.8;经过上面方法的计算,在图5中,正文块找到最佳的匹配的文章,该文字块成为了文章的正文。
同样,查看文字块集合{S}中是否存在文字块,若存在,为该文字块创建一篇文章,并将文字块设置为该文章的正文,将此文章添加到文章集合{A}中。
文章正文确定后,需要设置文章的其他组成信息,设置文章其他组成信息的步骤具体如下:
(10.1)从文章集合中依次获取文章;获取每篇文章的标题块集合{R};获取标题块集合{R}中最大字号的文字块,将此文字块设置为文章A的标题;
(10.2)获取文章标题对应的文字块的排版类型,若为从左到右的横排或者从右到左的横排时,按照“从低到高,从左到右”排序文字块集合{R}中的文字块;若不是从左到右的横排或者从右到左的横排时,按照“从左到右,从底到高”排序文字块集合{R}中的文字块;
(10.3)以最大字号的文字块为分界点,最大字号以前的文字块只有一个的时候,直接将该文字块设置为文章的引题;若存在多个文字块的时需合并成为一个文字块,将多个文字块设置为合并文字块的子块,并将合并文字块设置为文章的引题;最大字号以后的文字块只有一个的时候,直接将该文字块设置为文章的副题;若存在多个文字块的时需合并成为一个文字块,将多个文字块设置为合并文字块的子块,并将合并文字块设置为文章的副题;
(10.4)文章标题对应的文字块的排版类型为竖排无方向的文章,验证文章的引题,副题是否需要互换。
验证文章的引题,副题是否需要互换按照如下标准进行:
文章标题对应的文字块的排版类型为竖排无方向时,若以下任何一个条件成立的话,文章的引题,副题需要互换;文章的引题成为文章的副题,副题成为文章的引题;
(A)获取文章引题,副题对应文字块的排版类型;如果任一文字块的排版类型为“从右到左的竖排”,那么文章的引题和副题互换;
(B)设文章的正文对应的文字块为T1,左上角坐标为(X1,Y1),右下角坐标为(X1’,Y1’);标题对应的文字块为T2,左上角坐标为(X2,Y2),右下角坐标为(X2’,Y2’);若(X1+X1’)<(X2+X2’)成立,那么文章的引题和副题互换;
(C)设文章存在引题,对应的文字块为T1,左上角坐标为(X1,Y1),右下角坐标为(X1’,Y1’);文章的标题对应的文字块为T2,左上角坐标为(X2,Y2),右下角坐标为(X2’,Y2’);若Y1>Y2成立,那么文章的引题和副题互换;
(D)设文章存在副题,对应的文字块为T1,左上角坐标为(X1,Y1),右下角坐标为(X1’,Y1’);文章的标题对应的文字块为T2,左上角坐标为(X2,Y2),右下角坐标为(X2’,Y2’);若Y1<Y2成立,那么文章的引题和副题互换。
在图3和图6中,文章标题对应的文字块的排版类型为竖排无方向,经过上面的计算,实现了引题和副题的互换,保证了提取的文章标题的正确性。
本发明通过自动成文的方法,找到属于同一篇文章的引题,标题,副题以及正文等文字块,能够还原原有的文章内容之间上下文关系。
同样,本发明还提供一种版式文件自动成文系统,该成文系统包括:
文字块集合生成器,用于从版式文件中生成文字块集合;
标题块集合筛选器,用于从文字块集合中筛选出属性为标题的文字块;
文章集合生成器,用于得到文章集合,所述文章集合按文字块的信息,对标题块集合进行比较、聚类得到;
文章正文生成器,用于从文字块集合中获取与文章集合中匹配的文字块,并将此设置为文章正文;
文章其他组成信息生成器,用于从文章集合中获取文章其他信息,并进行设置。
所述文章其他信息,包括但不限于:引题,标题,副题中的一种或者全部信息。
进行匹配以及是否近邻的操作与本发明方法实施例的实现方式是一一对应的,在此不再重复叙述。
通过本发明提供的技术方案,能够找到属于同一篇文章的引题,标题,副题以及正文等文字块,能够还原原有的文章内容之间上下文关系,另外,还可以提高标引人员的工作效率,节省数据加工成本。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。