具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
首先对本申请所涉及的名词进行解释:
表格问答:是针对自然语言(Natural Language,简称NL)问题,基于自然语言技术根据表格内容给出答案。
NL2SQL(Natural Language to SQL):是将自然语言转化为结构化查询语言(Structured Query Language,简称SQL)语句的缩写,本质上是将用户的自然语言转化为计算机可以理解的规范化的语义表示。
关系型数据库(Relational Database):采用关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解。
Elasticsearch:简称ES,是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
另外,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
表格问答是基于自然语言技术根据表格内容搜索输入问题对应答案的问答引擎,主要涉及到的技术有NL2SQL、SQL执行等技术,学术界通常在一张固定数量的固定表上研究如何通过自然语言的技术实现表格问答,但在工业落地过程中主要有以先几个问题亟待解决:
1)动态表格数据的存储:不同需求场景的表格结构是不同的,在工业界落地时必须要通过一套方案可以支持各种不同场景的表格,并且这套方案是可扩展的,这样才可实现表格问答产品化,尤其是AI场景。比如在基金信息的表格中包含基金名称、基金类型、风险等级等信息,在学生信息的表格中包含姓名、学号、专业名称等信息,不同场景下的表格结构不同,无法通过传统的方式在关系型数据库中提前预置所有场景下的数据表。
2)动态表格数据的检索:由于需求场景的不确定,数据查询无法通过通用的SQL查询技术解决。
3)大数据量:在真实的需求场景中,企业的表格数据量通常比较大,而且都存储在客户的数据库中,比如基金产品、商品信息咨询等场景中,表格数据数据量非常大,这又给表格数据存储、识别和检索带来新的挑战。
在表格问答场景中,数据表格包含各类需求场景下的表格数据。例如,学生信息表、基金信息表等等。
示例性地,在表格问答中,数据表格的存储方案的几个示例如下:
方案一:通过在关系型数据库中存储数据表格的数据,为每张数据表格创建一张对应的数据库表,用于存储一张数据表格的数据。在管理表格数据和进行问答检索时,均使用关系型数据库所存储的表格数据。通过分库分表来支持多数据表格和大数据量。这一方案存在如下缺陷:1)维护成本很高,每添加一张数据表格,均需要在关系型数据库中创建一张数据库表,如果数据表格的结构发生变化,还需动态维护对应的数据库表。数据表格管理过程中创建数据库表、修改数据库表是很消耗资源的操作,很容易出现超时、服务不稳定等现象。2)无法保证问答检索的性能,对于复杂且数据量较大的场景,比如需要支持模糊查询(LIKE)的场景的,关系型数据库很难做到实时响应,无法满足问答场景的低延迟的要求。3)逻辑复杂易出问题,通过分库分表来支持多数据表格和大数据量,需要内部维护一套中间层(proxy),即什么表格的请求需要路由到哪一个数据库表,这一套proxy会很复杂,容易出错导致检索结果出错。
方案二:在关系型数据库中存储数据表格的数据,每张数据表格对应数据库中的一行。数据表格管理基于关系型数据库存储的数据表格。将检索数据存在ElasticSearch中,基于ElasticSearch实现问答检索,以提高问答检索性能。这一方案存在如下缺陷:1)数据表格无法水平扩展,每一张数据表格存储在数据库表的一行中,限制了分页,如果表格数据较多,数据表格的前端展示和后台维护处理均会有问题。2)无法支持大数据量数据表格的存储,每一张数据表格存储在数据库表中的一行,一行数据能存储的内容是有限的,无法支持大数据量数据表格的存储。3)需要在ES中提前预置数据表格中所有字段的数据类型。
方案三:表格数据均存储在ElasticSearch中,表格数据的管理和问答检索均基于ElasticSearch中存储的表格数据实现。这一方案存在如下缺陷:1)基于ElasticSearch实现表格数据的管理很难保证数据一致性,在批量修改数据表格的场景下,比较容易出现数据不一致的问题。2)表格数据的管理很难保证实时展示,ElasticSearch本身是一个分布式的搜索引擎,比较适用于读多写少的场景,在修改数据表格频繁的场景下,ElasticSearch很难保证实时展示,若要实时展示则性能会下降,导致问答检索响应不及时。3)需要在ES中提前预置表格数据中所有字段的数据类型,数据表格增加新的列时,也须在ES中指定新增列对应的字段名和字段类型。4)无法适用于多中心架构。
本申请提供的表格问答的数据处理方法,通过将数据表格的表格数据存储在ElasticSearch中,数据表格的一行对应ElasticSearch中的一个文档(document),数据表格的每一列根据数据类型映射为document中的一个新的字段名,字段名根据列的数据类型和列在同数据类型的列中出现的次序确定,数据字段的字段类型根据字段名称确定,不需要提前预置所有的字段名及其类型,实现动态数据表格的存储,支持大数据量的表格数据的存储,支持数据表格结构的灵活变化,并且在问答时可以实现实时检索,提高表格问答的响应及时性。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图1为本申请一实施例提供的表格问答的数据处理方法流程图。本实施例提供的表格问答的数据处理方法具体可以应用于具有表格问答功能的电子设备,该电子设备可以是对话机器人、具有表格问答功能的终端设备或服务器等,本实施例以对话机器人为例进行示例性地说明,在其他实施例中,电子设备还可以采用其他设备实现,本实施例此处不做具体限定。
如图1所示,该方法具体步骤如下:
步骤S101、接收输入的问题信息。
在表格问答场景下,输入的问题信息是指用户使用表格问答功能时提出的问题,电子设备根据输入的问题信息,基于表格数据查找问题对应的答案信息,并反馈给用户,实现表格问答功能。
步骤S102、根据当前场景下所有数据表格的结构信息,将问题信息转化为结构化查询语句,结构化查询语句用于从关系型数据库中与数据表格对应的数据库表中查询得到问题信息的答案信息,数据表格所包含的列与对应的数据库表所包含的字段一一对应。
其中,数据表格的结构信息包含数据表格的表名,数据表格所包含的列的列名和数据类型等信息,还可以包含数据表格中各列的顺序等。
在确定输入的问题信息之后,电子设备通过NL2SQL技术,基于当前场景下数据表格的结构信息,将问题信息转化为能够从数据表格中查询得到问题信息对应答案信息的结构化查询语句,该结构化查询语句在关系型数据库中执行时,能够从关系型数据库中与数据表格对应的数据库表中查询得到问题信息的答案信息。
示例性地,根据当前场景下所有数据表格的结构信息,将问题信息转化为结构化查询语句,可以通过对现有的任意一种NL2SQL模型使用当前场景下的数据表格的结构信息进行训练得到,训练好的NL2SQL模型能够将输入的问题信息转化为能够从数据表格中查询得到问题信息对应答案信息的结构化查询语句。
步骤S103、根据每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,其中,文档数据用于存储所有数据表格中所包含的数据,每一数据表格中的一行数据对应于文档数据中的一个文档数据,文档数据包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定。
其中,数据表格的标识可以是数据表格的名称、唯一编码(ID)、别名等,可以根据实际应用场景的需要进行设置和调整,此处不做具体限定。
本实施例中,将数据表格所包含的表格数据存储在ElasticSearch的文档数据(document)中。文档数据用于存储所有数据表格中所包含的数据,每一数据表格中的一行数据对应于ElasticSearch中的一个document,document包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定。
建立并存储每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,根据第一映射关系可以将任一数据表格中的任一列映射到ElasticSearch中document的对应字段。
在将问题信息转化为结构化查询语句之后,该结构化查询语句中包含数据表格的表名和/或列名,根据第一映射关系可以将结构化查询语句中出现的数据表格的表名和/或列名映射到ElasticSearch中的对应document及对应字段,并根据结构化查询语言的语法规则及DSL(Domain Specific Language,领域专用语言)的语法规则,将结构化查询语句转化为具有相同查询功能的DSL语句,DSL语句能够在ElasticSearch中执行,得到查询结果。
其中,结构化查询语句可以是SQL语句或者是类SQL语句,能够在关系型数据库中执行实现查询功能。
步骤S104、通过在ElasticSearch中执行DSL语句,从文档数据中查询得到问题信息的答案信息。
在将结构化查询语句转化为DSL语句之后,通过在ElasticSearch中执行DSL语句,能够从文档数据中查询得到问题信息的答案信息。
步骤S105、输出答案信息。
本申请实施例中,将数据表格所包含的表格数据存储在ElasticSearch的文档数据中,建立并存储每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系。
其中,每一数据表格中的一行数据对应于ElasticSearch中的一个文档数据,文档数据包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定,数据字段的字段类型根据字段名称确定,不需要提前预置所有的字段名及其类型,实现动态数据表格的存储,支持大数据量的表格数据的存储,支持数据表格结构的灵活变化。在表格问答时,根据当前场景下所有数据表格的列结构信息,将问题信息转化为结构化查询语句,根据每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,通过在ElasticSearch中执行DSL语句,即可实现从文档数据中查询得到问题信息的答案信息,能够实现实时检索,提高表格问答的响应及时性。
本实施例中,ElasticSearch中表格数据的存储方案中,将数据表格所包含的表格数据存储在ElasticSearch的文档数据(document)中。每一数据表格中的一行数据对应于ElasticSearch中的一个document,document包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定。不需要提前预置所有的字段名及其类型,实现动态数据表格的存储,支持大数据量的表格数据的存储,支持数据表格结构的灵活变化。在表格问答时,根据当前场景下所有数据表格的列结构信息,将问题信息转化为结构化查询语句,根据每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,通过在ElasticSearch中执行DSL语句,即可实现从文档数据中查询得到问题信息的答案信息,能够实现实时检索,提高表格问答的响应及时性。
一种可选地实施方式中,可以在ElasticSearch中设置索引的类型映射采用动态模板映射规则,每一文档数据的数据字段的字段类型根据该数据字段的字段名称和模式匹配模板确定;创建每一数据表格对应的类型映射,类型映射包含数据表格中的列与文档数据中字段名的第二映射关系。基于每一数据表格对应的类型映射,可以实现对表格数据的动态管理。
可选地,可以将数据表格的每一列,根据该列的数据类型映射为document中一个新的字段名,新的字段名的命名方式如下:以数据类型对应标识作为前缀,以该数据类型在数据表格中同数据类型的列中出现的次序作为后缀。这样,根据数据表格中列的数据类型可以确定该列在document中对应的字段名。
其中,数据表格中列的数据类型可以根据应用场景下需要进行设置,不同场景中可以设不同的数据类型,本实施例此处不做具体限定。例如,数据表格中列的数据类型可以包括文本型、数字型、日期型、布尔型、持续时间型等,其中持续时间型用于存储持续时间长短信息,实际存储采用数字型。
示例性地,如图2所示,对于图2中所示的理财信息表,理财信息表中四列“基金代码”、“基金名称”、“风险等级”、“收益”的数据类型依次为:数字型、文本型、文本型、数字型。数字型的标识可以设置为“num”,文本型的标识可以设置为“text”。根据理财信息表中各列的数据类型,理财信息表中的“基金代码”映射为字段名“num_0”、“基金名称”映射为字段名“text _0”、“风险等级”映射为字段名“text _1”、“收益”映射为字段名“num_1”。存储理财信息表对应的类型映射,包含数据表格中的列与document中字段名的第二映射关系。一个document为图3中document的数据中的一行。
示例性地,如图2所示,对于图2中所示的学生信息表,学生信息表中五列“学号”、“姓名”、“专业”、“性别”、“学院”的数据类型依次为:数字型、文本型、文本型、文本型、文本型。数字型的标识可以设置为“num”,文本型的标识可以设置为“text”。根据学生信息表中各列的数据类型,学生信息表中的“学号”映射为字段名“num_0”、“姓名”映射为字段名“text _0”、“专业”映射为字段名“text _1”、“性别”映射为字段名“text _2”、“学院”映射为字段名“text _3”。存储学生信息表对应的类型映射,包含数据表格中的列与document中字段名的第二映射关系。
可选地,可以在ElasticSearch中设置索引的mapping为dynamic templates,使得索引的类型映射采用动态模板映射规则,根据每一document的数据字段的字段名称和模式匹配模板来确定数据字段在索引中的字段类型。
其中,模式匹配模板中设置了字段名称映射到字段类型的规则,例如text_* 代表keyword类型,num_*代表double类型,date_*代表date类型等。
通过将数据表格的每一列根据该列的数据类型映射为document中一个新的字段名,创建每一数据表格的类型映射,并在ElasticSearch中设置索引的mapping为dynamictemplates,将数据表格中的表格数据存储在ElasticSearch时,不需要提前预置所有数据字段的字段名及字段类型,只需在数据表格中新加列时,根据新加列的数据类型动态确定对应的字段名,然后根据字段名确定在ElasticSearch使用的字段类型即可。
示例性地,如图3所示,通过数据表格的类型映射,图2中所示的理财信息表和学生信息表的表格数据在ElasticSearch中存储为如图3中所示的索引中document的数据。
需要说明的是,图3中text_2字段在索引数据理财信息表的document中是不存在的,直到理财信息表中新增了一列为文本类型的数据列,索引数据理财信息表的document中才会有text_2字段;理财信息表中text_3字段和学生信息表中的num_0字段也是类似原理。
本实施例中,当数据表格的结构发生变化(如新增列、删除列)时,ElasticSearch中可以动态地更新数据表格的类型映射,从而动态地增加或减少document中的字段,实现数据表格的动态管理。所存储的表格数据也同步发生变化,ElasticSearch可以动态地管理表格数据,支持数据表格的灵活多变。
可选地,当任一数据表格中新增列时,电子设备根据数据表格的标识、新增列的数据类型和新增列在同数据类型的列中出现的次序,确定新增列对应的字段名,新增列对应的字段名为待新增的字段名;根据待新增的字段名,更新数据表格对应的类型映射。
例如,以图2中所示的理财信息表为例,若理财信息表中新增一列“过去一个月的收益”,新增列的数据类型为数字型,理财信息表中数字型的列已经有两列,可以确定新增列在理财信息表中数字型的列中出现的次序为3(第3次出现),确定新增列对应的字段名为“num_2”,更新理财信息表的类型映射,更新后理财信息表的类型映射为如图4所示。
可选地,当任一数据表格中的列被删除时,根据数据表格的标识、被删除的列的数据类型和被删除的列在同数据类型的列中出现的次序,确定被删除的列对应的字段名,被删除的列对应的字段名为待删除的字段名;根据待删除的字段名,更新数据表格对应的类型映射。
例如,以图2中所示的理财信息表为例,若理财信息表中的“收益”列被删除,“收益”列的数据类型为数字型,在理财信息表中数字型的列中出现的次序为2(第2次出现),可以确定被删除列对应的字段名为“num_1”,更新理财信息表的类型映射,更新后理财信息表的类型映射如图5所示。
本实施例中,当数据表格内的表格数据发送变化(如修改某一单元格的值)时,同步修改ElasticSearch中对应document中存储的数据。
可选地,当任一数据表格中任一列的数据发生变化时,根据数据表格的标识、列和第一映射关系,更新文档数据中包含数据表格的标识的文档中与列对应的数据字段的值。
示例性地,当任一数据表格中任一列中一个或者多个目标单元格的数据发生变化时,根据目标单元格所在数据表格的标识和目标单元格所在数据行的主键列的信息,可以确定目标单元格所在数据行在ElasticSearch中对应的目标document,根据数据表格所包含的列与ElasticSearch中document的字段的第一映射关系,可以确定目标document中与目标单元格所在列对应的目标字段,根据目标单元格更新后的值更新目标document中目标字段的值。
基于数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,上述步骤S103中,根据每一数据表格的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,具体可以采用如下方式实现:
解析结构化查询语句,确定结构化查询语句中出现的目标列及目标列所属的数据表格;根据第一映射关系,将结构化查询语句中的目标列及目标列所属的数据表格映射为文档数据中对应的目标字段及目标字段所属的目标文档数据,并将结构化查询语句转化为具有相同查询功能的DSL语句。
本实施例中,根据当前场景下所有数据表格的结构信息,将问题信息转化为的结构化查询语句包含数据表格的表名和/或列名。不同的问题信息转化为的结构化查询语句可能不同,所包含的数据表格的表名和列名可能不完全相同。
结构化查询语句通过查询数据表格中至少一目标列的数据,得出问题信息对应的答案信息,答案信息可以包含至少一个目标列的原数据,也可以包括根据至少一个目标列的原数据计算得到的计算结果。基于结构化查询语句的语法规则,解析结构化查询语句,可以确定结构化查询语句中出现的目标列及目标列所属的数据表格。
进一步地,确定结构化查询语句中出现的目标列及目标列所属的数据表格之后,根据每一数据表格的列与ElasticSearch中存储的文档数据的字段的第一映射关系,可以将目标列及目标列所属的数据表格映射为ElasticSearch中文档数据的目标字段及目标字段所属的目标document,并且根据结构化查询语句的语法规则和DSL的语法规则直接的转化规则,将结构化查询语句转化为DSL语句。
其中,结构化查询语句的语法规则中包含聚合函数的语法规则,DSL的语法规则包含DSL中聚合函数的语法规则,将结构化查询语句转化为DSL语句时,也将结构化查询语句中的聚合函数转化为DSL中的同类型的聚合函数。
示例性地,以图2中学生信息表为例,假设输入问题信息为“张三的专业是什么”,输入的问题信息转化为如下SQL语句:
select 专业 from 学生信息表 where 姓名=‘张三’。
通过解析上述SQL语句,可以确定SQL语句中出现了目标列“姓名”和“专业”,这两个目标列所属的数据表格均为学生信息表。基于图3中所示的映射,可以将目标列“姓名”和“专业”及所属的学生信息表映射为ElasticSearch中的“text_0”和“text_1”,字段名所属的document是表格名称为“学生信息表”的document。根据语法规则,将SQL语句转换为的DSL语句用于在表格名称为“学生信息表”的document中查询text_0=‘张三’的document中text_1字段的值。
本申请实施例通过将数据表格所包含的表格数据存储在ElasticSearch的文档数据中,建立并存储每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,每一数据表格中的一行数据对应于ElasticSearch中的一个文档数据,文档数据包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定,数据字段的字段类型根据字段名称确定,不需要提前预置所有的字段名及其类型,实现动态数据表格的存储,支持大数据量的表格数据的存储,支持数据表格结构的灵活变化。在表格问答时,根据当前场景下所有数据表格的列结构信息,将问题信息转化为结构化查询语句,根据每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,通过在ElasticSearch中执行DSL语句,即可实现从文档数据中查询得到问题信息的答案信息,能够实现实时检索,提高表格问答的响应及时性。
本申请实施例提供一种表格问答中的表格数据管理的方案,通过将数据表格存储在关系型数据库的数据库表中,基于关系型数据库中存储的数据表格,实现数据表格的管理,可以支持数据表格结构的动态修改,调整数据表格中各列的展示顺序等,而无需修改数据库表,可保证管理数据表格时的数据一致性和实时性,并且可支持大数据量的数据表格的存储。
具体地,将数据表格存储在关系型数据库的数据库表中,每一数据表格中的一行数据对应于数据库表中的一行,数据库表包括第二字段和第三字段,第二字段用于存储数据表格的标识,第三字段用于存储数据表格中的一行数据。
通过将数据表格中一行的数据映射到数据库表一行中的指定字段(第三字段),此数据库表存储所有数据表格内的数据,这样在数据表格的结构发生变化,如增加或删除一列数据时,无需修改数据库表的结构,只需修改数据表格的列信息及列的展示顺序,在修改数据表格的每一行数据时,再更新数据库表中的对应内容即可。在数据表格中新增一行数据时,只需要在数据库表中增加一行数据即可。
示例性地,以图2中所示的理财信息表为例,如图6所示,理财信息表中的一行数据对应于关系型数据库的数据库表中的一行数据,数据库表中第二字段为“表格名称”,第三字段为“表格数据”,理财信息表中一行的数据存储在数据库表中“表格数据”这一指定字段中。当理财信息表中增加一行数据时,只需在数据库表中增加一行数据存储理财信息表的名称和增加的一行数据即可。
示例性地,在多个数据表格的场景中,多个数据表格内的数据均存储在同一个数据库表中。
例如,以图2中的理财信息表和学生信息表为例,如图7所示的数据库表中第二字段为“表格名称”,第三字段为“表格数据”,理财信息表中的一行数据对应于数据库表中的一行数据(如图7所示数据库表中的前两行数据),学生信息表中的一行数据对应于数据库表中的一行数据(如图7所示数据库表中的后两行数据)。当任一数据表格中增加一行数据时,只需在数据库表中增加一行数据存储该数据表格的名称和增加的一行数据即可。
在实际应用中,对于用于表格问答的数据表格,可以提供数据表格的展示功能、以及新增列、删除列、修改表格中数据等管理功能。在展示数据表格时,数据表格中各列的顺序可以调整。
可选地,考虑到数据表格所包含的列及列的展示顺序可能会经常变化,可以设置并存储每一数据表格的列信息和列的展示顺序,其中数据表格的列信息包含的列、列的数据类型等。数据表格的列的展示顺序是指前端页面展示数据表格时数据表格中各列的排列顺序。通过存储数据表格的列对应的展示顺序,建立数据表格的列在前端展示时的顺序(或位置)与数据表格中的列之间的映射关系,从而建立数据表格的列在前端展示时的顺序与数据库表中字段之间的映射关系,当前端展示的数据表格的列的顺序发生变化时,只需修改数据表格的列的展示顺序即可,无需修改数据库表的结构和存储的数据,能够降低数据库的操作成本,便于扩展。
其中,展示顺序为指定值表示不展示。其中指定值可以根据实际应用场景的需要进行设置和调整,此处不做具体限定。
示例性地,指定值可以为空、0、或者其他任意值。以指定值为0为例,数据表格的列的展示顺序可以按照列在前端页面显示的先后顺序依次设置展示顺序为1,2,3……。若前端页面上用户删除某一列,则将被删除的列的展示顺序设为0。
例如,图2所示的理财信息表的列在前端展示的顺序与列的映射关系,以及理财信息表的列与数据库表中存储的表格数据的映射关系如图8中所示。
可选地,响应于对前端页面所显示的数据表格新增一列的操作,将新增列的信息添加到数据表格的列信息中;根据数据表格中新增列后所有列的展示顺序,更新数据表格的列展示顺序信息。在修改数据表格的每一行中新增列的数据的时候,再更新数据库表中的对应内容即可。
示例性地,以图8所示的映射关系为例,在理财信息表中增加一列“过去一个月的收益”,且“过去一个月的收益”在第一列显示,其他列依次后移之后,由于理财信息表的数据存储在数据库表一行的指定字段(如图7所示),若对数据库表中表格名称为理财信息表的所有行做修改,实现复杂且耗时太长,因此,只需将新增列的信息添加到理财信息表的列信息中,更新理财信息表的列的展示顺序即可,更新后理财信息表的列信息及列的展示顺序如图9所示。
可选地,响应于对前端页面所显示的数据表格的指定列的删除操作,删除数据表格的列信息中的指定列的信息;根据数据表格中删除指定列后剩余列的展示顺序,更新数据表格的列展示顺序信息。在修改数据表格的任一行的数据的时候,再更新数据库表中的对应行的内容,删除被删除列的内容即可。
示例性地,以图8所示的映射关系为例,将理财信息表中一列“风险等级”删除之后,由于理财信息表的数据存储在数据库表一行的指定字段(如图7所示),若对数据库表中表格名称为理财信息表的所有行做修改,实现复杂且耗时太长,因此,只需删除数据表格的列信息中的指定列的信息,并更新理财信息表的列的展示顺序即可,更新后理财信息表的列信息及列的展示顺序如图10所示。
可选地,响应于对前端页面所显示的数据表格中任一行数据的修改操作,根据数据表格的标识以及任一行数据中主键的值,确定数据库表中与任一行数据对应的行;根据任一行数据修改后的数据,更新与任一行数据对应的行中指定字段的值。
其中,数据表格中的主键是指数据表格中能够唯一标识一行数据的列,主键包括数据表格的至少一列。
例如,如图7中所示的学生信息表,学生信息表的主键为学号,若将学生信息表中第一行中专业列的值修改为“软件工程”,则根据学生信息表的表名和第一行的主键“学号”的值“12215431”,确定数据库表中的第三行数据与学生信息表中第一行对应,根据学生信息表中第一行修改后的数据,更新数据库表中的第三行数据为:[{“学号”:“12215431”},{“姓名”:“张三”},{“专业”:“软件工程”},{“性别”:“男”},{“学院”:“计算机”}]。
可选地,响应于新增数据表格的操作,获取并存储新增的数据表格的列信息和列的展示顺序,无需在关系型数据库中新建数据库表。
可选地,响应于删除数据表格的操作,删除数据表格的列信息和列的展示顺序,无需在关系型数据库中进行数据库表的删除操作。
可选地,响应于对前端页面所显示的数据表格的列的展示顺序的调整操作,获取调整后数据表格的列的展示顺序;根据调整后数据表格的列的展示顺序,更新数据表格的列展示顺序信息。
示例性地,以图8所示的映射关系为例,在前端展示的理财信息表中交换“风险等级”和“收益”两列的顺序之后,由于理财信息表的数据存储在数据库表一行的指定字段(如图7所示),若对数据库表中表格名称为理财信息表的所有行的数据做修改,实现复杂且耗时太长,因此,只需更新理财信息表的列的展示顺序即可,更新后理财信息表的列信息及列的展示顺序如图11所示。
本实施例中,通过将数据表格存储在关系型数据库的数据库表中,每一数据表格中的一行数据对应于数据库表中的一行,将数据表格中的一行数据存储在数据库表中一行的指定字段,这样在数据表格的结构发生变化,如增加或删除一列数据时,无需修改数据库表的结构,只需修改数据表格的列信息及列的展示顺序,在修改数据表格的每一行数据时,再更新数据库表中的对应内容即可;在数据表格中新增一行数据时,只需要在数据库表中增加一行数据即可;实现了数据表格的结构和数据的动态管理,支持数据表格的灵活多变,支持数据表格的增、删、改、查,并且支持数据表格中列和行的修改,保持数据库表的结构和数量不会随着数据表格的变化而变化,可支持大数量数据表格的存储和管理,并且可以保证数据一致性和实时性。
基于关系型数据库中存储的数据表格,实现数据表格的管理,可以支持数据表格结构的动态修改,调整数据表格中各列的展示顺序等,而无需修改数据库表,可保证管理数据表格时的数据一致性和实时性,并且可支持大数据量的数据表格的存储。
本申请一实施例中,可以将数据表格同时存储在关系型数据库和ElasticSearch中,基于本申请提供的表格问答中的表格数据管理的方案,每一数据表格中的一行数据对应于数据库表中的一行,将数据表格中的一行数据存储在数据库表中一行的指定字段,存储数据表格的列信息和列的展示顺序,基于关系型数据库中存储的表格数据实现表格数据的管理,实现了数据表格的结构和数据的动态管理,支持数据表格的灵活多变,支持数据表格的增、删、改、查,并且支持数据表格中列和行的修改,保持数据库表的结构和数量不会随着数据表格的变化而变化,可支持大数量数据表格的存储和管理,并且可以保证数据一致性和实时性。同时,将数据表格所包含的表格数据存储在ElasticSearch的文档数据(document)中,每一数据表格中的一行数据对应于ElasticSearch中的一个document,根据数据表格列的数据类型,将列动态映射为ElasticSearch索引中的对应字段,使得索引的mapping关系和索引document中字段数量不会随着数据表格的变化而变化,不需要提前预置所有的字段名及其类型即可实现动态数据表格的存储,支持大数据量的表格数据的存储,支持数据表格结构的灵活变化,并实现表格问答的实时检索,提高表格问答的响应及时性。本方案基于关系型数据库管理表格数据,保证数据一致性和实时可见性;基于ElasticSearch做问答数据检索,保证表格问答的性能和数据的水平扩展,同时可支持大数据量的数据表格的表格问答,极大的降低了表格问答从学术界到工业界的落地成本,且用非常低的成本支持动态数据表格的存储和检索。
图12为本申请一实施例提供的表格问答的数据处理装置的结构示意图。本申请实施例提供的表格问答的数据处理装置可以执行表格问答的数据处理方法实施例提供的处理流程。如图12所示,表格问答的数据处理装置120包括:问题获取模块121,问答检索模块122和答案输出模块123。
问题获取模块121,用于接收输入的问题信息。
问答检索模块122,用于根据当前场景下所有数据表格的结构信息,将问题信息转化为结构化查询语句,结构化查询语句用于从关系型数据库中与数据表格对应的数据库表中查询得到问题信息的答案信息,数据表格所包含的列与对应的数据库表所包含的字段一一对应。
问答检索模块122还用于根据每一数据表格所包含的列与ElasticSearch中存储的文档数据的字段的第一映射关系,将结构化查询语句转化为DSL语句,其中,文档数据用于存储所有数据表格中所包含的数据,每一数据表格中的一行数据对应于文档数据中的一个文档数据,文档数据包括第一字段和数据字段,第一字段用于存储数据表格的标识,数据字段与数据表格的列一一对应,每一数据字段的字段名根据数据表格中对应列的数据类型和对应列在同数据类型的列中出现的次序确定,数据字段的字段类型根据字段名称确定,;
问答检索模块122还用于通过在ElasticSearch中执行DSL语句,从文档数据中查询得到问题信息的答案信息。
答案输出模块123,用于输出答案信息。
可选地,问答检索模块还用于:
解析结构化查询语句,确定结构化查询语句中出现的目标列及目标列所属的数据表格;根据第一映射关系,将结构化查询语句中的目标列及目标列所属的数据表格映射为文档数据中对应的目标字段及目标字段所属的目标文档数据,并将结构化查询语句转化为具有相同查询功能的DSL语句。
可选地,问答检索模块还用于:
在ElasticSearch中设置索引的类型映射采用动态模板映射规则,每一文档数据的数据字段的字段类型根据该数据字段的字段名称和模式匹配模板确定;创建每一数据表格对应的类型映射,类型映射包含数据表格所包含的列与文档数据中字段名的第二映射关系。
可选地,问答检索模块还用于:
当任一数据表格中新增列时,根据数据表格的标识、新增列的数据类型和新增列在同数据类型的列中出现的次序,确定新增列对应的字段名,新增列对应的字段名为待新增的字段名;根据待新增的字段名,更新数据表格对应的类型映射。
可选地,问答检索模块还用于:
当任一数据表格中的列被删除时,根据数据表格的标识、被删除的列的数据类型和被删除的列在同数据类型的列中出现的次序,确定被删除的列对应的字段名,被删除的列对应的字段名为待删除的字段名;根据待删除的字段名,更新数据表格对应的类型映射。
可选地,问答检索模块还用于:
当任一数据表格中任一列的数据发生变化时,根据数据表格的标识、列和第一映射关系,更新包含数据表格的标识的文档数据中与列对应的数据字段的值。
可选地,表格问答的数据处理装置还可以包括:
表格数据管理模块,用于:
将数据表格存储在指定关系型数据库的数据库表中,每一数据表格中的一行数据对应于数据库表中的一行,数据库表包括第二字段和第三字段,第二字段用于存储数据表格的标识,第三字段用于存储数据表格中的一行数据;设置并存储每一数据表格的列信息和列的展示顺序,展示顺序为指定值表示不展示。
可选地,表格数据管理模块,还用于:
响应于对前端页面所显示的数据表格的指定列的删除操作,删除数据表格的列信息中的指定列的信息;根据数据表格中删除指定列后剩余列的展示顺序,更新数据表格的列展示顺序信息。
可选地,表格数据管理模块,还用于:
响应于对前端页面所显示的数据表格新增一列的操作,将新增列的信息添加到数据表格的列信息中;根据数据表格中新增列后所有列的展示顺序,更新数据表格的列展示顺序信息。
可选地,表格数据管理模块,还用于:
响应于对前端页面所显示的数据表格的列的展示顺序的调整操作,获取调整后数据表格的列的展示顺序;根据调整后数据表格的列的展示顺序,更新数据表格的列展示顺序信息。
可选地,表格数据管理模块,还用于:
响应于对前端页面所显示的数据表格中任一行数据的修改操作,根据数据表格的标识以及任一行数据中主键的值,确定数据库表中与任一行数据对应的行;根据任一行数据修改后的数据,更新与任一行数据对应的行中指定字段的值。
本申请实施例提供的装置可以具体用于执行上述任一方法实施例所提供的方法实施例,具体功能和效果此处不再赘述。
图13为本申请一示例实施例提供的电子设备的结构示意图。如图13所示,该电子设备130包括:处理器1301,以及与处理器1301通信连接的存储器1302,存储器1302存储计算机执行指令。
其中,处理器执行存储器存储的计算机执行指令,以实现上述任一方法实施例所提供的表格问答的数据处理方法,具体功能和所能实现的技术效果此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现上述任一方法实施例提供的表格问答的数据处理方法。
本申请实施例还提供了一种计算机程序产品,程序产品包括:计算机程序,计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得电子设备执行上述任一方法实施例提供的表格问答的数据处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。