数据抽取方法、装置及设备、存储介质与流程

文档序号:22627605发布日期:2020-10-23 19:36阅读:141来源:国知局
数据抽取方法、装置及设备、存储介质与流程

本发明涉及数据处理技术领域,尤其涉及的是一种数据抽取方法、装置及设备、存储介质。



背景技术:

随着我国信息化建设的不断推进和深化,政府机关、企业集团及各行业业务系统的建设已经达到了一定的水平。数据的存储方式也多种多样,可以存储在不同类型的数据库,也可以存储在文件中。对于一些文件比如excel文件来说,文件中具有至少一个表单,表单内的数据一般是人工填写,同一个业务系统中,可能因为地区或者部门不同,表单格式也不尽相同,就会有海量不同结构的excel文件。

在应对一些业务需求时,需要将海量不同结构的excel文件中的数据按类别存储到相应的数据库表中,比如,从各种不同结构的excel文件中抽取出气象类数据存储到一个数据库表中,从各种不同结构的excel文件中抽取出蔬菜类数据存储到另一个数据库表中,这就可以采用etl技术来实现。etl是数据集成领域的落地技术,区别于传统数据交换,etl在可完成基本数据交换(抽取、传输、装载)的前提下,对数据的转换(即数据的按需加工处理)提供更易用和更强大的支持,使数据在不同业务之间流动的同时,保证各业务获取到的数据是准确、及时、符合业务需求的。

在现有的etl技术中,应对海量不同结构的excel文件的抽取方案,大多都需要人工去识别excel文件中每一个表单格式,针对每个表单,根据表单格式配置相应的抽取方式,再对表单中的数据进行抽取,费时费力。



技术实现要素:

有鉴于此,本发明提供一种数据抽取方法、装置及设备、存储介质,无需针对每个表单配置相应的抽取方式,可减少配置所需的工作量。

本发明第一方面提供一种数据抽取方法,包括:

从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,每一表单模板具有对应的数据库表,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息;

依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据;

将所述目标数据抽取至所述目标表单模板对应的数据库表中。

根据本发明的一个实施例,从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,包括:

遍历所述表单中的每一行单元格:

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板;

若查找到,则确定该行单元格为所述表单的表单头部,并将查找到的表单模板确定为所述目标表单模板。

根据本发明的一个实施例,所述表单的表单头部的数量为1个;该方法进一步包括:

当确定该行单元格为所述表单的表单头部时,结束对所述表单的遍历。

根据本发明的一个实施例,该方法进一步包括:

若未查找到,则检查当前对所述表单的遍历次数是否达到最大遍历次数,如果是,则结束对所述表单的遍历,否则继续对所述表单的遍历。

根据本发明的一个实施例,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板进一步为:

在该行中每个单元格的数据类型为文本类型时,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,

所述字段信息至少包括字段名称;

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板,包括:

针对所述已配置的表单模板中的每一表单模板:

从该行单元格中确定出参考单元格,所述参考单元格的内容与该表单模板中的任一字段名称匹配;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,所述参考单元格的内容与该表单模板中的任一字段名称匹配是指:

所述参考单元格的内容与该表单模板中的任一字段名称相同;

或者,所述参考单元格的内容与该表单模板中的任一字段名称为近义词或同义词,所述近义词或同义词是通过设定的匹配算法确定的。

根据本发明的一个实施例,

所述表单模板还包括设定匹配度;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板,包括:

计算所述参考单元格的个数与该表单模板中字段信息对应的字段个数之间的比值;

若该比值大于该表单模板中的设定匹配度,则确定该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,

所述字段信息至少包括字段名称;

所述表单模板还包括各字段信息对应的字段顺序、以及至少一个字段信息对应的转换规则,所述字段顺序是依据所述目标表单模板对应的数据库表的表单头部确定的;

依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据,包括:

按照所述目标表单模板中的字段顺序对所述表单中各目标单元格所在列进行排序,所述目标单元格属于所述表单的表单头部,且目标单元格的内容与所述目标表单模板中的任一字段名称匹配;

针对所述表单中位于所述表单头部之后的每一行,确定出该行中位于各目标单元格所在列的单元格内容,作为一条目标数据。

根据本发明的一个实施例,

所述确定出该行中位于各目标单元格所在列的单元格内容之前,该方法还包括:若该行中存在合并单元格,则将该合并单元格进行拆分,并将该合并单元格的内容填入至拆分出的所有单元格中;

所述确定出该行中位于各目标单元格所在列的单元格内容之后,该方法还包括:按照所述目标表单模板中的转换规则对确定出的至少一个单元格内容进行转换,将得到的单元格内容作为一条目标数据。

根据本发明的一个实施例,所述方法进一步包括:

在需对任一数据库表进行表单模板配置时,检查指定数据库中是否存在该数据库表与需配置的表单模板之间的对应关系,如果不存在,则继续进行该表单模板的配置,并将该数据库表与该表单模板的对应关系存储至该指定数据库中。

根据本发明的一个实施例,从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,进一步为:

在获得所述表单所存储的数据类别的情况下,从用于存储该类数据的数据库表被配置的表单模板中获取与待处理的表单匹配的目标表单模板。

根据本发明的一个实施例,所述表单是待处理文件中的任一个表单,所述待处理文件的格式为指定文件格式,所述待处理文件包含至少一个表单。

本发明第二方面提供一种数据抽取装置,包括:

目标表单模板确定模块,用于从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,每一表单模板具有对应的数据库表,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息;

目标数据确定模块,用于依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据;

数据抽取模块,用于将所述目标数据抽取至所述目标表单模板对应的数据库表中。

根据本发明的一个实施例,所述目标表单模板确定模块从已配置的表单模板中获取与待处理的表单匹配的目标表单模板时,具体用于:

遍历所述表单中的每一行单元格:

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板;

若查找到,则确定该行单元格为所述表单的表单头部,并将查找到的表单模板确定为所述目标表单模板。

根据本发明的一个实施例,所述表单的表单头部的数量为1个;所述目标表单模板确定模块进一步用于:

当确定该行单元格为所述表单的表单头部时,结束对所述表单的遍历。

根据本发明的一个实施例,所述目标表单模板确定模块进一步用于:

若未查找到,则检查当前对所述表单的遍历次数是否达到最大遍历次数,如果是,则结束对所述表单的遍历,否则继续对所述表单的遍历。

根据本发明的一个实施例,所述目标表单模板确定模块在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板时,进一步用于:

在该行中每个单元格的数据类型为文本类型时,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,

所述字段信息至少包括字段名称;

所述目标表单模板确定模块在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板时,具体用于:

针对所述已配置的表单模板中的每一表单模板:

从该行单元格中确定出参考单元格,所述参考单元格的内容与该表单模板中的任一字段名称匹配;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,所述参考单元格的内容与该表单模板中的任一字段名称匹配是指:

所述参考单元格的内容与该表单模板中的任一字段名称相同;

或者,所述参考单元格的内容与该表单模板中的任一字段名称为近义词或同义词,所述近义词或同义词是通过设定的匹配算法确定的。

根据本发明的一个实施例,

所述表单模板还包括设定匹配度;

所述目标表单模板确定模块依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板时,具体用于:

计算所述参考单元格的个数与该表单模板中字段信息对应的字段个数之间的比值;

若该比值大于该表单模板中的设定匹配度,则确定该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。

根据本发明的一个实施例,

所述字段信息至少包括字段名称;

所述表单模板还包括各字段信息对应的字段顺序、以及至少一个字段信息对应的转换规则,所述字段顺序是依据所述目标表单模板对应的数据库表的表单头部确定的;

所述目标数据确定模块依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据时,具体用于:

按照所述目标表单模板中的字段顺序对所述表单中各目标单元格所在列进行排序,所述目标单元格属于所述表单的表单头部,且目标单元格的内容与所述目标表单模板中的任一字段名称匹配;

针对所述表单中位于所述表单头部之后的每一行,确定出该行中位于各目标单元格所在列的单元格内容,作为一条目标数据。

根据本发明的一个实施例,

所述目标数据确定模块确定出该行中位于各目标单元格所在列的单元格内容之前,还用于:若该行中存在合并单元格,则将该合并单元格进行拆分,并将该合并单元格的内容填入至拆分出的所有单元格中;

所述目标数据确定模块确定出该行中位于各目标单元格所在列的单元格内容之后,还用于:按照所述目标表单模板中的转换规则对确定出的至少一个单元格内容进行转换,将得到的单元格内容作为一条目标数据。

根据本发明的一个实施例,所述装置进一步包括:

配置模块,用于在需对任一数据库表进行表单模板配置时,检查指定数据库中是否存在该数据库表与需配置的表单模板之间的对应关系,如果不存在,则继续进行该表单模板的配置,并将该数据库表与该表单模板的对应关系存储至该指定数据库中。

根据本发明的一个实施例,所述目标表单模板确定模块从已配置的表单模板中获取与待处理的表单匹配的目标表单模板时,进一步用于:

在获得所述表单所存储的数据类别的情况下,从用于存储该类数据的数据库表被配置的表单模板中获取与待处理的表单匹配的目标表单模板。

根据本发明的一个实施例,所述表单是待处理文件中的任一个表单,所述待处理文件的格式为指定文件格式,所述待处理文件包含至少一个表单。

本发明第三方面提供一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例中所述的数据抽取方法。

本发明第四方面提供一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例中所述的数据抽取方法。

本发明实施例具有以下有益效果:

本发明实施例中,预先配置好多个数据库表对应的表单模板,每一表单模板包含对应数据库表中表单头部的至少一个字段的字段信息,在需要抽取某个表单中的数据时,可以从已配置的表单模板中获取与表单相匹配的目标表单模板,基于该目标表单模板中的字段信息从表单中确定出与字段信息对应的数据,得到目标数据,将目标数据抽取至该目标表单模板对应的数据库表中,上述方式中,对于不同结构的表单来说,在匹配到同一表单模板的情况下,就可以基于同一表单模板来完成数据的抽取,不需要人工识别表单格式,也不需要为每个表单配置相应的抽取方式,可大大降低用户配置所需的工作量与时间。

附图说明

图1是本发明一实施例的数据抽取方法的流程示意图;

图2是本发明另一实施例的数据抽取方法的流程示意图;

图3是本发明一实施例的数据抽取装置的结构框图;

图4是本发明一实施例的电子设备的结构框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种对象,但这些信息不应限于这些术语。这些术语仅用来将同一类型的对象彼此区分开。例如,在不脱离本发明范围的情况下,第一对象也可以被称为第二对象,类似地,第二对象也可以被称为第一对象。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

下面对本发明实施例的数据抽取方法进行更具体的描述,但不应以此为限。在一个实施例中,参看图1,一种数据抽取方法,应用于电子设备,该方法可以包括以下步骤:

s100:从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,每一表单模板具有对应的数据库表,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息;

s200:依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据;

s300:将所述目标数据抽取至所述目标表单模板对应的数据库表中。

本发明实施例中,数据抽取方法的执行主体为电子设备。电子设备比如可以是计算机设备或由多台计算机设备组成的服务器,当然,电子设备的具体类型不限于此,具有一定的数据处理能力即可。

本发明实施例中,可以改进以由etl应用程序,或者开发新的etl应用程序,使得电子设备在运行该etl应用程序时,可以实现上述的数据抽取方法。

步骤s100中,从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,每一表单模板具有对应的数据库表,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息。

不同数据库表可以用于存储不同类数据,比如一个数据库表用于存储气象类数据,还有一个数据库表用于存储蔬菜类数据等,当然还可以有其他数据库表用于存储其他类数据,比如人员类数据等。而每一类数据都有可能存在于海量不同结构的文件如excel文件中,因而需要先从各不同结构的excel文件中抽取出相应的数据。

可以预先为每一数据库表配置对应的表单模板,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息,数据库表的表单头部指示了待存储至数据库表中的数据所包含的字段以及字段顺序。每一数据库表可以对应于一个或多个表单模板,其中,对应于多个表单模板的情况,举例来说可以是,一个数据库表的表单头部包含5个字段,该数据库表既可以存储包含5个字段的数据,又可以存储包含4个字段的数据,则可以为其配置包含5个字段的字段信息的表单模板和包含4个字段的字段信息的表单模板。

可以根据数据存储需求(比如待存储数据的字段),自动地从存储有某一类数据的文件比如存储有蔬菜类数据的excel文件中获取出所需的字段信息,根据获取出的字段信息生成相应的表单模板。或者,可以由用户通过手动配置方式来生成所需的表单模板。

表单模板主要可以包括设定匹配度proportion、最大遍历次数maxtraversetimes、字段信息columns等几个重要属性,其中,字段信息columns可以包括字段类型type、字段名称name、时间格式format、字段长度length、字段精度precision等,可参看如下表(1),当然,实际并不局限于此。

在一个例子中,用户可以根据某个库表整理出该库表待存储数据的字段,并配置好相应的字段信息,将字段信息填入至etl程序页面中,进而自动生成json格式的表单模板,作为该库表对应的表单模板。以表(1)中的字段信息columns为例,在表单模板中,字段信息columns可以作为字段类型type、字段名称name、时间格式format、字段长度length、字段精度precision的父级参数。

从已配置的表单模板中获取与待处理的表单匹配的目标表单模板时,可以确定出表单的表单头部(可以预先指定或者根据表单模板确定出),根据表单头部中字段的字段信息来从已配置的表单模板中确定出匹配的目标表单模板,比如,表单的表单头部中存在目标表单模板中所有或大部分字段信息对应的字段。当然,具体不限于此,在后续的内容中将会对此进行更详细的描述。

在一个实施例中,该方法进一步包括:在需对任一数据库表进行表单模板配置时,检查指定数据库中是否存在该数据库表与需配置的表单模板之间的对应关系,如果不存在,则继续进行该表单模板的配置,并将该数据库表与该表单模板的对应关系存储至该指定数据库中。

指定数据库可以是任意被指定的数据库,具体不做限定。

将已配置的数据库表与表单模板之间的对应关系存储在指定数据库中,后续在需要为某个数据库表配置对应的表单模板时,只需检查指定数据库中是否存在该数据库表与该表单模板的对应关系即可,不存在,则说明之前没有为该数据库表配置过对应的表单模板,此时再进行该表单模板的配置,并将该数据库表与该表单模板的对应关系存储至该指定数据库中。

可选的,如果指定数据库中存在该数据库表与需配置的表单模板之间的对应关系,则无需重复配置,后续可直接调用该表单模板。如此,可以避免相同表单模板的重复配置。

在一个实施例中,已配置的表单模板中获取与待处理的表单匹配的目标表单模板,进一步可以为:在获得所述表单所存储的数据类别的情况下,可以从用于存储该类数据的数据库表被配置的表单模板中获取与待处理的表单匹配的目标表单模板。换言之,后续涉及的已配置的表单模板就是用于存储该类数据的数据库表被配置的表单模板。

比如,表单存储的是蔬菜类数据,则从用于存储蔬菜类数据的数据库表被配置的表单模板中获取与待处理的表单匹配的目标表单模板。

在一个实施例中,所述表单是待处理文件中的任一个表单,所述待处理文件的格式为指定文件格式,所述待处理文件包含至少一个表单。

指定文件格式比如可以为xls格式、xlsx格式,相应的,待处理文件为excel文件,一个excel文件可以包含一个或多个sheet,所述表单可以是excel文件中的任一个sheet。

可选的,电子设备可以从保存有各种类型的文件的文件夹中,通过指定的正则表达式查找出文件名与正则表达式匹配的excel文件,每次从中读取出一个或多个excel文件(具体读取的个数可以指定,具体读取的顺序不作限定),并遍历读取出的excel文件中的sheet,每次遍历到的sheet作为待处理的表单。本例中,正则表达式比如可以为“.*xlsx”,表示读取所有后缀为xlsx的excel文件,当然,此处只是举例,具体不限于此。

步骤s200中,依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据。

字段信息可以包括字段名称,可以从表单中确定出与字段名称对应的数据,得到目标数据。比如确定出的每个目标数据都包含目标表单模板中的各字段名称。

举例来说,目标表单模板中比如可以包括3个字段的字段名称,包括天气、温度、统计时间;表单的表单头部也包含天气、温度、统计时间这三个字段,还包含其他两个无关字段a和b,相应的,每条数据都包含这些字段,具体来说,表单可参看如下表(2):

比如,可以确定出以下三条目标数据:

晴、21.5、2020-05-23;

雨、18、2020-05-24;

晴、28、2020-05-25。

步骤s300中,将所述目标数据抽取至所述目标表单模板对应的数据库表中。

可以在确定出所有目标数据之后,将所有目标数据抽取至目标表单模板对应的数据库表中;或者,也可以每确定出一条目标数据,便将该目标数据抽取到目标表单模板对应的数据库表中,具体不作限定。

在确定出数据之后,也可以按照设定的转换规则对数据进行一定的转换之后,再存储到目标表单模板对应的数据库表中。比如,可以将数据中各字段按照数据库表中表单头部的字段顺序进行排序,将排序后的数据抽取到数据库表中,当然这里只是举例,转换规则具体不限于此。转换规则可以预先设置在表单模板中。

本发明实施例中,预先配置好多个数据库表对应的表单模板,每一表单模板包含对应数据库表中表单头部的至少一个字段的字段信息,在需要抽取某个表单中的数据时,可以从已配置的表单模板中获取与表单相匹配的目标表单模板,基于该目标表单模板中的字段信息从表单中确定出与字段信息对应的数据,得到目标数据,将目标数据抽取至该目标表单模板对应的数据库表中,上述方式中,对于不同结构的表单来说,在匹配到同一表单模板的情况下,就可以基于同一表单模板来完成数据的抽取,不需要人工识别表单格式,也不需要为每个表单配置相应的抽取方式,可大大降低用户配置所需的工作量与时间。

比如,另一表单如下表(3):

对比表(2)与表(3)来说,两者的结构是不同的,具体是两者中“天气”和“无关字段a”的顺序对调了,但是,两者中待抽取字段“天气”、“温度”、“统计时间”是相同的,可以匹配到同一表单模板,基于同一表单模板来完成数据的抽取,匹配过程也是自动的,不需要分别识别表(2)和表(3)的格式,也不需要分别为表(2)和表(3)设置相应的抽取方式。

在一个实施例中,步骤s100中,从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,可以包括以下步骤:

遍历所述表单中的每一行单元格:

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板;

若查找到,则确定该行单元格为所述表单的表单头部,并将查找到的表单模板确定为所述目标表单模板。

大部分情况下,表单中的第一行单元格为表单头部,但是也有其他情况,比如表单的第一行单元格为表单的标题等。

本实施例中,以行为单位来判断表单模板包含的字段信息是否与该行单元格的内容匹配,在匹配的情况下,一方面可以确定出该表单模板为目标表单模板,另一方面也可以确定出该行单元格为表单头部,可以省去额外用于确定表单头部的步骤。

本实施例中,可以采用遍历的方式来读取表单中的各行单元格,以实现上述的步骤。即,可以针对每一表单模板,遍历所述表单中的各行单元格,检查该表单模板中的字段信息与遍历到的该行单元格的内容是否匹配,匹配规则具体不限,比如可以是表单模板中所有字段信息包含的字段名称都存在于该行单元格中,如果匹配,则可以确定遍历到的该行单元格为所述表单的表单头部,并将查找到的表单模板确定为所述目标表单模板。

可选的,所述表单的表单头部的数量为1个,该方法进一步包括:在确定遍历到的该行单元格为所述表单的表单头部时,结束对所述表单的遍历。由于已经找到了目标表单模板,也确定了表单头部,因而不需要再遍历后续的行,所以可以结束遍历,以提升处理效率。

当然,如果表单的表单头部的数量大于1个,则在确定遍历到的该行单元格为表单的表单头部时:可以继续对表单进行遍历;或者可以检查当前对所述表单的遍历次数是否达到最大遍历次数,如果是,则结束对所述表单的遍历,否则可以继续对表单的遍历。

可选的,该方法进一步包括:若在所述已配置的表单模板中未查找到包含的字段信息与该行单元格的内容匹配的表单模板,则检查当前对所述表单的遍历次数是否达到最大遍历次数,如果是,则结束对所述表单的遍历。一般来说,遍历很多次之后还无法确定是否匹配,说明大概率是不匹配的,通过定义最大遍历次数来限制对表单的遍历次数,适时结束遍历,可以避免遍历次数过多造成的资源浪费。

其中,最大遍历次数可以在表单模板中定义,不同表单模板中的最大遍历次数可以不同,这里检查当前对所述表单的遍历次数是否达到最大遍历次数时,具体可以检查当前对所述表单的遍历次数是否达到该表单模板中的最大遍历次数。当然,最大遍历次数也可以在电子设备中定义,在此不作限定。

在一个实施例中,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板进一步为:

在该行中每个单元格的数据类型为文本类型时,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板。

一般来说,表单中的表单头部中各个单元格的类型为文本类型,所以基于这个特点,可以在该行中每个单元格的数据类型为文本类型时,再在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板;而在该行中至少一个单元格的数据类型为非文本类型时,可以直接跳过针对该行单元格的查找匹配的表单模板的处理,以加快处理效率。

在一个实施例中,所述字段信息至少包括字段名称;

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板,包括:

针对所述已配置的表单模板中的每一表单模板:

从该行单元格中确定出参考单元格,所述参考单元格的内容与该表单模板中的任一字段名称匹配;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板。

表单的一行中可以有多个单元格,一行中内容与表单模板中的字段名称匹配的单元格(也就是参考单元格)的数量越多,则该行单元格为表单头部的可能性就越大,所以可以根据参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板。

比如,可以在参考单元格的个数达到设定个数时,确定该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。这里的设定个数可以在该表单模板中定义,也可以在电子设备中预设,设定个数的取值可以根据需要而定,比如可以为大于1。

可选的,针对每一行单元格,在确定每个参考单元格时,可以将参考单元格的内容与位置索引记录到缓存中。可选的,位置索引可以用于指示参考单元格所在的列,以表(2)为例,缓存中可以保存有以下信息:

“天气”:c2

“温度”:c4

“统计时间”:c5

其中,c2表示“天气”所在单元格位于第2列,c4表示“温度”所在单元格位于第3列,c5表示“统计时间”所在单元格位于第5列,这里的c2、c4、c5可以用数值来表示,具体数值不限,只要能够表征相应的列即可。

进一步的,如果依据参考单元格的个数确定该表单模板不为包含的字段信息与该行单元格的内容匹配的表单模板,则可以清空该缓存。

在一个实施例中,所述参考单元格的内容与该表单模板中的任一字段名称匹配是指:

所述参考单元格的内容与该表单模板中的任一字段名称相同;

或者,所述参考单元格的内容与该表单模板中的任一字段名称为近义词或同义词,所述近义词或同义词是通过设定的匹配算法确定的。

换言之,参考单元格的内容与该表单模板中的任一字段名称匹配的匹配规则可以包括:字符串的完全匹配(即相同)、或者可以为基于设定的匹配算法确定出的字符串的近义词或同义词匹配,当然,具体匹配规则不限于此,比如还可以基于文本相似度来确定等。

设定的匹配算法比如可以包括:基于nlp(自然语言处理,naturallanguageprocessing)的近义词匹配等,具体不作限定。

本实施例中,近义词或同义词匹配不是精准的匹配方式,可以使得同一表单模板可以用于更多同类数据表单的数据抽取,可以进一步减少所需配置的模板数量,也有利于更准确地找出表单头部。

在一个实施例中,所述表单模板还包括设定匹配度;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板,包括:

计算所述参考单元格的个数与该表单模板中字段信息对应的字段个数之间的比值;

若该比值大于该表单模板中的设定匹配度,则确定该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。

以表单为表(2)为例,假设该表单模板中字段信息对应的字段分别为天气、温度、统计时间,也就是说字段个数为3,在遍历到第一行单元格时,找出了3个参考单元格(缓存了3个参考单元格的内容),这3个参考单元格的内容分别为天气、温度、统计时间,与该表单模板中的3个字段信息应,所以,参考单元格的个数也为3,则计算参考单元格的个数与该表单模板中字段信息对应的字段个数的比值为3/3=1,假设该表单模板中的设定匹配度为0.8,由于1大于0.8,所以可以确定第一行单元格为表单头部,且该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。

本实施例中,只要比值大于设定匹配度即可,并不需要完全匹配,这样一个表单模板可以匹配更多的表单,可以进一步减少所需配置的模板数量。

在一个实施例中,在已配置的表单模板中不存在与所述表单匹配的目标表单模板的情况下,可以输出该表单的相关信息至指定文件(比如但不限于txt文件)或指定数据库表中,以用于后续审计。

相关信息比如可以包括该表单所在文件的文件名、以及获取不到目标表单模板的错误原因,这里的错误原因比如可以有表单模板中字段信息的错误(比如将价格写成了价值)、文件的格式错误(比如理应是html格式,但却呈现的是xlsx格式)。

审计人员可通过人工审计的形式,依赖于指定文件后指定数据库表中的错误原因,来判断是否需将该表单中的内容同步至问题数据库表中、修改表单模板、修改文件格式等。

在一个实施例中,所述字段信息至少包括字段名称;

所述表单模板还包括各字段信息对应的字段顺序、以及至少一个字段信息对应的转换规则,所述字段顺序是依据所述目标表单模板对应的数据库表的表单头部确定的;

步骤s200中,依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据,可以包括以下步骤:

s201:按照所述目标表单模板中的字段顺序对所述表单中各目标单元格所在列进行排序,所述目标单元格属于所述表单的表单头部,且目标单元格的内容与所述目标表单模板中的任一字段名称匹配;

s202:针对所述表单中位于所述表单头部之后的每一行,确定出该行中位于各目标单元格所在列的单元格内容,得到一条目标数据。

在确定出表单头部时,缓存中记录的单元格的内容就是目标单元格的内容,目标单元格的内容与所述目标表单模板中的任一字段名称匹配的匹配规则可以参考前述关于参考单元格的内容的匹配规则,在此不再赘述。

表单中各目标单元格所在列可以根据缓存中记录的单元格内容及位置索引来确定,目标表单模板中的字段顺序可以与对应数据库表的表单头部中的对应字段的顺序相同,可以体现目标表单模板中的字段与对应数据库表中字段的映射关系,基于该字段顺序对表单中各目标单元格所在列进行排序之后,可以使得表单中相应的字段按照数据库表中的字段顺序排列。

继续以表单为表(2)为例,假设目标表单模板中的字段排序为统计时间、天气、温度从前往后依次排序,对应的数据库表中的字段顺序也是如此,则按照该字段顺序对表单中各目标单元格所在列进行排序之后,得到以下表(4):

排序之后,针对所述表单中位于所述表单头部之后的每一行,确定出该行中位于各目标单元格所在列的单元格内容,得到一条目标数据。

比如,上述表(4)中,表单头部是第一行,位于表单头部之后的行为第二至第四行,这几行中记录了所需抽取的数据,以第二行为例,确定出该行中位于各目标单元格所在列的单元格内容,分别为2020-05-23、晴、21.5,作为一条目标数据。

通过上述排序,可以将确定出的单元格内容正确地记录到数据库表中对应的字段位置处,保证数据库表中各数据包含的字段的顺序一致性。

可选的,若目标字段模板中的某个字段(简称缺省字段)名称不存在于表单头部中,即抽取的单元格内容的个数少于所需的字段个数时,可以用空值补足缺省字段对应的位置,即目标数据中与缺省字段对应的位置可以为空值。比如,在目标表单模板中的字段顺序为统计时间、天气、温度、pm2.5值从前往后依次排序,则在确定出2020-05-23、晴、21.5之后,在21.5之后补足一个空值比如为0,则得到的目标数据为2020-05-23、晴、21.5、0。

在一个实施例中,所述确定出该行中位于各目标单元格所在列的单元格内容之前,该方法还包括:

若该行中存在合并单元格,则将该合并单元格进行拆分,并将该合并单元格的内容填入至拆分出的所有单元格中。

每个单元格具有对应的属性信息,属性信息可以指示该单元格是否为合并单元格,若该行中存在合并单元格,则将该合并单元格进行拆分,比如拆分成最小单元格,并将该合并单元格的内容填入至拆分出的所有单元格中。

比如,表单如下表(5):

第一行为表单头部,如果不进行合并单元格的拆分,则确定出的数据为以下两条:

1.七连8班,张三,202001

2.,李四,202002

显然,李四的数据中丢失了队伍信息,导致数据缺损。

而本实施例中,可以在遍历到第二行时,将检测到“七连8班”所在单元格为合并单元格,将该合并单元格进行拆分,并将“七连8班”填入至拆分出的所有单元格中,得到如下表(6):

经过上述拆分,确定出的数据为以下两条:

1.七连8班,张三,202001

2.七连8班,李四,202002

即,解决了数据缺损的问题。

在一个实施例中,所述确定出该行中位于各目标单元格所在列的单元格内容之后,该方法还包括:

按照所述目标表单模板中的转换规则对确定出的至少一个单元格内容进行转换,将得到的单元格内容作为一条目标数据。

可以基于目标表单模板中的字段长度、字段精度、字段类型、字段格式对相应的单元格内容进行转换。比如,对字段类型为时间类型的单元格,用目标表单模板中预定义的时间格式yyyy(年)-mm(月)-dd(日)对单元格内容进行转换。当然,此处只是举例,实际还可以有其他的转换方式。

通过上述转换方式,可以使得输出至数据库表中的数据的格式更统一,也更便于进一步的处理。

下面结合图2,以一个更具体的实施例来对本发明的数据抽取方法进行阐述。

1)获取excel文件,可以通过指定的正则表达式从各类文件中查找出文件名与正则表达式匹配的excel文件,接着执行步骤2);

2)获取excel文件中的表单sheet,可以遍历上述excel文件中的所有sheet,获取的sheet即为遍历到的sheet,接着执行步骤3);

3)遍历已配置的表单模板,针对遍历到的表单模板,遍历sheet中的各行单元格;接着执行步骤4);

4)针对遍历到的该行单元格中的每一单元格,检查该表单模板中是否存在与该单元格内容匹配的字段信息,如果是,则将该单元格内容与该单元格的位置索引记录到缓存中之后,执行步骤5);如果否,则直接执行步骤5);

5)检查缓存中单元格内容的个数与该表单模板中字段信息对应的字段个数的比值是否大于设定匹配度,如果是,则执行步骤7),如果否,则执行步骤6);

6)检查该行是否存在下一个单元格,如果是,则继续针对该行的下一个单元格进行处理;如果否,则继续对该表单进行遍历,在对该表单遍历结束时,若当前存在未被遍历到的表单模板,则继续遍历下一个表单模板,否则,输出用于指示该sheet匹配不到任一表单模板的错误结果,该错误结果可以包括文件名、sheet页名称和错误原因,返回步骤2)继续针对下一表单进行处理;

7)确定当前行是表单头部,且该表单模板为目标表单模板,接着执行步骤8);

8)按照目标表单模板中的字段顺序对表单中的目标单元格内容所在的列进行排序,目标单元格内容即缓存中记录的单元格内容,根据对应的位置索引可以确定列所在位置,接着执行步骤9);

9)遍历表单中位于表单头部之后的行,根据目标表单模板中的字段信息从遍历到的行中抽取出目标数据并输出至对应的数据库表中。

本发明还提供一种数据抽取装置,参看图3,该数据抽取装置100包括:

目标表单模板确定模块101,用于从已配置的表单模板中获取与待处理的表单匹配的目标表单模板,每一表单模板具有对应的数据库表,且表单模板包含对应数据库表中表单头部的至少一个字段的字段信息;

目标数据确定模块102,用于依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据;

数据抽取模块103,用于将所述目标数据抽取至所述目标表单模板对应的数据库表中。

在一个实施例中,所述目标表单模板确定模块从已配置的表单模板中获取与待处理的表单匹配的目标表单模板时,具体用于:

遍历所述表单中的每一行单元格:

在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板;

若查找到,则确定该行单元格为所述表单的表单头部,并将查找到的表单模板确定为所述目标表单模板。

在一个实施例中,所述表单的表单头部的数量为1个;所述目标表单模板确定模块进一步用于:

当确定该行单元格为所述表单的表单头部时,结束对所述表单的遍历。

在一个实施例中,所述目标表单模板确定模块进一步用于:

若未查找到,则检查当前对所述表单的遍历次数是否达到最大遍历次数,如果是,则结束对所述表单的遍历,否则继续对所述表单的遍历。

在一个实施例中,所述目标表单模板确定模块在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板时,进一步用于:

在该行中每个单元格的数据类型为文本类型时,在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板。

在一个实施例中,所述字段信息至少包括字段名称;

所述目标表单模板确定模块在所述已配置的表单模板中查找包含的字段信息与该行单元格的内容匹配的表单模板时,具体用于:

针对所述已配置的表单模板中的每一表单模板:

从该行单元格中确定出参考单元格,所述参考单元格的内容与该表单模板中的任一字段名称匹配;

依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板。

在一个实施例中,所述参考单元格的内容与该表单模板中的任一字段名称匹配是指:

所述参考单元格的内容与该表单模板中的任一字段名称相同;

或者,所述参考单元格的内容与该表单模板中的任一字段名称为近义词或同义词,所述近义词或同义词是通过设定的匹配算法确定的。

在一个实施例中,

所述表单模板还包括设定匹配度;

所述目标表单模板确定模块依据所述参考单元格的个数确定该表单模板是否为包含的字段信息与该行单元格的内容匹配的表单模板时,具体用于:

计算所述参考单元格的个数与该表单模板中字段信息对应的字段个数之间的比值;

若该比值大于该表单模板中的设定匹配度,则确定该表单模板为包含的字段信息与该行单元格的内容匹配的表单模板。

在一个实施例中,

所述字段信息至少包括字段名称;

所述表单模板还包括各字段信息对应的字段顺序、以及至少一个字段信息对应的转换规则,所述字段顺序是依据所述目标表单模板对应的数据库表的表单头部确定的;

所述目标数据确定模块依据所述目标表单模板中的字段信息从所述表单中确定出与所述字段信息对应的数据,得到目标数据时,具体用于:

按照所述目标表单模板中的字段顺序对所述表单中各目标单元格所在列进行排序,所述目标单元格属于所述表单的表单头部,且目标单元格的内容与所述目标表单模板中的任一字段名称匹配;

针对所述表单中位于所述表单头部之后的每一行,确定出该行中位于各目标单元格所在列的单元格内容,作为一条目标数据。

在一个实施例中,

所述目标数据确定模块确定出该行中位于各目标单元格所在列的单元格内容之前,还用于:若该行中存在合并单元格,则将该合并单元格进行拆分,并将该合并单元格的内容填入至拆分出的所有单元格中;

所述目标数据确定模块确定出该行中位于各目标单元格所在列的单元格内容之后,还用于:按照所述目标表单模板中的转换规则对确定出的至少一个单元格内容进行转换,将得到的单元格内容作为一条目标数据。

在一个实施例中,所述装置进一步包括:

配置模块,用于在需对任一数据库表进行表单模板配置时,检查指定数据库中是否存在该数据库表与需配置的表单模板之间的对应关系,如果不存在,则继续进行该表单模板的配置,并将该数据库表与该表单模板的对应关系存储至该指定数据库中。

在一个实施例中,所述目标表单模板确定模块从已配置的表单模板中获取与待处理的表单匹配的目标表单模板时,进一步用于:

在获得所述表单所存储的数据类别的情况下,从用于存储该类数据的数据库表被配置的表单模板中获取与待处理的表单匹配的目标表单模板。

在一个实施例中,所述表单是待处理文件中的任一个表单,所述待处理文件的格式为指定文件格式,所述待处理文件包含至少一个表单。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元。

本发明还提供一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例中所述的数据抽取方法。

本发明数据抽取装置的实施例可以应用在电子设备上。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,图4是本发明根据一示例性实施例示出的数据抽取装置100所在电子设备的一种硬件结构图,除了图4所示的处理器510、内存530、网络接口520、以及非易失性存储器540之外,实施例中数据抽取装置100所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。

本发明还提供一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例中所述的数据抽取方法。

本发明可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。机器可读存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。机器可读存储介质的例子包括但不限于:相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1