具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
图1示出了本发明实施例提供的文档转换中的表格处理方法的流程。
在步骤S101中,从原文档中获取所有的线段,其中,所述线段包括有组成多边形的线段。
为便于说明,本发明实施例以原文档为PDF文档为例进行说明。
在步骤S102中,对获取的线段进行表格识别预处理,根据识别出的线段确定各个表格区域,该步骤具体的过程将在后文详述。
在步骤S103中,在划分出的各个表格区域内确定各个表格,该步骤具体的过程将在后文详述。
在步骤S104中,在确定出的表格内填充原文档中对应的内容,该步骤具体的过程将在后文详述。
在具体实施过程中,图1中的步骤S101具体包括:
从PDF文档中获取所有的线段和多边形,即解析PDF文档,从PDF文档中获取各种元素,包括文本、线段、多边形、图像等,并将获取的所有的线段存入线段集合Lines中,将获取的所有多边形存入多边形集合Polygons中。
在具体实施过程中,图1中的步骤S102具体包括:
(A)、将细的多边形识别为线段;(B)、提取多边形的边框,并去除细小的线段;(C)、从所有线段中提取水平和垂直线段;(D)、去除重叠及内含线段;(E)、将可连接的线段识别为一条线段;(F)、去除没有线段与其在两端点正交的线段;(G)、划分各个表格区域。下面将详细的描述上述各个步骤的算法:
(A)、将细的多边形识别为线段。
该步骤(A)即判断获取的多边形是否符合近似线段特征,若符合,将该多边形识别为线段;若不符合,则提取该多边形边框的线段。
在PDF文档中,有些表象是线段的对象,其实从PDF文档中提取出来是多边形。此类对象的特征是:组成多边形的线段中,有两条线段是彼此平行、且较其他的线段长的线段,而且多边形的顶点都分布在这两个线段的两个端点的附近,在坐标误差范围内,可视为重合的点(请参阅图2)。
而此类对象有可能是组成表格的元素,为了能使其表象与其描述结构对应,故要将此类多边形识别为线段。根据此类多变形的特点,本发明实施例提供算法如下:
A1、此多边形是否具有两条在平行误差范围内平行、且较其他线段特别长的线段,若有,则执行A3;否则,执行A2;
A2、判断此多边形是否是多边形集合Polygons中未处理的最后一个多边形,若是,则退出此算法,否则,取下一个多边形,执行A1;
A3、取此多边形的所有顶点,存入一个临时的顶点集合Points中;
A4、随意取顶点集合Points中的一个顶点P1,作为此轮处理的基准判断点;
A5、从顶点集合Points中剩下的顶点中再取一个顶点P2,判断P1与P2间的距离是否小于坐标误差,若是,则从顶点集合Points中删除顶点P2,否则,重复执行A5,至到将顶点集合Points中剩下的所有顶点处理一遍,然后从顶点集合Points中取出P1;
A6、再随意从顶点集合Points中剩下的顶点中取一个顶点P1`,作为此轮处理的基准判断点;
A7、从顶点集合Points中剩下的顶点中再取一个顶点P2`,判断P1`与P2`间的距离是否小于坐标误差,若是,则从顶点集合Points中删除顶点P2`,否则,重复执行A7,至到将顶点集合Points中剩下的所有顶点处理一遍,然后从顶点集合Points中取出P1`;
A8、执行A4、A5、A6、A7后,判断顶点集合Points中是否还剩有顶点,若无,则将P1、P1`作为新线段的两端点,新线段的宽度为P1与P1`横坐标之差,新线段的高度为P1与P1`纵坐标之差,新线段的颜色为此多边形的填充色,然后将此新线段存入线段集合Lines中,并从多边形集合Polygons中删除此多边形。
A9、重复A2。
在具体实施过程中,对多边形集合Polygons中的每个多边形都执行上述算法。
(B)、提取多边形的边框,并去除细小的线段。
在表格识别中,主要是用线段来进行特征分析,判断这些线段是否可以组合成表格。而多边形的边框是由线段组成的,这些线段也有可能是组成表格的线段,故要将多边形的边框中的线段提取出来存入线段集合Lines中,以便集体处理。
而细小的线段是那些宽度和高度都小于坐标误差的线段。在线段处理中,这些细小的线段是对表格识别毫无意义的,且会严重影响算法效率,故将它们删除,此(B)过程的算法如下:
B1、对多边形集合Polygons中每个多边形,从多边形中取出线段,存入线段集合Lines中,然后删除多边形集合Polygons;
B2、对线段集合Lines中每个线段,判断它的宽和高是否都小于坐标误差,如果是,则从线段集合Lines中删除此线段,否则,保留此线段。
(C)、从所有线段中提取水平和垂直线段。
根据对各种格式的文档中表格特征的分析可知,文档中的表格几乎都是由水平和垂直的线段组合而成的。故对其他非水平和非垂直的线段可以删除,只提取水平线段和垂直线段。此过程算法如下:
C1、构造一个新的线段集合HLines,里面存放水平线段;在构造一个新的线段集合VLines,里面存放垂直线段;
C2、对线段集合Lines中每个线段,判断在平行误差范围内,此线段是否和水平线平行,若平行,则将此线段存入水平线段集合HLines中,否则,判断在垂直误差范围内,此线段是否和水平线垂直,若垂直,则将此线段存入垂直线段集合VLines中,否则,不处理。
(D)、去除重叠及内含线段。
其中,重叠线段定义为:在坐标误差范围内,两个线段的两个端点是重合的。
内含线段定义为:在坐标误差范围内,此线段的两个端点都在另一个线段上。
几个重叠的线段在表象上,其实是一条线段,故为了跟表象相符,应该只取其中的一个线段,而将其他的线段删除,当一个线段处在另一个线段里时,其实在表象上,它们也只是一个线段,故为了跟表象相符,应该删除处在另外线段中的线段。此过程算法如下:
D1、取水平线段集合HLines中第一条线段L1,作为此轮处理的基准判断线段;
D2、从水平线段集合HLines中剩下的线段中取一条线段L,判断L1是否和L2重合,或者L1是否包含L,若是,则删除L,否则,重复B,至到水平线段集合HLines中剩下的线段都被处理过;
D3、取水平线段集合HLines中第二条线段L2,作为此轮处理的基准判断线段。执行D2;
D4、......;
D5、取水平线段集合HLines中第N条线段LN,作为此轮处理的基准判断线段。执行B;
D6、......;
D7、取水平线段集合HLines中最后一条线段LL,作为此轮处理的基准判断线段。执行B;
D8、算法结束。
同样对垂直线段集合VLines中的线段做上述同样处理。
(E)、将可连接的线段识别为一条线段。
可连接的线段的定义为:在斜率误差范围内,两条线段斜率相等,在坐标误差范围内,两条线段的首尾端点重合或两条线段部分重合,则这两条线段和连接在一起,作为一条线段。此过程算法如下:
E1、取水平线段集合HLines中一条线段L1,作为此轮处理的基准判断线段;
E2、取下一条线段L2,判断L1与L2是否可连接,若能连接,则用这两条线段构造一条新的线段LX,并删除此两条线段,并用新的线段LX取代L1;若L2是最后一条未处理线段,则重复E1;若L1是最后一条作为基准线段的的线段,则执行E4D
E3、重复E2。
E4、结束算法。
同样对垂直线段集合VLines中的线段做上述同样处理。
(F)、去除没有线段与其在两端点正交的线段。
根据组成表格的线段的条件,只有在两端点有与其正交的线段的线段才可能是组成表格的线段。故应去除没有线段与其在两端点正交的线段。该过程的算法如下:
F1、取水平线段集合HLines中一条线段L1,作为此轮处理的基准判断线段。并创建两个标志变量FA,FB,FA表示线段L1的A端点是否有交点,FB表示线段L1的B端点是否有交点,初始化都为false;
F2、取垂直线段集合VLines中一条线段L2;
F3、FA是否为false,若是,则执行F4。否则,执行F6;
F4、判断L1的A端点是否在L2上,若在,则执行F5;
F5、设置FA为true,并判断FB是否为true,若是,则重复F1,至到水平线段集合HLines中每条线段处理完毕,然后算法结束,否则重复F2,至到垂直线段集合VLines中每条线段都处理过。若至到垂直线段集合VLines中每条线段都处理过,且FA和FB不都为true,则删除L1;
F6、FB是否为false,若是,则执行F7;
F7、判断L1的B端点是否在L2上,若在,则执行F8;
F8、设置FB为true,并判断FA是否为true,若是,则重复F1,至到水平线段集合HLines中每条线段处理完毕,然后算法结束。否则重复F2,至到垂直线段集合VLines中每条线段都处理过。若至到垂直线段集合VLines中每条线段都处理过,且FA和FB不都为true,则删除L1。
同理,对垂直线段集合VLines中每条线段进行如上类似处理。
(G)、划分各个表格区域。
此算法如下:
G1、构造一个矩形区域集合Areas;
G2、取水平线段集合HLines中一条线段,在垂直线段集合VLines中寻找与它在端点相交的线段,根据此两条线段的坐标,可以构造一个矩形区域A,此矩形区域的左上点是这两线段的四个端点中最小点,矩形区域的右下点是这两线段的四个端点中最大点。将此矩形区域存入矩形区域集合Areas中;
G3、重复G2,至到不再有更多的矩形区域可以构造出来。
继续回到图1中,其中,步骤S103,在各个表格区域内识别各个表格。
需要说明的是,以下算法中的area为矩形区域集合Areas中的一个,为了识别出所有的表格,需要对矩形区域集合Areas中的每个矩形区域area进行以下的算法。
在本发明实施例中,用于描述表格的数据结构的属性包括:一个用于存储表格的基础单元格的二维数组,一个用于存储表格的逻辑单元格的一维链表,还有表格的位置及高宽信息。
步骤S103就是将表格区域中的一个表格,用此数据结构描述出来。故要获取表格的上述属性,才能完整的描述一个表格。
该过程主要包括以下的步骤:(H)、提取一个表格区域内的所有线段;(I)、去除在两端无交点的线段;(J)、确定表格的基础单元格,及行数,列数;(K)、确定表格的坐标位置及宽高;(L)、确定表格的逻辑单元格。下面详细的描述上述的步骤。
(H)、提取一个表格区域内的所有线段。
此过程算法如下:
H1、构造水平线段临时集合THLines,和垂直线段临时集合TVLines;
H2、对水平线段集合HLines中每条线段HL,根据坐标位置,在坐标误差范围内,判断HL是否在area中,若在,则将HL存入水平线段临时集合THLines;
H3、对垂直线段集合VLines中每条线段VL,根据坐标位置,在坐标误差范围内,判断VL是否在area中,若在,则将VL存入水平线段临时集合TVLines。
(I)、去除在两端无交点的线段。
去除水平线段集合HLines中和垂直线段集合VLines中,在两端无交点的线段,该算法在上文有述,此处不再赘述。
(J)、确定表格的基础单元格,及行数,列数。
该过程算法如下:
J1、在水平线段临时集合THLines中,统计所有的水平线段的纵坐标的不同个数M,则表格的行数就是M-1;
J2、在垂直线段临时集合TVLines中,统计所有的垂直线段的横坐标的不同个数N,则表格的列数就是N-1;
J3、统计水平线段临时集合THLines中的水平线段与垂直线段临时集合TVLines中的垂直线段的交点坐标,并存入一个二维数组中;
J4、则此表格的基础单元格的个数为(M-1)×(N-1),每个逻辑单元格的坐标信息都是对应编号的交点的坐标。宽度是对应交点和下一个水平相邻交点的横坐标之差,高度是对应交点和下一个垂直相邻交点的纵坐标之差。
(K)、确定表格的坐标位置及宽高。
此过程算法如下:
K1、表格的坐标既最小编号的交点的坐标;
K2、宽度是最大编号交点和最小编号交点的横坐标之差,高度是最大编号交点和最小编号交点的纵坐标之差。
(L)、确定表格的逻辑单元格。
此过程算法如下:
L1、计算每个基础单元格四个边框的中点坐标,并根据组成表格的实际线段的坐标,判断每个中点是实中点,还是虚中点,实中点就是处在实际线段上的中点,虚中点就是不处在实际线段上的中点;
L2、根据虚中点,合并相邻的基础单元格为一个逻辑单元格。
继续回到图1,其中,步骤S104确定表格的各个逻辑单元格的内容,具体包括:
将从PDF文档中解析的所有元素,与每个逻辑单元格对比,在坐标误差范围内,判断此元素是否在此逻辑单元格中,若在,则将此元素存入逻辑单元格的内容列表中,否则,不处理。
本发明实施例还提供一种文档转换中的表格处理装置,请参阅图3。
其中,线段获取模块31,用于从原文档中获取所有的线段,其中,所述线段包括有组成多边形的线段;
表格区域确定模块32,用于对获取的线段进行表格识别,根据识别出的线段确定各个表格区域;
表格确定模块33,用于在划分出的各个表格区域内确定各个表格;
表格填充模块34,用于在确定出的表格内填充原文档中对应的内容。
所述线段获取模块31,还用于,获取原文档中的所有线段和多边形;判断获取的多边形是否符合近似线段特征,若符合,将该多边形识别为线段;若获取的多边形不符合近似线段特征,则提取该多边形边框的线段。
所述表格区域确定模块32,还用于,删除重叠及内含线段,以及在两端点无正交的线段;将可连接的线段识别为同一条线段;在剩余的线段中获取水平和垂直线段;根据获取的线段划分各个表格区域。
所述表格确定模块33还用于,获取一个表格区域内的所有线段;删除在两端无交点的线段;确定所述表格的基础单元格、行数以及列数;确定所述表格的坐标位置及宽高;确定所述表格的逻辑单元格。
所述表格填充模块34,还用于,从原文档中解析获取所有元素;将获取的元素与每个表格中的逻辑单元格进行对比,在坐标误差范围内,判断获取的元素是否在对应表格中的逻辑单元格中;若在,则将获取的元素填充进所述逻辑单元格的内容列表中。
本发明实施例通过从原文档(PDF格式)中获取所有的线段,包括多边形的线段,对获取的线段进行表格识别预处理,根据识别出的线段确定各个表格区域,在划分出的各个表格区域内确定各个表格,在确定出的表格内填充原文档中对应的内容,将PDF文档中由很多无逻辑关系的线段或多边形组成的表象为表格的对象,识别为能用逻辑关系的结构描述的表格对象,提高了转换出的文档的排版及编辑效果。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而这些改进和变换都应属于本发明所附权利要求的保护范围。