一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据抽取方法及相关装置与流程

2022-11-30 14:02:28 来源:中国专利 TAG:
1.本技术实施例涉及计算机程序领域,尤其涉及一种数据抽取方法及相关装置。
背景技术
::2.随着社会的不断发展,人们已进入大数据时代。在生产生活中,人们需从各种文档中抽取出表格数据,来实现某些需求。其中,结构化查询语言(sql,structuredquerylanguage)是处理关系型数据库的强大工具,能够用于抽取特定的数据。sql语言要求在查询时有明确的表名和字段名,以保证数据的规范性和高执行效率。3.然而,在某些特殊的应用场景下,比如从超文本标记语言(html,hypertextmarkuplanguage)文档、便携式文档格式(pdf,portabledocumentformat)文档和word文档中进行表格数据抽取时,因为这些文档中的表格结构和内容是不确定的,针对不同的表格需编写特定的程序来解析,这样使得工作量大,且代码冗余不易维护,数据抽取的效率较低,给用户带来一定的不便。技术实现要素:4.本技术实施例提供了一种数据抽取方法及相关装置。5.一种数据抽取方法,包括:6.获取用户输入的查询语句;7.对所述查询语句进行解析得到抽象语法树;8.识别出所述抽象语法树中的目标节点,所述目标节点为表示基于根据标准结构化查询语言sql语法预先自定义的扩展sql语法的结构的节点;9.基于元数据表,通过所述目标节点得到目标语句,所述目标语句为标准sql语句,所述元数据表包括从目标文档中抽取得到的元数据信息;10.基于数据库,对所述目标语句进行处理得到目标数据。11.可选的,获取用户输入的查询语句之前,所述方法还包括:12.基于所述标准sql语法,定义所述扩展sql语法,所述扩展sql语法用于选取满足预设条件的列或表。13.可选的,获取用户输入的查询语句之前,所述方法还包括:14.根据所述目标文档得到数据表和与所述数据表对应的元数据表,所述数据表包括经过预设处理的所述目标文档中的所有表格;15.将所述数据表和所述元数据表存储至所述数据库中;16.基于数据库,对所述目标语句进行处理得到目标数据,包括:17.基于所述数据表,对所述目标语句进行处理得到所述目标数据。18.可选的,根据所述目标文档得到数据表和与所述数据表对应的元数据表,包括:19.根据所述目标文档得到所述目标文档中的所有表格;20.对所述目标文档中的所有表格中具有合并单元格的表格进行合并单元格拆分,对所述目标文档中的所有表格中不具有合并单元格的表格不做处理,以得到所述数据表;21.根据所述数据表得到所述元数据表。22.可选的,当所述查询语句包括预设函数时,基于数据库,对所述目标语句进行处理得到目标数据,包括:23.基于所述数据库和所述预设函数,对所述目标语句进行处理得到所述目标数据,所述预设函数为预先自定义的用于数据抽取的函数。24.可选的,基于元数据表,通过所述目标节点得到目标语句,包括:25.基于所述元数据表,通过所述目标节点得到目标表名和目标字段名;26.根据所述目标表名和所述目标字段名得到所述目标语句。27.可选的,所述预设函数包括第一预设函数、第二预设函数、第三预设函数和第四预设函数中的至少一个,所述第一预设函数为用于抽取特定单元格的值的函数,所述第二预设函数为用于得到经过部分列转换为行的处理的表格的函数,所述第三预设函数为用于得到经过多个表头的列转换为行的处理的表格的函数,所述第四预设函数为用于得到经过带有行内表头的行转换为列的处理的表格的函数。28.一种数据抽取系统,包括:29.获取单元,用于获取用户输入的查询语句;30.解析单元,用于对所述查询语句进行解析得到抽象语法树;31.识别单元,用于识别出所述抽象语法树中的目标节点,所述目标节点为表示基于根据标准结构化查询语言sql语法预先自定义的扩展sql语法的结构的节点;32.转换单元,用于基于元数据表,通过所述目标节点得到目标语句,所述目标语句为标准sql语句,所述元数据表包括从目标文档中抽取得到的元数据信息;33.处理单元,用于基于所述数据库,对所述目标语句进行处理得到目标数据。34.一种数据抽取系统,包括:35.中央处理器,存储器以及输入输出接口;36.所述存储器为短暂存储存储器或持久存储存储器;37.所述中央处理器配置为与所述存储器通信,并执行所述存储器中的指令操作以执行前述方法。38.一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使得计算机执行前述方法。39.从以上技术方案可以看出,本技术实施例具有以下优点:40.获取查询语句后,进行解析得到抽象语法树,再对抽象语法树进行识别,得到目标节点,接着通过目标节点得到目标语句,最后基于元数据表对目标语句进行处理得到目标数据。由于已经基于标准sql语言预先自定义了相关语法结构,故用户无需严格按照标准sql语言来输入查询语句,可以按照自定义的标准来输入,而自定义的标准可以允许模糊部分的存在,即允许目标节点的存在,基于数据库可以将带有与目标节点对应的语法结构的语句转换为标准的sql语句,即目标语句,从而使得用户无需针对不同的表格编写特定的程序,还可以利用标准sql语句的高效,这样使得工作量大大缩减,数据抽取的效率较高,给用户带来较好的体验。附图说明41.图1为本技术的数据抽取方法一个实施例示意图;42.图2为本技术的数据抽取方法另一实施例示意图;43.图3为本技术的表格解析示意图;44.图4为本技术调用第一预设函数的示意图;45.图5为本技术调用第二预设函数的示意图;46.图6为本技术调用第三预设函数的示意图;47.图7为本技术调用第四预设函数的示意图;48.图8为本技术的数据抽取系统一个实施例示意图;49.图9为本技术的数据抽取系统另一实施例示意图。具体实施方式50.本技术实施例提供了一种数据抽取方法及相关装置。51.当文档的格式为html格式、pdf格式或word格式时,文档中的表格结构和内容是不确定的,不规范的,这使得用户需针对不同表格编写对应的程序,工作量大。本技术提供的数据抽取方法能够解决上述问题,缩减工作量,提高数据抽取效率。52.下面对本技术的数据抽取方法及数据抽取系统进行描述。请参阅图1,本技术的数据抽取方法一个实施例包括:53.101、获取用户输入的查询语句;54.获取用户输入的查询语句。用户输入需要查询抽取的数据所对应的语句,其中语句可以包括标准sql结构和扩展sql结构,扩展sql语法为基于标准sql语法预先自定义的语法。扩展sql语法可用于对列名、表名、列内容和表内容进行查找。模糊的列名和表名可按照表1进行查找:55.[0056][0057]表1动态列名和动态表名的语法语义表[0058]利用扩展sql语法中的动态列别名也可实现列内容的查找。例如,扩展sql语句:selectcolumn(alias)fromtwherealiasregexp"^总利润",column()括号中的参数不带双引号,表示给待选取的列取一个别名alias,具体是哪一列由后续的where子句中的条件决定,在后面的语句中会用这个别名来进行更多的条件操作,比如上面的语句表示选取的列中至少有一行数据满足正则表达式,即包含了以“总利润”开头的数据。[0059]另外,利用扩展sql语法中的动态表别名也可实现表内容的查找。例如,扩展sql语句:selectnamefromtable(t_alias)wheret_aliasregexp"^总利润",table()括号中的参数不带双引号,表示给待选取的表取一个别名t_alias,具体是哪一个表由后续的where子句中的条件决定,比如上面的语句表示选取的表中至少有一行数据满足正则表达式,即包含了以“总利润”开头的数据。[0060]102、对所述查询语句进行解析得到抽象语法树;[0061]对查询语句进行解析得到抽象语法树。具体的,利用语法解析引擎进行解析,得到抽象语法树(ast,abstractsyntaxtree)。抽象语法树是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的其中一种结构。[0062]103、识别出所述抽象语法树中的目标节点;[0063]识别出抽象语法树中的目标节点,其中,目标节点为表示基于标准结构化查询语言sql语言预先自定义的结构的节点,与自定义的扩展sql结构对应。具体的,通过识别工具重点识别出查询语句中的模糊内容,即目标节点对应的内容,如模糊的动态列名、动态表名、动态列别名和动态表别名。[0064]104、基于元数据表,通过所述目标节点得到目标语句;[0065]基于数据库,通过所述目标节点得到目标语句,其中,目标语句为标准sql语句,元数据表包括从目标文档中抽取得到的元数据信息。具体的,重点将第一语句中的模糊内容基于数据库进行转换,得到具体标准的表名和字段名,最后生成目标语句。也可以说将扩展sql语句转换为作为标准sql语句的目标语句,以方便后续操作。数据库可以选用postgresql,也可选用其他类型,具体此处不做限定。[0066]105、基于数据库,对所述目标语句进行处理得到目标数据。[0067]基于数据库,对目标语句进行处理得到目标数据。具体的,执行目标语句,到数据库中进行数据抽取,得到目标数据。这个过程中,可调用函数,也可不调用函数,由用户输入的查询语句决定。[0068]本技术实施例中,获取查询语句后,进行解析得到抽象语法树,再对抽象语法树进行识别,得到目标节点,接着通过目标节点得到目标语句,最后基于元数据表对目标语句进行处理得到目标数据。由于已经基于标准sql语言预先自定义了相关语法结构,故用户无需严格按照标准sql语言来输入查询语句,可以按照自定义的标准来输入,而自定义的标准可以允许模糊部分的存在,即允许目标节点的存在,基于数据库可以将带有与目标节点对应的语法结构的语句转换为标准的sql语句,即目标语句,从而使得用户无需针对不同的表格编写特定的程序,还可以利用标准sql语句的高效,这样使得工作量大大缩减,数据抽取的效率较高,给用户带来较好的体验。[0069]请参阅图2,本技术的数据抽取方法另一实施例包括:[0070]201、基于所述标准sql语法,定义所述扩展sql语法;[0071]基于标准sql语法进行扩展,定义扩展sql语法。其中,扩展sql语法用于选取满足预设条件的列或表,通过自定义的扩展sql语法中的语法结构可选取一个或多个数量的满足预设条件的列或表。[0072]202、根据所述目标文档得到所述目标文档中的所有表格;[0073]根据目标文档得到目标文档中的所有表格。对目标文档按选定的标签进行扫描解析,得到其中的所有表格。其中目标文档的格式为html格式、pdf格式或word格式。另外,在进行表格抽取时,默认取表格的第一行为列名,表格的上方的一行字为表名。[0074]203、对所述目标文档中的所有表格中具有合并单元格的表格进行合并单元格拆分,对所述目标文档中的所有表格中不具有合并单元格的表格不做处理,以得到所述数据表;[0075]对目标文档中的所有表格中具有合并单元格的表格进行合并单元格拆分,对不具有合并单元格的表格不做处理,以得到数据表。其中,数据表包括经过预设处理的目标文档中的所有表格,即既包括未处理的表格,也包括进行合并单元格拆分处理的表格。请参阅图3,当表格出现合并单元格时,需将合并单元格进行拆分,以方便后续处理。[0076]204、根据所述数据表得到所述元数据表;[0077]根据所述数据表得到所述元数据表。得到数据表后,再将依据数据表将相关的元数据信息进行保存,得到元数据表。元数据表设计如表2所示:[0078][0079][0080]表2元数据表设计[0081]205、将所述数据表和所述元数据表存储至所述数据库中;[0082]得到数据表和元数据表后,将数据表和元数据表存储至数据库中。数据库为关系型数据库,可以选用postgresql,也可选用其他类型,具体此处不做限定。[0083]206、获取用户输入的查询语句;[0084]获取用户输入的查询语句。用户输入需要查询抽取的数据所对应的语句,其中语句可以包括标准sql结构和扩展sql结构,扩展sql结构为基于标准sql语句预先自定义的语法结构。扩展sql语言可用于对列名、表名、列内容和表内容进行查找。模糊的列名和表名可按照表1进行查找:[0085][0086][0087]表1动态列名和动态表名的语法语义表[0088]利用扩展sql语法中的动态列别名也可实现列内容的查找。例如,扩展sql语句:selectcolumn(alias)fromtwherealiasregexp"^总利润",column()括号中的参数不带双引号,表示给待选取的列取一个别名alias,具体是哪一列由后续的where子句中的条件决定,在后面的语句中会用这个别名来进行更多的条件操作,比如上面的语句表示选取的列中至少有一行数据满足正则表达式,即包含了以“总利润”开头的数据。[0089]另外,利用扩展sql语法中的动态表别名也可实现表内容的查找。例如,扩展sql语句:selectnamefromtable(t_alias)wheret_aliasregexp"^总利润",table()括号中的参数不带双引号,表示给待选取的表取一个别名t_alias,具体是哪一个表由后续的where子句中的条件决定,比如上面的语句表示选取的表中至少有一行数据满足正则表达式,即包含了以“总利润”开头的数据。[0090]207、对所述查询语句进行解析得到抽象语法树;[0091]对查询语句进行解析得到抽象语法树。具体的,利用语法解析引擎进行解析,得到抽象语法树(ast,abstractsyntaxtree)。抽象语法树是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的其中一种结构。[0092]208、识别出所述抽象语法树中的目标节点;[0093]识别出抽象语法树中的目标节点,其中,目标节点为表示基于根据标准sql语法预先自定义的扩展sql语法的结构的节点,与自定义的扩展sql结构对应。具体的,通过识别工具重点识别出查询语句的模糊内容,即目标节点对应的内容,如模糊的动态列名、动态表名、动态列别名和动态表别名。[0094]209、基于所述元数据表,通过所述目标节点得到目标表名和目标字段名;[0095]基于元数据表,通过目标节点得到目标表名和目标字段名。其中,目标表名和目标字段名为与第一语句中的模糊内容相对应的内容,通过查询元数据表,可以确定具体准确的目标表名和目标字段名。[0096]210、根据所述目标表名和所述目标字段名得到所述目标语句;[0097]根据目标表名和目标字段名得到目标语句。其中,目标表名和目标字段名为具体准确的,故可得到作为标准sql语句的目标语句。[0098]为便于理解,下面举例对步骤208和步骤209进行描述。例如,对于需按列序号来确定的列,有第一语句selectcolumn(1:3)fromt,则先从元数据表中的t_column表查出1《=idx《3的列名,即目标表名和目标字段名,再根据目标表名和目标字段名进行拼接生成实际的查询语句,即目标语句。再比如,对于第一语句selectcolumn(/^采购金额)fromt,表示查询列名以“采购金额”开头的列,“^采购金额”为正则表达式,则先从元数据表中的t_column表查询到满足这个条件的所有列名,例如“采购金额(不含税)”列,再生成实际的查询语句,即目标语句select采购金额(不含税)fromt,其他情况依次类推,不再赘述。[0099]211、基于所述数据表,对所述目标语句进行处理得到所述目标数据。[0100]基于数据表,对目标语句进行处理得到目标数据。具体的,当用户输入的查询语句没有预设函数时,则对目标语句的处理也无需调用预设函数。例如,下面有输入的查询语句:rows=doc.query(”'selectcolumn("供应商"),column(/^采购金额),column("采购内容")fromtable(1)”');[0101]其表达的意思为抽取列名为“供应商”、列名包括“采购金额”和列名为“采购内容”的列,其中未出现预设函数,故未调用预设函数。[0102]另外,当用户输入的查询语句有预设函数时,则基于数据库和预设函数,对目标语句进行处理得到目标数据,其中,预设函数为预先自定义的用于数据抽取的函数,包括第一预设函数、第二预设函数、第三预设函数和第四预设函数中的至少一个,第一预设函数为用于抽取特定单元格的值的函数,第二预设函数为用于得到经过部分列转换为行的处理的表格的函数,第三预设函数为用于得到经过多个表头的列转换为行的处理的表格的函数,第四预设函数为用于得到经过带有行内表头的行转换为列的处理的表格的函数。预设函数可以预选编译到数据库中。例如,下面有输入的查询语句:rows=doc.query(”'selectunpivot(t,[项目],‘年度’,‘数值’)fromtwheretregex"占采购总额的比例"”');[0103]其表达的意思为从采购表中将年度列转换成行,采购表即为内容包含"占采购总额的比例"关键字的表,由于出现了unpivot()函数,故需调用此函数。[0104]第一预设函数可以为get_value_of()函数,也可以是其他类型,具体此处不做限定。以get_value_of()函数为例,请参阅图4,函数的语法为:get_value_of(table_name,key)。其中,table_name为源表名,key为用户根据需求设置的待查找的值的名称。当输入为selectget_value_of(table_name,‘发行人名称’)时,函数将返回“xxx股份有限公司”。具体的,先将源表的每一行的数据转化为一个数组,接着找出包含key的那一行记为arr,最后在arr中找到key的位置pos,下一个元素(arr[pos 1])即为结果。[0105]第二预设函数可以为unpivot()函数,也可以是其他类型,具体此处不做限定。以unpivot()函数为例,请参阅图5,函数的语法为:unpivot(table_name,remain_columns,col,value_col),其中table_name为表名,remain_columns为需要保留不转换的字段,col为转换后的维度列名,value_col为指标列名,当输入为selectunpivot(t,[项目],‘年度’,‘数值’)时,该函数返回一个符合条件的表。具体的,对源表进行转换,保留remian_columns的值,其它列以key-value形式打包到一个字段x中,如{‘2019年度’:80,‘2020年度’:100,‘2021年度:’,200},接着对x展开为多行,每行为原一列的数据,最后取每行的x.key和x.value为新的两列,命名为col和value_col,生成的新表即为结果。[0106]第三预设函数可以为unpivot_2h()函数,也可以是其他类型,具体此处不做限定。以unpivot_2h()函数为例,请参阅图6,函数的语法为:unpivote_2h(table_name,remain_cols,col),其中table_name为源表名,remain_cols是原样返回的列名,col为第一个被列转行生成的列名。当输入为selectunpivot_2h(‘t_123_15’,[‘项目’],‘年度’)时,该函数返回一个符合条件的表。具体的,计算源表的列数为column_count,第一个表头列转化为数组first_head_arr,第二个表头值去重后为step,为构造新记录时的步长,接着循环源表的每一行数据row,再将每一行数据row按step为步长分裂成n条记录records,最后将records插入结果表result。[0107]第四预设函数可以为selectinline_pivot()函数,也可以是其他类型,具体此处不做限定。以selectinline_pivot()函数为例,请参阅图7,函数的语法为:selectinline_pivot(table,col),其中,col为转换形成的新列名。当输入为selectinline_pivot(‘t_123_126’,类型)时,该函数返回一个符合条件的表。具体的,遍历表格的一行row,如果row中所列的值相同(行内表头为只有一个单元格的合并行,预处理的时候会拆分单元格,拆分后的所有单元格相同),则判断为行内表头,记录下它的值为val,如果row不为行内表头,则将row加一个字段(字段名为col,值为val),形成一个新行new_row,将new_row插入结果表result中,返回result结果表。[0108]本实施例中,获取查询语句后,进行解析得到抽象语法树,再对抽象语法树进行识别,得到目标节点,接着基于元数据表通过目标节点得到目标语句,最后基于数据表对目标语句进行处理得到目标数据。由于已经基于标准sql语言预先自定义了相关语法结构,故用户无需严格按照标准sql语言来输入查询语句,可以按照自定义的标准来输入,而自定义的标准可以允许模糊部分的存在,即允许目标节点的存在,基于数据库可以将带有与目标节点对应的语法结构的语句转换为标准的sql语句,即目标语句,从而使得用户无需针对不同的表格编写特定的程序,还可以利用标准sql语句的高效,这样使得工作量大大缩减,数据抽取的效率较高。另外,通过自定义预设函数和对合并单元格的拆分,从另一个角度使得系统的效率变高,给用户带来较好的体验。[0109]下面对本技术的数据抽取系统进行描述,请参阅图8,本技术的数据抽取系统一个实施例包括:[0110]获取单元801,用于获取用户输入的查询语句;[0111]解析单元802,用于对所述查询语句进行解析得到抽象语法树;[0112]识别单元803,用于识别出所述抽象语法树中的第一语句,所述第一语句为基于标准结构化查询语言sql语句预先自定义的语句;[0113]转换单元804,用于基于数据库,将所述第一语句转换为与所述第一语句对应的目标语句,所述目标语句为标准sql语句;[0114]处理单元805,用于基于所述数据库,对所述目标语句进行处理得到目标数据。[0115]本实施例中,获取单元801获取查询语句后,解析单元802进行解析得到抽象语法树,识别单元803再对抽象语法树进行识别,得到目标节点,接着转换单元804通过目标节点得到目标语句,最后处理单元805基于元数据表对目标语句进行处理得到目标数据。由于已经基于标准sql语言预先自定义了相关语法结构,故用户无需严格按照标准sql语言来输入查询语句,可以按照自定义的标准来输入,而自定义的标准可以允许模糊部分的存在,即允许目标节点的存在,基于数据库可以将带有与目标节点对应的语法结构的语句转换为标准的sql语句,即目标语句,从而使得用户无需针对不同的表格编写特定的程序,还可以利用标准sql语句的高效,这样使得工作量大大缩减,数据抽取的效率较高,给用户带来较好的体验。[0116]本实施例数据抽取系统中各单元所执行的功能以及流程与前述图1至图7中数据抽取系统所执行的功能和流程类似,此处不再赘述。[0117]图9是本技术实施例提供的一种数据抽取系统结构示意图,该数据抽取系统900可以包括一个或一个以上中央处理器(centralprocessingunits,cpu)901和存储器905,该存储器905中存储有一个或一个以上的应用程序或数据。[0118]其中,存储器905可以是易失性存储或持久存储。存储在存储器905的程序可以包括一个或一个以上模块,每个模块可以包括对数据抽取系统中的一系列指令操作。更进一步地,中央处理器901可以设置为与存储器905通信,在数据抽取系统900上执行存储器905中的一系列指令操作。[0119]数据抽取系统900还可以包括一个或一个以上电源902,一个或一个以上有线或无线网络接口903,一个或一个以上输入输出接口904,和/或,一个或一个以上操作系统,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等。[0120]该中央处理器901可以执行前述图1至图7所示实施例中数据抽取系统所执行的操作,具体此处不再赘述。[0121]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0122]在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0123]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0124]另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0125]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献