具体实施方式
为了能够实现自动识别版式文档页面中文字块的排版方式,本发明实施例提供一种排版方式识别方法,本方法中,将版式文档页面中文字块内的原始块根据原始块的序号进行排序后,计算排序后每两个相邻原始块的水平基线差值和垂直基线差值,并根据出现次数最多的水平基线差值以及出现次数最多的垂直基线差值,确定文字块内原始块的排版方式。
参见图2,本发明实施例提供的排版方式识别方法,具体包括以下步骤:
步骤10:提取版式文档页面中文字块内的原始块;
步骤11:根据提取到的各原始块的序号将提取到的原始块进行排序;
步骤12:计算排序后每两个相邻原始块的水平基线差值和垂直基线差值;
步骤13:确定计算得到的水平基线差值中出现次数最多的水平基线差值以及计算得到的垂直基线差值中出现次数最多的垂直基线差值;
步骤14:根据确定的出现次数最多的水平基线差值和出现次数最多的垂直基线差值,确定所述文字块内原始块的排版方式。
步骤11中,原始块的序号是版式文档制作者在制作版式文档时为每个原始块设置的序号,该序号标明了版式文档中的原始块的输出顺序。在根据各原始块的序号将原始块进行排序时,若版式文档制作者为原始块设置的序号依次增大,则可以按照序号从小到大的顺序将各原始块进行排序;若版式文档制作者为原始块设置的序号依次减小,则可以按照序号从大到小的顺序将各原始块进行排序。
步骤12中,两个相邻原始块的水平基线差值是指,该两个相邻原始块中一个原始块的水平基线值与另一个原始块的水平基线值的差值。两个相邻原始块的垂直基线差值是指,该两个相邻原始块中一个原始块的垂直基线值与另一个原始块的垂直基线值的差值。因此,计算两个相邻原始块的水平基线差值和垂直基线差值,其具体实现方式可以如下:
计算两个相邻原始块中前一原始块的水平基线值与后一原始块的水平基线值的差值,将该差值作为两个相邻原始块的水平基线差值;
计算两个相邻原始块中前一原始块的垂直基线值与后一原始块的垂直基线值的差值,将该差值作为两个相邻原始块的垂直基线差值。
需要说明的是,原始块的水平基线值和垂直基线值是原始块的属性值,版式文档制作者在输入文字时,会自动设置原始块的水平基线值和垂直基线值。
步骤13中,确定计算得到的水平基线差值中出现次数最多的水平基线差值以及计算得到的垂直基线差值中出现次数最多的垂直基线差值,其具体实现方式可以如下:
预先建立用于存储水平基线差值和水平基线差值出现次数的第一映射表、以及用于存储垂直基线差值和垂直基线差值出现次数的第二映射表;
在步骤12中每计算得到一个水平基线差值后,在第一映射表中查找该水平基线差值,若查找到,则将该水平基线差值对应的出现次数加1,若未查找到,则将该水平基线差值保存在第一映射表中,并设置该水平基线差值出现的次数为1;在步骤12中每计算得到一个垂直基线差值后,在第二映射表中查找该垂直基线差值,若查找到,则将该垂直基线差值对应的出现次数加1,若未查找到,则将该垂直基线差值保存在第二映射表中,并设置该垂直基线差值出现的次数为1;每个水平基线差值对应的出现次数的初始值为0;
在第一映射表中查找出现次数最多的水平基线差值,将查找到的水平基线差值确定为计算得到的水平基线差值中出现次数最多的水平基线差值;在第二映射表中查找出现次数最多的垂直基线差值,将查找到的垂直基线差值确定为计算得到的垂直基线差值中出现次数最多的垂直基线差值。
步骤14中,根据确定的出现次数最多的水平基线差值和出现次数最多的垂直基线差值确定文字块内原始块的排版方式,其具体实现方式可以如下:
若出现次数最多的水平基线差值与文字块内的原始块的宽度值(即字宽)的差值的绝对值在预先设定的第一取值范围内,并且出现次数最多的垂直基线差值与0的差值的绝对值在预先设定的第二取值范围内,则确定所述文字块内原始块的排版方式为横排;横排的排版方式可以参见图3A;
若所述出现次数最多的水平基线差值与0的差值的绝对值在预先设定的第三取值范围内,并且出现次数最多的垂直基线差值与所述文字块内原始块的高度值(即字高)的差值的绝对值在预先设定的第四取值范围内,则确定所述文字块内原始块的排版方式为竖排;竖排的排版方式可以参见图3B;
若所述出现次数最多的水平基线差值的绝对值大于所述出现次数最多的垂直基线差值的绝对值,则确定所述文字块内原始块的排版方式为横排式斜排;横排式斜排的排版方式可以参见图3C;否则,确定所述文字块内原始块的排版方式为竖排式斜排;竖排式斜排的排版方式可以参见图3D。
为了保证排版方式确定结果的精确性,第一取值范围可以为0.6-1,第二取值范围可以为0.01-0.09,第三取值范围可以为0.01-0.09,第四取值范围可以为0.6-1。当然,如果不考虑排版方式确定结果的精确性,第一取值范围、第二取值范围、第三取值范围和第四取值范围可以为不小于0的任何数值范围。
较佳的,在确定文字块内原始块的排版方式为横排之后,可以进一步确定横排的排版方向,具体如下:
确定步骤12中计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值;
若确定的差值大于0,则确定横排的排版方向为从左到右的横排;否则,确定横排的排版方向为从右到左的横排。
较佳的,在确定所述文字块内原始块的排版方式为竖排之后,可以进一步确定竖排的排版方向,具体如下:
确定文字块内包含的原始块的列数;
若所述列数为1,则确定竖排的排版方向为无方向的竖排;
若所述列数大于1,则计算相邻两列原始块中每一列原始块的序号平均值,若左列原始块的序号平均值大于右列原始块的序号平均值,则确定竖排的排版方向为从右到左的竖排;否则,确定竖排的排版方向为从左到右的竖排。
较佳的,在确定所述文字块内原始块的排版方式为横排式斜排之后,可以进一步确定横排式斜排的排版方向,具体如下:
确定步骤12中计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值;
若确定的差值大于0,则确定横排式斜排的排版方向为从左到右的横排式斜排;否则,确定横排式斜排的排版方向为从右到左的横排式斜排。
较佳的,在确定所述文字块内原始块的排版方式为竖排式斜排之后,可以进一步确定竖排式斜排的排版方向,具体如下:
确定文字块内包含的原始块的列数;
若所述列数为1,则确定竖排式斜排的排版方向为无方向的竖排式斜排;
若所述列数大于1,则计算相邻两列原始块中每一列原始块的序号平均值,若左列原始块的序号平均值大于右列原始块的序号平均值,则确定竖排式斜排的排版方向为从右到左的竖排式斜排;否则,确定竖排式斜排的排版方向为从左到右的竖排式斜排。
上述确定步骤12中计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值,其具体实现可以如下:
首先步骤12中在每计算得到一个水平基线差值后,确定该水平基线差值是否大于0,若是,则将初始值为0的水平计数器值加1,否则,将所述水平计数器值减1;在水平基线差值计算完成后,获取所述水平计数器值,将该水平计数器值确定为上述计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值。
上述确定文字块内包含的原始块的列数,其具体实现可以如下:
首先,对于提取到的原始块中每两个相邻原始块,执行如下步骤:计算后一原始块与前一原始块的垂直基线差值;确定该垂直基线差值是否大于预先设置的列间距值,若是,则判定后一原始块与前一原始块位于不同列,将初始值为1的列数计数器值加1,否则,判定后一原始块与前一原始块位于同一列;这里,为了保证统计结果的正确性,列间距值可以是不大于该后一原始块的字号的1.1倍的数值,较佳的,列间距值可以是该后一原始块的字号的1.1倍的数值。当然,列间距值还可以取其他任何大于0的数值。
最后,将列数计数器值确定为文字块内包含的原始块的列数。
下面结合具体实施例对本发明进行说明:
实施例一:
步骤1:从版式文档中提取文字块中的原始块以及原始块的信息,原始块的信息包括文字内容、字号大小、序号、水平基线、垂直基线以及该文字块的区域位置信息。
文字块中包含了一个及其以上的原始块,本发明在提取文字块时,其中的原始块是已经划分好了的。可以参考图1,图1中每一个矩形包围的文字就是一个原始块。
步骤2:对文字块中的原始块按照输出时的顺序即原始块序号进行排序。
步骤3:依次计算相邻两个原始块的水平基线差值dx和垂直基线差值dy,根据dx与0的关系,设置水平计数器hy的值,即如果dx大于0,则hy加1,否则hy减1。
图3E中矩形区域内的文字“学”的垂直基线为97.7,水平基线为522.18,左边界为97.4,上边界为506.0,右边界为117.5,下边界为525.5。
步骤4:分别统计出现次数最多的dx,将该dx记为fx,以及出现次数最多的dy,将该dy记为fy,具体如下:
首先,依次将相邻两个原始块的水平基线差值dx和垂直基线差值dy四舍五入取整;
然后,设置两个映射表(map),分别用来记录dx和dy的值以及其出现的次数;分别将dx和dy在其相应的映射表中查找,若dx或dy在映射表中未找到,则记录在映射表中,并设置其出现的次数为1;否则将其出现的次数加1;
这里,从数据结构上,映射表是一种具有键/值(key/value)结构的集合,利用key可以定位到其value,在本发明中,key相当于dx、dy,value相当于dx、dy分别出现的次数。
本发明中,采用的是映射表,也可以设置其它的数据结构集合,用来记录key值和其相应的value值。
最后,分别在dx、dy相应的映射表中查找出现次数最多的dx、dy,并分别记录为fx,fy。
步骤5:判断fx是否接近于原始块的宽度且fy是否接近于0,即fx与原始块的宽度值的差值的绝对值是否在0.6-1内、以及fy与0的差值的绝对值是否在0.01-0.09内,判断均为是,则确定排版方式为横排。
步骤6:根据水平计数器hy的值确定横排的排版方向:若hy大于0,则排版方向为从左到右的横排,否则排版方向为从右到左的横排。
实施例二:
步骤1:从版式文档中提取文字块中的原始块以及原始块的信息,原始块的信息包括文字内容、字号大小、序号、水平基线、垂直基线以及该文字块的区域位置信息。
文字块中包含了一个及其以上的原始块,本发明在提取文字块时,其中的原始块是已经划分好了的。可以参考图1,图1中每一个矩形包围的文字就是一个原始块。
步骤2:对文字块中的原始块按照输出时的顺序即原始块序号进行排序。
步骤3:依次计算相邻两个原始块的水平基线差值dx和垂直基线差值dy,根据dx与0的关系,设置水平计数器hy的值,即如果dx大于0,则hy加1,否则hy减1。
图3E中矩形区域内的文字“学”的垂直基线为97.7,水平基线为522.18,左边界为97.4,上边界为506.0,右边界为117.5,下边界为525.5。
步骤4:分别统计出现次数最多的dx,将该dx记为fx,以及出现次数最多的dy,将该dy记为fy,具体如下:
首先,依次将相邻两个原始块的水平基线差值dx和垂直基线差值dy四舍五入取整;
然后,设置两个映射表(map),分别用来记录dx和dy的值以及其出现的次数;分别将dx和dy在其相应的映射表中查找,若dx或dy在映射表中未找到,则记录在映射表中,并设置其出现的次数为1;否则将其出现的次数加1;
这里,从数据结构上,映射表是一种具有键/值(key/value)结构的集合,利用key可以定位到其value,在本发明中,key相当于dx、dy,value相当于dx、dy分别出现的次数。
本发明中,采用的是映射表,也可以设置其它的数据结构集合,用来记录key值和其相应的value值。
最后,分别在dx、dy相应的映射表中查找出现次数最多的dx、dy,并分别记录为fx,fy。
步骤5:判断fx是否接近于原始块的宽度且fy是否接近于0,即fx与原始块的宽度值的差值的绝对值是否在0.6-1内、以及fy与0的差值的绝对值是否在0.01-0.09内,判断不全为是,则继续如下判断步骤:
判断fx是否接近于0且fy是否接近于原始块的高度,即fx与0的差值的绝对值是否在0.01-0.09内、以及fy与原始块的高度值的差值的绝对值是否在0.6-1内,判断均为是,则确定排版方式为竖排;
步骤6:根据文字块内每行原始块的序号平均值确定竖排的排版方向,具体如下:
首先,统计文字块内包含的原始块的列数,具体的:对于每两个相邻原始块,计算后一原始块与前一原始块的垂直基线差值;确定该垂直基线差值是否大于后一原始块的字号的1.1倍,若是,则判定后一原始块与前一原始块位于不同列,将初始值为1的列数计数器值加1,否则,判定后一原始块与前一原始块位于同一列;将最终的列数计数器值确定为文字块内包含的原始块的列数;
然后,若文字块中的列数不大于1,则排版方向为无方向竖排;若文字块中的列数大于1行,则分别统计计算任意相邻两列原始块的序号的平均值,并判断两列的左右位置关系,若左列的序号平均值大于右列序号的平均值,则排版方向为从右到左的竖排,否则排版方向为从左到右的竖排。
实施例三:
步骤1:从版式文档中提取文字块中的原始块以及原始块的信息,原始块的信息包括文字内容、字号大小、序号、基线以及该文字块的区域位置信息。
文字块中包含了一个及其以上的原始块,本发明在提取文字块时,其中的原始块是已经划分好了的。可以参考图1,图1中每一个矩形包围的文字就是一个原始块。
步骤2:对文字块中的原始块按照输出时的顺序即原始块序号进行排序。
步骤3:依次计算相邻两个原始块的水平基线差值dx和垂直基线差值dy,根据dx与0的关系,设置水平计数器hy的值,即如果dx大于0,则hy加1,否则hy减1。
图3E中矩形区域内的文字“学”的垂直基线为97.7,水平基线为522.18,左边界为97.4,上边界为506.0,右边界为117.5,下边界为525.5。
步骤4:分别统计出现次数最多的dx,将该dx记为fx,以及出现次数最多的dy,将该dy记为fy,具体如下:
首先,依次将相邻两个原始块的水平基线差值dx和垂直基线差值dy四舍五入取整;
然后,设置两个映射表(map),分别用来记录dx和dy的值以及其出现的次数;分别将dx和dy在其相应的映射表中查找,若dx或dy在映射表中未找到,则记录在映射表中,并设置其出现的次数为1;否则将其出现的次数加1;
这里,从数据结构上,映射表是一种具有键/值(key/value)结构的集合,利用key可以定位到其value,在本发明中,key相当于dx、dy,value相当于dx、dy分别出现的次数。
本发明中,采用的是映射表,也可以设置其它的数据结构集合,用来记录key值和其相应的value值。
最后,分别在dx、dy相应的映射表中查找出现次数最多的dx、dy,并分别记录为fx,fy。
步骤5:判断fx是否接近于原始块的宽度且fy是否接近于0,即fx与原始块的宽度值的差值的绝对值是否在0.6-1内、以及fy与0的差值的绝对值是否在0.01-0.09内,判断不全为是,则:
判断fx是否接近于0且fy是否接近于原始块的高度,即fx与0的差值的绝对值是否在0.01-0.09内、以及fy与原始块的高度值的差值的绝对值是否在0.6-1内,判断不全为是,则继续如下判断步骤:
判断fx的绝对值是否大于fy的绝对值,若是,则确定为横排式斜排,否则为竖排式斜排。
步骤6:确定排版方向的类型。
若排版方式为横排式斜排,则根据水平计数器hy的值确定排版方向:若hy大于0,则排版方向为从左到右的横排式斜排,否则排版方向为从右到左的横排式斜排。
若排版方式为竖排式斜排,则根据文字块内每列原始块的序号平均值确定排版方向,具体如下:
统计文字块内包含的原始块的列数,具体实现方法与实施例二相同;
若文字块中的列数不大于1,则排版方向为无方向竖排式斜排;若文字块中的列数大于1行,则分别统计计算任意相邻两列原始块的序号的平均值,并判断两列的左右位置关系,若左列的序号平均值大于右列序号的平均值,则排版方向为从右到左的竖排式斜排,否则排版方向为从左到右的竖排式斜排。
参见图4,本发明实施例还提供一种排版方式识别装置,该装置包括:
原始块提取单元30,用于提取版式文档页面中文字块内的原始块;
原始块排序单元31,用于根据提取到的各原始块的序号将提取到的原始块进行排序;
基线差值计算单元32,用于计算排序后每两个相邻原始块的水平基线差值和垂直基线差值;
基线差值确定单元33,用于确定计算得到的水平基线差值中出现次数最多的水平基线差值以及计算得到的垂直基线差值中出现次数最多的垂直基线差值;
排版方式确定单元34,用于根据确定的出现次数最多的水平基线差值和出现次数最多的垂直基线差值,确定所述文字块内原始块的排版方式。
进一步,所述基线差值计算单元32具体可用于:
计算两个相邻原始块中前一原始块的水平基线的纵向坐标值与后一原始块的水平基线的纵向坐标值的差值,将该差值作为两个相邻原始块的水平基线差值;
计算两个相邻原始块中前一原始块的垂直基线的横向坐标值与后一原始块的垂直基线的横向坐标值的差值,将该差值作为两个相邻原始块的垂直基线差值。
进一步,所述基线差值确定单元33具体可用于:
建立用于存储水平基线差值和水平基线差值出现次数的第一映射表、以及用于存储垂直基线差值和垂直基线差值出现次数的第二映射表;
在每计算得到一个水平基线差值后,在第一映射表中查找该水平基线差值,若查找到,则将该水平基线差值对应的出现次数加1,若未查找到,则将该水平基线差值保存在第一映射表中,并设置该水平基线差值出现的次数为1;在每计算得到一个垂直基线差值后,在第二映射表中查找该垂直基线差值,若查找到,则将该垂直基线差值对应的出现次数加1,若未查找到,则将该垂直基线差值保存在第二映射表中,并设置该垂直基线差值出现的次数为1;
在第一映射表中查找出现次数最多的水平基线差值,将查找到的水平基线差值确定为计算得到的水平基线差值中出现次数最多的水平基线差值;在第二映射表中查找出现次数最多的垂直基线差值,将查找到的垂直基线差值确定为计算得到的垂直基线差值中出现次数最多的垂直基线差值。
进一步,所述排版方式确定单元34具体可用于:
若所述出现次数最多的水平基线差值与所述文字块内的原始块的宽度值的差值的绝对值在预先设定的第一取值范围内,并且出现次数最多的垂直基线差值与0的差值的绝对值在预先设定的第二取值范围内,则确定所述文字块内原始块的排版方式为横排;
若所述出现次数最多的水平基线差值与0的差值的绝对值在预先设定的第三取值范围内,并且出现次数最多的垂直基线差值与所述文字块内原始块的高度值的差值的绝对值在预先设定的第四取值范围内,则确定所述文字块内原始块的排版方式为竖排;
若所述出现次数最多的水平基线差值的绝对值大于所述出现次数最多的垂直基线差值的绝对值,则确定所述文字块内原始块的排版方式为横排式斜排;否则,确定所述文字块内原始块的排版方式为竖排式斜排。
进一步,该装置进一步包括:
第一排版方向确定单元35,用于在确定所述文字块内原始块的排版方式为横排之后,确定计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值;
若确定的差值大于0,则确定横排的排版方向为从左到右的横排;否则,确定横排的排版方向为从右到左的横排。
进一步,该装置进一步包括:
第二排版方向确定单元36,用于在确定所述文字块内原始块的排版方式为竖排之后,确定所述文字块内包含的原始块的列数;
若所述列数为1,则确定竖排的排版方向为无方向的竖排;
若所述列数大于1,则计算相邻两列原始块中每一列原始块的序号平均值,若左列原始块的序号平均值大于右列原始块的序号平均值,则确定竖排的排版方向为从右到左的竖排;否则,确定竖排的排版方向为从左到右的竖排。
进一步,该装置进一步包括:
第三排版方向确定单元37,用于在确定所述文字块内原始块的排版方式为横排式斜排之后,确定计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值;
若确定的差值大于0,则确定横排式斜排的排版方向为从左到右的横排式斜排;否则,确定横排式斜排的排版方向为从右到左的横排式斜排。
进一步,该装置进一步包括:
第四排版方向确定单元38,用于在确定所述文字块内原始块的排版方式为竖排式斜排之后,确定所述文字块内包含的原始块的列数;
若所述列数为1,则确定竖排式斜排的排版方向为无方向的竖排式斜排;
若所述列数大于1,则计算相邻两列原始块中每一列原始块的序号平均值,若左列原始块的序号平均值大于右列原始块的序号平均值,则确定竖排式斜排的排版方向为从右到左的竖排式斜排;否则,确定竖排式斜排的排版方向为从左到右的竖排式斜排。
进一步,该装置进一步包括:
计数器单元39,用于在每计算得到一个水平基线差值后,确定该水平基线差值是否大于0,若是,则将初始值为0的水平计数器值加1,否则,将所述水平计数器值减1;
相应的,所述第一排版方向确定单元35或第三排版方向确定单元37具体可用于:
获取所述水平计数器值,将该水平计数器值确定为计算得到的数值大于0的水平基线差值的个数与计算得到的数值小于0的水平基线差值的个数的差值。
进一步,所述第二排版方向确定单元36或第四排版方向确定单元38具体可用于:
对于提取到的原始块中每两个相邻原始块,计算后一原始块与前一原始块的垂直基线差值;确定该垂直基线差值大于预先设置的列间距值,则判定后一原始块与前一原始块位于不同列,否则,判定后一原始块与前一原始块位于同一列;
根据判定结果确定所述文字块内包含的原始块的列数。
综上,本发明的有益效果包括:
本发明实施例提供的方案中,提取版式文档页面中文字块内的原始块后,根据提取到的各原始块的序号将提取到的原始块进行排序,计算排序后每两个相邻原始块的水平基线差值和垂直基线差值,确定计算得到的水平基线差值中出现次数最多的水平基线差值以及计算得到的垂直基线差值中出现次数最多的垂直基线差值,并根据确定的出现次数最多的水平基线差值和出现次数最多的垂直基线差值,确定所述文字块内原始块的排版方式。可见,采用本发明能够自动识别版式文档页面中文字块内原始块的排版方式,达到本发明的发明目的。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。