具体实施方式
为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面详细描述本申请的实施例,该实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本申请实施例是针对人工智能领域中的一种表格处理方法,该表格处理方法涉及人工智能领域,以及云技术的多种领域,例如云技术中的云计算、云服务等。
人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,人工智能企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。通过云计算,可以在很短的时间内完成对数以万计的数据的处理,从而达到强大的网络服务。
云服务是基于互联网的相关服务的增加、使用和交互模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云服务可以是AIaaS(AIas a Service,人工智能即服务),这是目前主流的一种人工智能平台的服务方式,具体来说AIaaS平台会把几类常见的AI服务进行拆分,并在云端提供独立或者打包的服务。
PDF文件中表格的绘制全部由矩形框完成,不同高度和宽度的矩形框呈现出不同的样式;例如,高度值小于1的矩形框可看做绘表的横线,宽度值小于1的矩形框可看做绘表的竖线。不同类型的表格,采用的绘制方法也不相同,PDF表格并非由单一的单元格矩形框拼接而成,而是先绘制较大的外围矩形框,然后由竖线或横线切分形成内部单元格。因此PDF原始格式中存储的矩形框数量远远少于呈现的单元格数量。
为了更好的理解及说明本申请实施例的方案,下面对本申请实施例中所涉及到的一些技术用语进行简单说明。
知识图谱(Knowledge Graph):知识图谱在图书情报界称为知识域可视化或知识领域映射地图,知识图谱是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系。知识图谱本质上是一种语义网络,一个网状知识库。知识图谱用图的形式表示知识,描述客观事物;这里的图指的是数据结构中的图,也就是由节点和边组成。知识图谱中的节点表示概念和实体,概念是抽象出来的事物,实体是具体的事物;边表示事物的关系和属性,事物的内部特征用属性来表示,外部联系用关系来表示。
三元组:三元组为知识图谱的基本组成单位,三元组可以为<实体1,关系,实体2>,三元组也可以为<实体,属性,属性值>。
本申请实施例提供的方案涉及人工智能技术,下面以具体的实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例所提供的方案可以适用于人工智能领域中任意需要进行表格处理的应用场景,通过该方案获取可携带文档格式PDF文件中至少一个表格的线条集合和文本集合;根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。如此,提升了识别各实线行距单元格对应的文本和各合并单元格对应的文本的准确度。为了更好的理解本申请实施例提供的方案,下面结合具体的一个应用场景对该方案进行说明。
在一个实施例中,图1中示出了本申请实施例所适用的一种表格处理系统的结构示意图,可以理解的是,本申请实施例所提供的表格处理方法可以适用于但不限于应用于如图1所示的应用场景中。
本示例中,如图1所示,该示例中的表格处理系统可以包括但不限于服务器101、网络102、安装了客户端程序的用户终端103。用户终端103可以通过网络102与服务器101通信。服务器101包括的数据库1011和处理引擎1012。用户终端103中包括人机交互屏幕1031(应用程序的用户界面),处理器1032及存储器1033;其中,人机交互屏幕1031用于用户通过该人机交互屏幕浏览PDF文件,处理器1032用于处理该用户的相关操作,存储器1033用于存储该PDF文件。
如图1所示,本申请中的针对表格处理方法的具体实现过程可以包括步骤S1-S7:
步骤S1,对于任一用户,可以通过用户终端103的人机交互屏幕1031浏览PDF文件,用户终端103将PDF文件发送给服务器101。
步骤S2,服务器101中的处理引擎1012获取PDF文件中至少一个表格的线条集合和文本集合;其中,服务器101中的数据库1011可以用于存储至少一个表格的线条集合和文本集合。
步骤S3,服务器101中的处理引擎1012根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;其中,服务器101中的数据库1011还可以用于存储至少一个表格的行距单元格集合和实线行距单元格集合。
步骤S4,服务器101中的处理引擎1012根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;其中,服务器101中的数据库1011还可以用于存储合并单元格集合。
步骤S5,服务器101中的处理引擎1012将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本;其中,服务器101中的数据库1011还可以用于存储各实线行距单元格对应的文本和各合并单元格对应的文本。
步骤S6,服务器101中的处理引擎1012根据至少一个表格的表格类型,将各实线行距单元格对应的文本和各合并单元格对应的文本分别转换成至少一个三元组;其中,服务器101中的数据库1011还可以用于存储至少一个三元组。
步骤S7,服务器101中的处理引擎1012将至少一个三元组发送给用户终端103。
可理解,上述仅为一种示例,本实施例在此不作限定。
其中,服务器101可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器或服务器集群。上述网络102可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、Wi-Fi及其他实现无线通信的网络。用户终端103可以是智能手机(如Android手机、iOS手机等)、平板电脑、笔记本电脑、数字广播接收器、MID(MobileInternet Devices,移动互联网设备)、PDA(个人数字助理)、台式计算机、车载终端(例如车载导航终端)、智能音箱、智能手表等,用户终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,但并不局限于此。具体也可基于实际应用场景需求确定,在此不作限定。
参见图2,图2示出了本申请实施例提供的一种表格处理方法的流程示意图,其中,该方法可以由任一电子设备执行,如可以是服务器,作为一可选实施方式,该方法可以由服务器执行,为了描述方便,在下文的一些可选实施例的描述中,将以服务器作为该方法执行主体为例进行说明。如图2所示,本申请实施例提供的表格处理方法包括如下步骤:
S101,获取可携带文档格式PDF文件中至少一个表格的线条集合和文本集合。
在一个实施例中,如图3所示,PDF文档的逻辑结构是一棵层级树,文件尾的信息中“Root”关键字标识了根节点的位置。文档目录节点是Root根节点的实际承载形式,当对象类型Type标识为“文档目录Document catalog”时,表明该对象节点为根节点,根节点包括页面和纲要等元素集合。当对象类型Type标识为“页面集合Pages”时,表明该对象节点为页面集合,页面集合含有每个页面的内容数据。其中“Contents”关键字用来标识内容数据流节点的位置,内容数据流即“stream”和“endstream”关键字中的内容。当对象类型Type标识为“文档纲要Outlines”时,表明该对象节点为文档纲要,纲要节点含有整个文档和各章节的标题。
在一个实施例中,PDF文档的存储表示通常以文本字符串和二进制数据流混合的形式,一个完整的PDF文档的物理存储格式可以划分为头格式信息、对象序列、交叉参照表和尾格式信息4个部分;其中:
(1)文件头信息采用“%PDF-1.7”的形式记录了PDF文件格式的版本,便于选择合适的解析器进行处理。
(2)Object对象序列部分是整个PDF文档的主体,包含了文本、表格、图像、视频、音频等大量数据,PDF文档解析和抽取的实质就是对Object对象序列中的特定标签进行识别和获取相应的内容。PDF中的Object对象包括布尔值(Boolean values)、整数和实数(Integer and real numbers)、字符串(Strings)、名称标识(Names)、数组(Arrays)、字典(Dictionaries)、流(Streams)和空对象(The null object)8种类型。其中“流”对象以“stream”关键字开始,“endstream”关键字结束,流数据采用二进制字节序列进行表示,长度没有限制,特别适合大规模数据的存储。PDF页面Page中的图片、表格、文本、视频和音频等大规模数据,经过合适的压缩算法处理后存储在页面的流对象中。流对象中的“Filter”关键字用来标识流数据采用的压缩算法。
(3)交叉参照表以“xref”关键字开始,由Object Number、Generation Number和Literal Keyword序列组成,通过相对于文件开始的字节偏移量对非直接对象的位置进行了记录,可以实现快速随机的对象访问需求。
(4)文件尾信息则记录了交叉参照表和特殊对象的位置,是访问整个PDF文档的入口,“%%EOF”关键字位于文件尾信息的结束位置,是整个PDF文档的结束标志,“startxref”关键字后标识了交叉参照表相对于文件开始位置的字节偏移量,“trailer”关键字是文件尾部信息的开始标志,后面采用Key-Value序列的形式,列出了文件Root根节点和其他一些描述信息。应用程序解析PDF文档时,首先从文档尾进行解析,获取交叉参照表位置和文件的Root根节点位置,然后通过Root根节点和交叉参照表就可以遍历整个PDF文档的Object对象节点。
PDF文档在解析时,要以逻辑结构为基础,先获取整个文档的页面和纲要信息,然后逐步遍历每个页面获取内容流数据,并通过压缩算法将内容字节流解压处理形成可读字符流。内容字符流中含有文本、表格等对象的关键字,识别关键字指向的元素便可以获取相应的内容,从而进一步的处理和分析内容的具体语义。
在一个实施例中,PDF文件中表格的绘制全部由矩形框完成,不同高度和宽度的矩形框呈现出不同的样式;例如,高度值小于1的矩形框可看做绘表的横线,宽度值小于1的矩形框可看做绘表的竖线。不同类型的表格,采用的绘制方法也不相同,PDF表格并非由单一的单元格矩形框拼接而成,而是先绘制较大的外围矩形框,然后由竖线或横线切分形成内部单元格。因此PDF原始格式中存储的矩形框数量远远少于呈现的单元格数量。
在一个实施例中,线条集合包括横向线条集合和纵向线条集合,其中,横向线条集合包括多个横线(横向线条),纵向线条集合包括多个竖线(纵向线条)。
S102,根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合。
在一个实施例中,行距框指PDF文件的表格绘制中由外围边框和行间距横线所围成的所有条形区域。行距框是构成表格的虚拟绘线,由于有些单元格做了合并处理,合并之后的内部绘线隐藏不见,所以表格的呈现绘线与实际绘线并不一致。绘表竖线切割行距框后的矩形框可以覆盖表格的所有单元格,获取这些单元格的位置及邻接范围是语义关系分析和内容抽取的基础。
在一个实施例中,如图4所示,外围左边界线LeftBorder,右边界线RightBorder,上边界线TopBorder和下边界BottomBorder线,以及A列和C列的单元格由数据流中具有re标识的实线矩形框绘制。单元格高度和左右边界所形成的区间为行矩框,例如一个表格形成了Row1、Row2、Row3、Row4、Row5、Row6和Row7,共7个行距框,其中,行距框Row1由A、B和C组成;行距框Row2由a1、b1和c1组成;行距框Row3由a2、b2和c2组成;行距框Row4由a3、b3和c3组成;行距框Row5由a4、b4和c4组成;行距框Row6由a5、b5和c5组成;行距框Row7由a6、b6和c6组成。行距框中的单元格采用多种方法绘制,分布在边界周围的独立的单元格通常由re标识实线矩形框绘制,位于中间区域的单元格,例如B列单元格不通过实线矩形框绘制,而是由其他单元格绘制完成后围成的区域自然形成,通过re标识只能识别独立的实线行距单元格。如图4中所示,表格的行距单元格集合包括多个行距单元格,多个行距单元格分别是A、a1、a2、a3、a4、a5、a6、B、b1、b2、b3、b4、b5、b6、C、c1、c2、c3、c4、c5和c6。
在一个实施例中,线条集合包括横向线条集合和纵向线条集合;根据线条集合,确定至少一个表格的行距单元格集合,包括:
针对一个表格,获取一个表格的左边界、右边界、上边界和下边界;
当一个表格的横向线条集合中任意两个相邻横向线条之间的纵向坐标差大于预设第一阈值,则将任意两个相邻横向线条确定为行间距横线;
根据一个表格的左边界、右边界、上边界和下边界,确定一个表格的外围边框;
根据外围边框和横向线条集合中的行间距横线,确定多个行距框;
根据多个行距框和一个表格的纵向线条集合,确定一个表格的行距单元格集合。
在一个实施例中,确定表格的行距单元格集合RowCellList,包括步骤A1-A7:
步骤A1,解析PDF文件,获取页面集合Pages,遍历页面集合获取每页Page的内容数据流ContentsStream。
步骤A2,根据数据流压缩标记Filter使用相应的算法解压数据流,获得文本字符序列ContentsString。
步骤A3,解析文本字符串ContentsString,根据re标记获取所有的绘表矩形框Rectangles(矩形框集合)。
步骤A4,遍历Rectangles,获取每个矩形框的坐标Rectangle[rx,ry,rw,rh]。如果Rectangle的宽度rw<fontsize且高度rh>fontsize,则Rectangle标记为竖线,放入竖线集合(纵向线条集合)VerticalList集合。如果Ranctangle的宽度rw>fontsize且高度rh<fontsize,则Rectangle标记为横线,放入横线集合HorizontalList[hx,hy,hw,hh]集合。如果相邻两个矩形框的ry坐标差>fontsize,则将两个坐标放入行距集合LeadingList(行间距横线)。
步骤A5,遍历Rectangles,根据每个矩形框的坐标Rectangle[rx,ry,rw,rh]探测整个表格的左边界LeftBorder,右边界RightBorder,上边界TopBorder和下边界BottomBorder,得到外围边框。
步骤A6,遍历行距集合LeadingList,根据上下左右边界将整个表格按行距切割成多行,将矩形框(行距框)RowRectangle[rx,ry,rw,rh]坐标放入行矩形框集合RowList。
步骤A7,遍历行矩形框集合RowList和竖线集合VerticalList,如果竖线Vertical与行矩形框RowRectangle交叉,获取切分后的所有矩形框放入行距单元格集合RowCellList,RowCellList中保存所有合理的行距单元格。
在一个实施例中,线条集合包括横向线条集合和纵向线条集合;根据线条集合,确定至少一个表格的实线行距单元格集合,包括:
针对一个表格,当一个表格的横向线条集合中的一个横向线条不为一个表格的顶线,则根据一个横向线条,以及与一个横向线条相邻且位于一个横向线条上方的横向线条,确定实线区域集合中的一个实线区域;
根据实线区域集合以及一个表格的纵向线条集合,确定一个表格的实线行距单元格集合。
在一个实施例中,实线行距单元格是由绘制表格的相邻横线矩形框和竖线矩形框交叉形成的区域,由于两个相邻的横线矩形框围成的区域与行距框Y坐标和高度保持一致,所以实线行距单元格便是行距单元格的实线呈现,充当独立的内容单元。
在一个实施例中,如图5所示,实线行距单元格b2位于行距框Row2下方,实线行距单元格b2由Row2和b2的下绘线围成的区域构成,Row2(也可以是Row2的下绘线,即PrevHorizontal)与b2的下绘线为左右覆盖关系。Row2的左边界超出实线行距单元格d2的下绘线的左边界,d2与Row2形成左交叉关系。
在一个实施例中,一个横向线条的坐标包括第一横向坐标、第一纵向坐标、第一宽度坐标和第一高度坐标,与一个横向线条相邻且位于一个横向线条上方的横向线条的坐标包括第二横向坐标、第二纵向坐标、第二宽度坐标和第二高度坐标;
根据一个横向线条,以及与一个横向线条相邻且位于一个横向线条上方的横向线条,确定实线区域集合中的一个实线区域,包括以下至少一项:
当第一宽度坐标大于第二宽度坐标,则确定一个实线区域的坐标包括第二横向坐标、第一纵向坐标、第二宽度坐标和第三高度坐标,第三高度坐标为第二纵向坐标与第一纵向坐标之间的差;
当第二宽度坐标大于第一宽度坐标,则确定一个实线区域的坐标包括第一横向坐标、第一纵向坐标、第一宽度坐标和第三高度坐标。
在一个实施例中,确定表格的实线行距单元格集合LineCellList,包括步骤B1-B6:
步骤B1,遍历横向线条集合HorizontalList[hx,hy,hw,hh],如果横线(横向线条)Horizontal不是表格顶线,获取该Horizontal的前邻PrevHorizontal,判断Horizontal和PrevHorizontal的位置关系。其中,前邻PrevHorizontal是与Horizontal相邻且位于Horizontal上方的横向线条;一个横向线条Horizontal的坐标包括第一横向坐标hx、第一纵向坐标hy、第一宽度坐标hw和第一高度坐标hh。
步骤B2,当PrevHorizontal[px,py,pw,ph]左右覆盖Horizontal[hx,hy,hw,hh],则将Horizontal和PrevHorizontal围成实线区域LineRectangle[hx,hy,hw,py-hy]放入线框集合LineRectList。其中,一个PrevHorizontal的坐标包括第二横向坐标px、第二纵向坐标py、第二宽度坐标pw和第二高度坐标ph。
步骤B3,当Horizontal[hx,hy,hw,hh]左右覆盖PrevHorizontal[px,py,pw,ph],则将PrevHorizontal和Horizontal围成实线区域LineRectangle[px,hy,pw,py-hy]放入线框集合LineRectList。
步骤B4,当PrevHorizontal[px,py,pw,ph]左侧超出Horizontal[hx,hy,hw,hh]左侧形成左交叉关系,则将Horizontal和PrevHorizontal围成实线区域LineRectangle[hx,hy,px+pw-hx,py-hy]放入线框集合LineRectList。
步骤B5,当Horizontal[hx,hy,hw,hh]左侧超出PrevHorizontal[px,py,pw,ph]左侧形成左交叉关系,则将PrevHorizontal和Horizontal围成实线区域LineRectangle[px,hy,hx+hw-px,py-hy]放入线框集合LineRectList。
步骤B6,遍历竖线集合VerticalList,获取竖线Vertical切分实线矩形框LineRectangle形成的单元格,放入实线行距单元格集合LineCellList,LineCellList中保存所有实线行距单元格。
S103,根据行距单元格集合和实线行距单元格集合,确定合并单元格集合。
在一个实施例中,PDF表格的合并单元格可以是不规则的合并区域,合并单元格主要由相邻的行距单元格合并而成。合并单元格在原始的PDF文件表格数据中并不存在,合并区域隐藏了行距单元格间的绘线,但在呈现上是一个整体。
在一个实施例中,如图6所示,例如合并单元格a2由4个虚线单元格构成,合并单元格b2和合并单元格b3分别由2个虚线单元格构成。
在一个实施例中,合并单元格对应的合并区域覆盖范围不固定。整个表格由规则的实线行距单元格和非固定的合并单元格构成,将全部行距单元格中的实线行距单元格去除,即将行距单元格列表RowCellList中的所有实线行距单元格LineCell去除,就可以获得组成合并单元格的虚线单元格,然后通过识别相邻关系计算合并区域的坐标。
在一个实施例中,根据行距单元格集合和实线行距单元格集合,确定合并单元格集合,包括:
针对一个表格,将一个表格的行距单元格集合中的第一行距单元格去除,得到虚线单元格集合;第一行距单元格的坐标与一个表格的实线行距单元格集合中实线行距单元格的坐标相同;
当虚线单元格集合中上下相邻的虚线单元格之间横向坐标和宽度坐标都相同,则将上下相邻的虚线单元格合并为合并单元格集合中的合并单元格。
在一个实施例中,识别表格的合并单元格集合CoverCellList,包括步骤C1-C6:
步骤C1,遍历行距单元格集合RowCellList,获取每个单元格的坐标RectCell[rx,ry,rw,rh],遍历实线框集合LineCellList,获取每个实线框的坐标LineCell[lx,ly,lw,lh],根据坐标位置,过滤掉两个集合中相同的实线单元格,RowCellList集合中剩余元素形成虚线单元格集合HideCellList。
步骤C2,按Y坐标对HideCellList集合中的单元格排序,遍历HideCellList中的每一个虚线单元格,如果上下虚线单元格X和W坐标相同且上下相邻,则上下虚线单元格合并为一个整体,所有满足条件的单元格最终形成合并单元格集合CoverCellList。
步骤C3,遍历CoverCellList,获取每个合并单元格的坐标CoverCell[cx,cy,cw,ch],遍历TextList,获取每个文字的坐标Text[tx,ty,tw,th],如果文字位于CoverCell单元格内,则文字为合并单元格文本内容,CoverCell内的所有虚线单元格HideCell也含有相同的文本内容,将CoverCell坐标及文本放入映射表Map<CoverCell,Text>。
步骤C4,遍历每个Page的Map<CoverCell,Text>,识别每页表格的左下角CoverCellLeftBottom和左上角CoverCellLeftTop。
步骤C5,如果非首页的左上角CoverCellLeftTop不含文本,则获取前一页的左下角CoverCellLeftBottom含有的文本作为单元格内容。
步骤C6,如果非尾页的左下角CoverCellLeftBottom不含文本,则获取后一页的左上角CoverCellLeftTop含有的文本作为单元格内容。
S104,将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。
在一个实施例中,将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本,包括:
针对实线行距单元格集合中的一个实线行距单元格,当文本集合中的第一文本的坐标位于一个实线行距单元格的坐标内部,则将第一文本确定为一个实线行距单元格对应的文本;
针对合并单元格集合中一个合并单元格,当根据一个合并单元格的坐标和文本集合中的第二文本的坐标,确定第二文本在一个合并单元格内,则将第二文本确定为一个合并单元格对应的文本。
在一个实施例中,在确定各实线行距单元格对应的文本和各合并单元格对应的文本之后,还包括:
进行表格关系的识别。
在一个实施例中,表格中单元格的内容并非连续完整的句子结构。表格的内容组织既可以采用带首行表头的字段式,也可以采用同行相邻衔接的键值式。
在一个实施例中,表格中单元格间的位置和管辖关系体现了内容的关联语义,通过识别表格类型及单元格位置关系可以判断内容的语义关联;进行表格关系的识别包括步骤D1-D5:
步骤D1,按X坐标对VerticalList中的元素进行排序,遍历VerticalList,获取最左边框集合LeftBroderList[lx,ly,lw,lh]和最右边框集合RightBorderList[rx,ry,rw,rh],判断左右边框的连通性识别每页中表格的数量,形成表格集合TableList。
步骤D2,按Y坐标和X坐标对TablelList中的元素进行排序,获取每个表格第一行的单元格集合HeadCellList[hx,hy,hw,hh],遍历TableList,获取每个单元格的位置坐标Cell[cx,cy,cw,ch]。
步骤D3,当一个表格Table中的每个单元格的左右边界与HeadCellList中的某一列单元格左右边界保持一致,则将该表格放入字段表格集合FieldTableList,当一个表格中只有部分单元格左右边界与HeadCellList中的某一列单元格左右边界保持一致,则将该表格放入键值表格集合MapTableList。
步骤D4,遍历FieldTableList,获取每个表格的HeadCellList,生成语义标签LabelList,其他Cell单元格内容按坐标位置依次填入Sheet表单相应的单元格中。
步骤D5,遍历MapTableList,获取表格的每一行单元格,奇数列为Key字段,偶数列为Value字段取值,按奇偶顺序依次填入Sheet表单的单元格中。
在一个实施例中,在确定各实线行距单元格对应的文本和各合并单元格对应的文本之后,还包括:
根据至少一个表格的表格类型,将各实线行距单元格对应的文本和各合并单元格对应的文本分别转换成至少一个三元组;表格类型包括字段型表格、键值型表格中的至少一项。
在一个实施例中,三元组是按顺序排列的最简单的知识单元,采用<主体语义关系客体>的形式进行组织。例如三元组<example:北京市example:面积"16410.54平方千米">三元组,表示出了“北京市的面积是16410.54平方千米”这一事实。其中的example为元素“北京市”和“面积”的命名空间的前缀缩写,完整的标识为URL形式,example:<http://www.istic.ac.cn/kos/example#>。
三元组序列可以简单有效的保存PDF文件中所有的表格信息,每个PDF文件生成一个相应名称的Turtle文件(文件扩展名为.ttl)。每个Turtle文档由“头部信息”+“三元组序列”两部分组成。在输出时,含有语义标签命名空间的头部信息放在最开始的位置。
三元组序列由FieldTableList和MapTableList中的表格内容转换而成,FieldTableList中的每行记录转换为一个实例Individual,MapTableList中的每个键值对转换为一个实例Individual。每个Individual有唯一的ID编号,可采用时间戳或顺序号。遍历FieldTableList,获取每个表格的HeadCellList,用于生成Turtle文件的语义标签Label,FieldTableList中的每行单元格使用同一ID进行组织,ID为三元组的“主体”,单元格所处的Field标识为三元组的“语义关系”,每个Cell单元格的内容作为三元组语义关系的取值Value,即三元组的“客体”。遍历MapTableList,获取表格的每一行单元格,每个键值对生成唯一标识ID作为三元组“主体”,奇数列为转换为三元组的“语义关系”,偶数列为语义关系的取值Value,即三元组的“客体”。
本申请实施例中,提升了识别各实线行距单元格对应的文本和各合并单元格对应的文本的准确度,即提升了PDF文件中表格的文本的识别准确度。
为了更好的理解本申请实施例所提供的方法,下面结合具体应用场景的示例对本申请实施例的方案进行进一步说明。
本申请实施例所提供的表格处理方法应用于人工智能领域,例如,人工智能领域中的PDF文件中表格的文本的识别,并生成相应的三元组。又例如,为翻译系统提供科技文献表格内容的识别、抽取和语义组织,并向翻译引擎提供形式化的文本内容,以确保输入信息的合理有效和结果的准确,输出含有语义关联的三元组或二维表。
参见图7,图7示出了本申请实施例提供的另一种表格处理方法的流程示意图,其中,该方法可以由任一电子设备执行,如可以是服务器,作为一可选实施方式,将以服务器作为该方法执行主体为例进行说明。如图7所示,本申请实施例提供的表格处理方法包括如下步骤:
S201,加载PDF文件,获取页面集合Pages。
S202,解析每个页面Page,获取内容数据流Content。
S203,解析数据流Content,识别绘制表格的矩形标识re、字体标识符Tf、文字标识符Tj和文字坐标标识符Tm,获取每个页面所有re标识符指代的矩形框坐标集合Rectangles。
S204,获取每个页面Tf标识符指代的字体大小fontsize、Tj指代的文字和Tm指代的坐标,得到文字集合(文本集合)TextList[tx,ty,tw,th]。
S205,遍历矩形框集合Rectangles,识别绘表竖线和横线,将竖线和横线分别归属到每个表格的纵向线条集合VerticalList[vx,vy,vw,vh]集合和每个表格的横向线条集合HorizontalList[hx,hy,hw,hh]集合。
S206,按X坐标对VerticalList中的元素(竖向线条)进行排序,遍历VerticalList,判断左右边框的连通性识别每页中表格的数量,生成表格集合TableList。
S207,按Y坐标对HorizontalList中元素(横向线条)进行排序,遍历TableList,识别每个表格Table含有的横线集合,归属到每个表格的表格横线集合TableHorizontalList中。
S208,按Y坐标对TableHorizontalList中的元素进行排序,遍历每个表格的TableHorizontalList,以表格左右边框为边界,将表格按行距划分为行矩形框集合RowRectangleList。
S209,遍历行距矩形框集合RowRectangleList(行矩形框集合RowList)和竖线集合(纵向线条集合)VerticalList,识别竖线Vertical切分RowRectangle矩形框形成的单元格,归属到集合RectangleCellList(行距单元格集合RowCellList)。
S210,遍历横线集合(横向线条集合)HorizontalList,识别上下两条水平线围成的矩形框,生成实线框集合LineRectangleList(线框集合LineRectList)。
S211,遍历实线框LineRectangleList和竖线集合VerticalList,识别竖线Vertical切分LineRectangle线框的形成单元格,归属到实线行距单元格集合LineCellList。
S212,遍历行距矩形框集合RectangleCellList和实线框集合(实线行距单元格集合)LineCellList,根据坐标位置,过滤掉矩形框RectangleCellList集合中含有的实线框单元格LineCell,剩余元素归属到虚线单元格集合HideCellList。
S213,按Y坐标对HideCellList集合中的单元格排序,遍历HideCellList,将上下相邻的单元格合并为一个整体,归属到合并单元格集合CoverCellList。
S214,遍历合并单元格集合CoverCellList和文字集合TextList,获取虚线单元格HideCell对应的文字内容,归属到边框-文字映射表Map<CoverCell,Text>。
S215,遍历每个Page的Map<CoverCell,Text>,识别跨页单元格的文字内容,更新Map<CoverCell,Text>。
S216,遍历表格集合TableList,确定每个表格的类型,其中,将字段型表格归属到集合FieldTableList,键值型表格归属到集合MapTableList。
S217,遍历表格列表FieldTableList和MapTableList,获取每个单元格的位置坐标Cell[cx,cy,cw,ch];当Cell为合并单元格,则遍历Map<CoverCell,Text>获取单元格内容;当Cell为实线行距单元格,则将位置坐标与文字集合TextList[tx,ty,tw,th]中的坐标匹配,获取文字内容,抽取结果,生成Excel表或Turtle文件。
本申请实施例中,以PDF格式的整篇文献为输入,Turtle格式的三元组序列(知识图谱)或Excel表为输出,整个处理流程经过文件解析、页面获取、内容数据流解析、绘表矩形框获取、绘线识别、行距单元格划分、合并单元格识别、单元格内容抽取和结果生成等环节,实现了对字段型表格、键值型表格以及共享型表格的识别。本申请实施例中的步骤对表格跨页分布、合并单元格、不规则单元格等情况具有良好的适应性。
基于相同的发明构思,本申请实施例还提供了一种表格处理装置,该装置的结构示意图如图8所示,表格处理装置70,包括第一处理模块701、第二处理模块702、第三处理模块703和第四处理模块704。
第一处理模块701,用于获取可携带文档格式PDF文件中至少一个表格的线条集合和文本集合;
第二处理模块702,用于根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;
第三处理模块703,用于根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;
第四处理模块704,用于将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。
在一个实施例中,线条集合包括横向线条集合和纵向线条集合;第二处理模块702,具体用于:
针对一个表格,获取一个表格的左边界、右边界、上边界和下边界;
当一个表格的横向线条集合中任意两个相邻横向线条之间的纵向坐标差大于预设第一阈值,则将任意两个相邻横向线条确定为行间距横线;
根据一个表格的左边界、右边界、上边界和下边界,确定一个表格的外围边框;
根据外围边框和横向线条集合中的行间距横线,确定多个行距框;
根据多个行距框和一个表格的纵向线条集合,确定一个表格的行距单元格集合。
在一个实施例中,线条集合包括横向线条集合和纵向线条集合;第二处理模块702,具体用于:
针对一个表格,当一个表格的横向线条集合中的一个横向线条不为一个表格的顶线,则根据一个横向线条,以及与一个横向线条相邻且位于一个横向线条上方的横向线条,确定实线区域集合中的一个实线区域;
根据实线区域集合以及一个表格的纵向线条集合,确定一个表格的实线行距单元格集合。
在一个实施例中,一个横向线条的坐标包括第一横向坐标、第一纵向坐标、第一宽度坐标和第一高度坐标,与一个横向线条相邻且位于一个横向线条上方的横向线条的坐标包括第二横向坐标、第二纵向坐标、第二宽度坐标和第二高度坐标;
第二处理模块702,具体用于执行以下至少一项:
当第一宽度坐标大于第二宽度坐标,则确定一个实线区域的坐标包括第二横向坐标、第一纵向坐标、第二宽度坐标和第三高度坐标,第三高度坐标为第二纵向坐标与第一纵向坐标之间的差;
当第二宽度坐标大于第一宽度坐标,则确定一个实线区域的坐标包括第一横向坐标、第一纵向坐标、第一宽度坐标和第三高度坐标。
在一个实施例中,第三处理模块703,具体用于:
针对一个表格,将一个表格的行距单元格集合中的第一行距单元格去除,得到虚线单元格集合;第一行距单元格的坐标与一个表格的实线行距单元格集合中实线行距单元格的坐标相同;
当虚线单元格集合中上下相邻的虚线单元格之间横向坐标和宽度坐标都相同,则将上下相邻的虚线单元格合并为合并单元格集合中的合并单元格。
在一个实施例中,第四处理模块704,具体用于:
针对实线行距单元格集合中的一个实线行距单元格,当文本集合中的第一文本的坐标位于一个实线行距单元格的坐标内部,则将第一文本确定为一个实线行距单元格对应的文本;
针对合并单元格集合中一个合并单元格,当根据一个合并单元格的坐标和文本集合中的第二文本的坐标,确定第二文本在一个合并单元格内,则将第二文本确定为一个合并单元格对应的文本。
在一个实施例中,第四处理模块704,还用于:
根据至少一个表格的表格类型,将各实线行距单元格对应的文本和各合并单元格对应的文本分别转换成至少一个三元组;表格类型包括字段型表格、键值型表格中的至少一项。
应用本申请实施例,至少具有如下有益效果:
获取PDF文件中至少一个表格的线条集合和文本集合;根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。如此,提升了识别各实线行距单元格对应的文本和各合并单元格对应的文本的准确度。
基于相同的发明构思,本申请实施例还提供了一种电子设备,该电子设备的结构示意图如图9所示,该电子设备9000包括至少一个处理器9001、存储器9002和总线9003,至少一个处理器9001均与存储器9002电连接;存储器9002被配置用于存储有至少一个计算机可执行指令,处理器9001被配置用于执行该至少一个计算机可执行指令,从而执行如本申请中任意一个实施例或任意一种可选实施方式提供的任意一种表格处理方法的步骤。
进一步,处理器9001可以是FPGA(Field-Programmable Gate Array,现场可编程门阵列)或者其它具有逻辑处理能力的器件,如MCU(Microcontroller Unit,微控制单元)、CPU(Central Process Unit,中央处理器)。
应用本申请实施例,至少具有如下有益效果:
获取PDF文件中至少一个表格的线条集合和文本集合;根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。如此,提升了识别各实线行距单元格对应的文本和各合并单元格对应的文本的准确度。
基于相同的发明构思,本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序用于被处理器执行时实现本申请中任意一个实施例或任意一种可选实施方式提供的任意一种表格处理方法的步骤。
本申请实施例提供的计算机可读存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(RandomAccess Memory,随即存储器)、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
应用本申请实施例,至少具有如下有益效果:
获取PDF文件中至少一个表格的线条集合和文本集合;根据线条集合,确定至少一个表格的行距单元格集合和实线行距单元格集合;根据行距单元格集合和实线行距单元格集合,确定合并单元格集合;将实线行距单元格集合中各实线行距单元格的坐标,以及合并单元格集合中各合并单元格的坐标,分别与文本集合中各文本的坐标相匹配,确定各实线行距单元格对应的文本和各合并单元格对应的文本。如此,提升了识别各实线行距单元格对应的文本和各合并单元格对应的文本的准确度。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机设备上运行时,使得计算机设备执行上述各个方法实施例所提供的表格处理方法。
本技术领域技术人员可以理解,可以用计算机程序来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序产品提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本申请公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本申请中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本申请中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本申请中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。