首页 / 专利库 / 人工智能 / 人工智能 / 自然语言处理 / 共指消解 / 结构化查询语句生成系统及方法

结构化查询语句生成系统及方法

阅读:14发布:2020-07-01

专利汇可以提供结构化查询语句生成系统及方法专利检索,专利查询,专利分析的服务。并且一种结构化查询语句生成方法,包括:获取自然语言查询语句;利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案;利用预设的第二规则,在所述切词方案上生成解析树;根据所述解析树的根 节点 生成局部查询参数,及代入所述解析树第一层 子节点 的全局查询参数并得到所述解析树的根节点的全局查询参数;及根据所述解析树的根节点的全局查询参数生成结构化查询语句。本 发明 还提供一种结构化查询语句生成系统。利用本发明可自动将自然语言查询语句转换成结构化查询语句。,下面是结构化查询语句生成系统及方法专利的具体信息内容。

1.一种结构化查询语句生成方法,应用于电子装置,其特征在于,该方法包括:
获取自然语言查询语句;
利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案;
利用预设的第二规则,在所述切词方案上生成解析树;
根据所述解析树的根节点生成局部查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数;及
根据所述解析树的根节点的全局查询参数生成结构化查询语句。
2.如权利要求1所述的结构化查询语句生成方法,其特征在于,所述的预设的词典包括领域词典、公共词典及/或列名词典,所述的第一规则包括命名实体识别规则。
3.如权利要求1所述的结构化查询语句生成方法,其特征在于,所述的预设的第二规则包括领域规则、表达式规则及/或中心词判定规则,其中:
所述领域规则以语义关系三元组为左部,以一组相应的属性设置脚本为右部,并使用所述领域规则的左部为入口创建所述领域规则的索引;
所述表达式规则的左部用于定义表达式的形式化特征,右部包含一组相应的属性设置脚本;及
所述中心词判定规则左部为由关联类型构成的有序二元组,右部则指出中心词子节点应该具备的关联类型,并使用所述中心词判定规则的左部为入口创建所述中心词判定规则的索引。
4.如权利要求3所述的结构化查询语句生成方法,其特征在于,在生成解析树时,且所述表达式规则的左部被切词方案的一个片段满足时,该片段是指所述切词方案中一个或多个连续的切词分量,该方法还包括:
以该片段为子节点新建一个解析节点,在原来的切词方案中用该新建解析节点替换该片段以生成新的切词方案,从而实现对切词方案的消解,将切词方案消解到只有一个切词分量时,该切词分量即为生成的解析树;及
执行中心词判定,并执行所述表达式规则的右部以初始化该新建解析节点的属性。
5.如权利要求4所述的结构化查询语句生成方法,其特征在于,在表达式规则右部的属性设置脚本中包含上下文函数时,该方法还包括:
计算属性值中的上下文函数,并将上下文函数本身替换为上下文函数的计算结果。
6.如权利要求4所述的结构化查询语句生成方法,其特征在于,所述中心词判定在根据领域规则或表达式规则创建新解析节点时,包括如下步骤:
若所述新建解析节点的第一层子节点激活领域规则,使用中心词判定规则判定中心词子节点;或
若所述新建解析节点的第一层子节点匹配表达式规则,则以拥有领域词条的子节点作为中心词子节点。
7.如权利要求6所述的结构化查询语句生成方法,其特征在于,在确定所述新建解析节点的中心词子节点后,按以下原则设置所述新建解析节点的about属性值和map属性值:
若所述新建解析节点的中心词子节点为嵌套子节点,将所述新建解析节点的about属性值和map属性值分别设置为中心词子节点的about属性值和map属性值;或若所述新建解析节点的中心词子节点本身为非嵌套子节点,以该中心词子节点的正文为所述新建解析节点的about属性值,并且以所述领域词条中的map属性值为所述新建解析节点的map属性值。
8.如权利要求3所述的结构化查询语句生成方法,其特征在于,该方法还包括如下步骤来判断所述领域规则是否被激活:
根据切词分量所关联的表、字段来判定连续的切词分量是否匹配领域规则的左部,包括如下步骤:
提取切词分量i,从该切词分量i对应的map属性值中提取其对应的表tbli;
考查切词分量i的后续分量j(j=i+k),从该后续分量j对应的map属性值中提取分量j对应的表tblj,k的初始值初始化为1,在该后续分量j的map属性为空时将k加1,以便尝试下一个分量;
获取切词分量i和后续分量j之间、切词分量i之前及切词分量j之后存在的所有谓词分量构成的集合PredSet;
对于所述集合PredSet中的每个谓词分量P,分别与表tbli、表tblk构成元组(P,tbli,tblj),在所述领域规则的索引中查找元组(P,tbli,tblj);
在所述领域规则的索引中存在以(P,tbli,tblj)为左部的领域规则时,激活该领域规则;及
执行被激活的领域规则的右部,以切词分量i、j以及相应的谓词分量p作为一层子节点添加一个新的解析树节点。
9.如权利要求1所述的结构化查询语句生成方法,其特征在于,该方法还包括:
根据所述的第二规则对所述的切词方案进行解析,所述的切词方案包括切词分量,当所述的切词方案中存在连续的切词分量匹配所述第二规则时,并且被匹配规则的dsns参数与已被使用规则的dsns参数的交集不为空、该dsns参数值为列表型、且当前用户的权限满足被匹配规则的rights参数要求时,利用所述第二规则对所述切词方案中的切词分量进行消解,包括:
新切词方案创建步骤:将以这些连续的切词分量为子节点创建一个新的切词分量,然后以原来的切词方案为基础,用新的切词分量替换上述匹配规则的切词分量,以构成一个新的切词方案;及
重复执行所述的新切词方案创建步骤,直至新的切词方案不再有切词分量组成的片段匹配所述第二规则或新的切词方案中只剩一个切词分量。
10.如权利要求1所述的结构化查询语句生成方法,其特征在于,所述解析树的第一层子节点的全局查询参数根据如下步骤获取:
若该第一层子节点是嵌套子节点,为该嵌套子节点生成局部查询参数,把该嵌套子节点下的所有第一层子节点的全局查询参数代入该嵌套子节点的局部查询参数,得到该嵌套子节点的全局查询参数;或
若该第一层子节点不是嵌套子节点,则确定该第一层子节点的局部查询参数为全局查询参数。
11.如权利要求1所述的结构化查询语句生成方法,其特征在于,在对所述自然语言查询语句进行切词时,对产生歧义的切词分量进行歧义消解:
在所述切词分量对应的术语存在多重解释时,舍弃不能与上下文构成解析树的切词分量以及舍弃包含这些切词分量的切词方案;或
在存在多个解析树时,舍弃不能构成全局查询参数的子节点所对应的切词分量以及舍弃包含这些切词分量的解析树。
12.如权利要求1所述的结构化查询语句生成方法,其特征在于,所述根据所述解析树的根节点生成局部查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数的步驟包括:
(1)初始化该根节点的局部查询参数;
(2)判断该根节点的第一层子节点是否包括嵌套节点,在该根节点的第一层子节点不包括嵌套节点时,执行步骤(6),或者在该根节点的第一层子节点包括嵌套节点时,执行步骤(3);
(3)判断该根节点的所有第一层子节点是否扫描完成,在该根节点的所有第一层子节点扫描完成时,执行步骤(4),或者在该根节点的第一层子节点未扫描完成时,执行步骤(5)
(4)计算该根节点的所有第一层子节点的全局查询参数,执行步骤(6);
(5)将该未被扫描的第一层子节点视为新的根节点,执行递归调用流程,返回步骤(1);
(6)得到该根节点的全局查询参数;
(7)判断步骤(6)中的根节点是否为原始根节点,在步骤(6)中的根节点为原始根节点时,结束本流程,或者在步骤(6)中的根节点不是原始根节点时,执行步骤(8);及(8)将该全局查询参数代入到上一级节点的局部查询参数,然后流程返回步骤(6),其中,所述的上一级节点是原始根节点或者是原始根节点下的子节点。
13.—种结构化查询语句生成系统,应用于电子装置,其特征在于,该系统包括:
输入处理模,用于获取自然语言查询语句;
切词模块,用于利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案;
语义解析模块,用于利用预设的第二规则,在所述切词方案上生成解析树;
查询分析模块,用于根据所述解析树的根节点生成局部查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数;及查询语句生成模块,用于根据所述解析树的根节点的全局查询参数生成结构化查询语句。
14.如权利要求13所述的结构化查询语句生成系统,其特征在于,所述的预设的词典包括领域词典、公共词典及/或列名词典,所述的第一规则包括命名实体识别规则。
15.如权利要求13所述的结构化查询语句生成系统,其特征在于,所述的预设的第二规则包括领域规则、表达式规则及/或中心词判定规则,其中:
所述领域规则以语义关系三元组为左部,以一组相应的属性设置脚本为右部,并使用所述领域规则的左部为入口创建所述领域规则的索引;
所述表达式规则的左部用于定义表达式的形式化特征,右部也包含一组相应的属性设置脚本;及
所述中心词判定规则左部为由关联类型构成的有序二元组,右部则指出中心词子节点应该具备的关联类型,并使用所述中心词判定规则的左部为入口创建所述中心词判定规则的索引。
16.如权利要求13至15中任一项所述的结构化查询语句生成系统,其特征在于,该系统还包括:
数据导入模块,用于读入关系模型和关系数据,生成并编辑所述预设的词典;
数据管理模块,用于对所述预设的词典及第一规则、第二规则进行管理,包括浏览、查找、编辑、导出、检索、匹配操作;
索引建立模块,用于生成所述预设的词典及第一规则、第二规则所相应的索引。

说明书全文

结构化查询语句生成系统及方法

技术领域

[0001] 本发明涉及检索技术,尤其涉及一种结构化查询语句生成系统及方法。

背景技术

[0002] 随着互联网技术的发展,用户对精准查询的要求越来越高。传统的搜索引擎只能机械地对用户输入的查询语句进行切词处理,并不能真正理解用户的意图和要求,返回的查询结果偏差很大,在应用至手机上时尤其影响用户体验。并且,无论是企业还是网站,有大量数据是存放在关系数据库中的,这些数据通常不会直接在网页上发布,所以不能为搜索引擎所访问,因此,这些数据也根本不会在查询结果中出现。
[0003] 此外,在大数据时代,也面临着人机交互问题:在众多数据源的背景下,如何为用户提供一种简洁的查询手段而不是复杂的菜单系统;在大数据背景下,对数据进行各种统计、挖掘分析的结果,如何能被用户很容易地访问到。
[0004] 因此,允许用户直接使用自然语言提出检索要求,由计算机系统在理解用户输入的基础上,自动完成有关检索,返回符合用户要求的精准的检索结果,是一个对数据检索进行优化的解决方案。
[0005] 目前,实现上述解决方案的过程是,获取用户输入的自然语言查询语句;根据用户输入的自然语言查询语句生成结构化查询语句,通过结构化查询语句查询或搜索得到与自然语言查询语句对应的查询结果。
[0006] 目前常有的生成结构化查询语句的方法是:获取用户输入的自然语言查询语句;将自然语言查询语句与查询模板进行四配,得到与自然语言查询语句匹配的查询模板;根据与自然语言查询语句匹配的查询模板,得到结构化查询语句。
[0007] 然而,如上文所述的生成结构化查询语句的方法,需要事先由人工配置查询模板,为每个查询模板编写结构化查询语句,因此至少存在以下问题:1)人工配置查询模板、编写结构化查询语句的代价非常高昂,且效率低下;2)不同的用户可能会采用不同的表达方式来表达自然语言查询语句,这样会使查询模板无法被正确匹配,影响匹配的准确性;3)当自然语言查询语句是嵌套的问句时,查询模板无法进行匹配,导致语义损失,无法满足大规模工业化应用的要求。

发明内容

[0008] 鉴于以上内容,有必要提供一种结构化查询语句生成系统及方法,可根据用户输入的自然语言进行语义分析,继而生成相应的结构化查询语句,无需通过人工编制查询模板,更无需进行模板匹配。
[0009] 进一步地,还有必要提供一种结构化查询语句生成系统及方法,可自动识别语义相同但表达形式不同的查询语句,从而确保返回的检索结果不受语言习惯的偏差的影响。
[0010] 此外,还有必要提供一种结构化查询语句生成系统及方法,可处理复杂嵌套的查询,确保在不损失语义的条件下生成相应的复合查询语句。
[0011] 一种结构化查询语句生成方法,应用于电子装置,该方法包括:获取自然语言查询语句;利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案;利用预设的第二规则,在所述切词方案上生成解析树;根据所述解析树的根节点生成局部查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数;及根据所述解析树的根节点的全局查询参数生成结构化查询语句。
[0012] 一种结构化查询语句生成系统,应用于电子装置,该系统包括:输入处理模,用于获取自然语言查询语句;切词模块,用于利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案;语义解析模块,用于利用预设的第二规则,在所述切词方案上生成解析树;查询分析模块,用于根据所述解析树的根节点生成局部查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数,及查询语句生成模块,用于根据所述解析树的根节点的全局查询参数生成结构化查询语句。
[0013] 相较于现有技术,所述的结构化查询语句生成系统及方法,可对自然语言进行语义分析后生成结构化查询语句,既便于用户输入检索条件,又可提高数据检索的精准度及检索效率,实现在大数据时代、手机智能终端时代的背景下应用大规模的自然语言获取相关检索数据。附图说明
[0014] 图1是本发明结构化查询语句生成系统的较佳实施方式的硬件架构图。
[0015] 图2是本发明结构化查询语句生成系统的较佳实施方式的功能模块图。
[0016] 图3是本发明结构化查询语句生成方法的较佳实施方式的流程图
[0017] 图4是本发明结构化查询语句生成方法中的步骤S 8的细化流程图。
[0018] 图5是本发明结构化查询语句生成方法的较佳实施方式的表达式规则右部的执行流程图。
[0019] 图6是本发明结构化查询语句生成方法的第一解析树的示意图。
[0020] 图7是本发明结构化查询语句生成方法的基于第一解析树的查询结果的示意图。
[0021] 图8是本发明结构化查询语句生成方法的第二解析树的示意图。
[0022] 图9是本发明结构化查询语句生成方法的参数代入过程的示意图。
[0023] 图10是本发明结构化查询语句生成方法的第三解析树的示意图。
[0024] 图11是本发明结构化查询语句生成方法的第四解析树的示意图。

具体实施方式

[0025] 如图1所示,是本发明结构化查询语句生成系统的较佳实施方式的硬件架构图。所述的结构化查询语句生成系统10应用于电子装置1中,所述的电子装置1可以是计算机、服务器、手机、平板电脑笔记本电脑个人数字助理等装置。用户可以利用电子装置1与网络的连接来访问不同的网站服务器或者内部数据库,从而实现对所需信息的检索。所述的网络可以是互联网(Intemet)或者是内部网(Intranet)。
[0026] 所述的结构化查询语句生成系统10用于根据预设的各类词典及规则对用户输入的自然语言查询语句进行切词处理,基于获得的切词方案生成解析树,并在解析树中各个节点的查询参数的基础上生成语义完整的结构化查询语句,从而实现对自然语言查询语句到结构化查询语句的自动转换。
[0027] 所述的电子装置1包括处理器11以及存储装置12。所述处理器11用于执行所述结构化查询语句生成系统10以及所述电子装置1内安装的各类软件,例如橾作系统等。所述存储装置12可以是硬盘,或者其他类型的存储卡或存储设备。所述的存储装置12用于存储各类数据,例如,文件、影像、橾作日志等信息。
[0028] 如图2所示,是本发明结构化查询语句生成系统的较佳实施方式的功能模块图。在本实施方式中,所述结构化查询语句生成系统10包括多个功能模块,分别是:输入处理模块100、切词模块101、语义解析模块102、查询分析模块103以及查询语句生成模块104。
本发明所称的模块是完成一特定功能的程序段,比程序更适合于描述软件在所述控制电子装置1中的执行过程。
[0029] 所述的输入处理模块100获取用户通过手工或语音输入的自然语言查询语句。在本实施方式中,所述的结构化查询语句生成系统10可进一步提供检索界面,该检索界面包括输入栏位以供用户输入所述自然语言查询语句,所述的输入处理模块100则在用户启动数据检索(例如,侦测到回车键被点击或者所述检索界面提供的用于启动数据检索的相关按键或图标被点击)后,获取所述的自然语言查询语句。
[0030] 所述的自然语言查询语句可以是用户以自然语言表述的问句或短语等,或者经过语音识别之后得到的代表用户口语内容的问句或短语等。所述的自然语查询语句可以包含简单数据,也可包含数量范围、时间范围,还可包含术语列表,例如“x和y的每股收益”等。
[0031] 所述的切词模块101利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案。
[0032] 在本实施方式中,所述的预设的词典包括,但不限于:领域词典、公共词典及/或列名词典,所述的第一规则包括,但不限于:命名实体识别规则。在实际应用中,由于不同领域的用户输入的自然语言查询语句的内容的差异性,因此会导致需要用到的词典也会产生差异性。例如,在有些检索应用中会只需要用到特定的领域词典(例如,对“股票”的信息检索)。
[0033] 所述领域词典由领域词条组成,领域词条的定义包括术语、关系参数、关联类型以及同义词列表等属性及相应的属性值。对不同的术语,如果定义相同的关系参数、关联类型,则这些术语之间构成同义词关系。此外,允许术语在所述领域词典中有多重解释,即允许一个术语与关系模型之间存在多个关联。这意味着同一个术语可能在多个词条中作为术语出现,并且在这些词条中,虽然术语相同,但关系参数、关联类型不同。为了提高领域词典的访问效率,可使用术语为入口建立领域词典索引。
[0034] 所述领域词典可根据不同的领域进行分类。
[0035] 所述公共词典是指不依赖于特定领域的日常用词,可以包括名词,例如“国家、姓名、工具、文档、目录”等,也可以包括动词,例如“获取、买入、抛弃、清除”等,还可进一步包括语法词,例如形容词、介词、副词、连词、数词、量词等。相比较而言,上述的领域词典通常是针对特定领域的,大多是名词,例如“股票、五年期国债”等,所述领域词典中尤其还包含map属性,map属性值用来表示在目标数据库中,与所属词条关联的表和字段。
[0036] 所述公共词典由公共词条组成,所述公共词条包括术语、词性等属性。所述词性可遵循GB/T20532-2006《信息处理用现代汉语词类标记规范》进行分词与词性赋码处理。在本实施方式中,所述的公共词典包括的是非领域词,即未被划入领域词典中的词条。在所述公共词典中的术语允许有多重解释,即允许为同一个术语定义多个不同的词标。在这些词条中,术语相同,但词标不同。为了提供公共词典的访问效率,可使用术语为入口建立公共词典索引。
[0037] 所述列名词典用于定义数据库的字段应以何种方式进行显示,由词条组成,词条由表名、字段名、字段别名、内部存储单位等组成。例如表stock中的字段name应显示为“股票名称”,记作:“stock.name as股票名称”。针对目标数据库字段的术语,需要在所述列名词典中定义该术语与哪个数据库的哪个表中的哪个字段相关联。所述列名词典用于在生成结构化查询语句时,提供生成SELECT子句所需的别名,以提高检索结果的可读性。为了提高列名词典的访问效率,可使用表名或字段名为入口创建列名词典索引。
[0038] 命名实体(named entity)可以是人名、机构名、地名以及其他所有以名称为标识的卖体。更广泛的命名实体还包括数字、日期、货币、地址等等。
[0039] 所述命名实体识别规则,是指用于识别用户输入中的时间、数量、时段、数量范围、人名、组织名、职务名称等形式特征较强的术语的文法规则。所述命名实体识别规则的左部为符合右部特征的字符串可以改写成的符号,右部为语法特征。为了提高命名实体识别的效率,可以命名实体识别规则的右部为入口创建索引。
[0040] 针对一个问句,所述的切词模块101可能产生多个切词方案,每个切词方案由若干个切词分量构成,所述切词分量可以是树的结构,其中,该树的根节点为词标,子节点为切词分量对应的正文(可称为“分词正文/词标”)。所述切词方案主要用于生成解析树。由于所述切词分量本质上是一棵树,所以所述切词方案就是一个树的集合。因此,所述切词方案本身也是层次化的。
[0041] 在本实施方式中,如果所述切词分量对应的正文是领域词典中的词语,则以领域词条的map属性值为词标;如果切词分量对应的正文是公共词典中的词语,则以词性为词标;如果切词分量是命名实体,则以实体类型为词标(例如数量、时间等)。
[0042] 例如,针对问句的正文TEXT形成的某个切词方案记作:SEG={C0,C1,C2,...,CN-1},表示切词方案SEG由N个切词分量构成。切词分量Ci记作:Ci=(TEXTi,FEATUREi,STARTi,NEXTi),其中TEXTi表示切词分量Ci对应的问句正文TEXT中的片段(即切词分量对应的正文),FEATUREi表示切词分量Ci的特征,STARTi表示正文片段TEXTi在问句正文TEXT中的起始位置,NEXTi表示TEXTi在TEXT中的结束位置。将TEXT生成的切词方案SEG中的N个分量的正文连起来正好为TEXT本身,这一事实记作TEXT=TEXT0+TEXT1+...+TEXTN-1。
[0043] 为便于描述,将所述的切词分量Ci简记为“正文片段(即TEXTi,下同)/特征(即FEATUREi,下同)”,其中FEATUREi的取值取决于“正文片段TEXTi”是领域词还是公共词。如果TEXTi是领域词,则FEATUREi的取值为用TEXTi所对应的目标数据库的表和字段构成的点连接表达式。例如切词分量“长期债务/finance.LD”中,“长期债务”为分量对应的正文片段,“finance.LD”为该分量的特征,其中finance代表目标数据库中名为finance的表,LD代表finance表中名为LD的字段(LD是Long Term Debt的缩写);如果“术语”是公共词,则“特征”为“术语”的词性,例如“长期/a、债务/n”中,a代表形容词,n代表名词,词性标记的记法参照国标GB/T 20532-2006《信息处理用现代汉语词类标记规范》中定义的标准。
[0044] 所述的语义解析模块102利用预设的第二规则,在所述切词方案上生成解析树。上文所述的各类词典及第一、第二规则的生成、设置和管理可利用现有的数据进行导入即可,也可根据检索需求进行生成,针对生成的详细过程,将在下文进行介绍。上文所述的各类词典及第一、第二规则的相关数据可存储在存储装置12中。
[0045] 所述的预设的第二规则包括,但不限于:领域规则、表达式规则及/或中心词判定规则,所述中心词判定规则用于确定所述解析树的各个节点的节点属性。
[0046] 所述领域规则以语义关系三元组为左部,以一组相应的属性设置脚本为右部。该语义关系三元组表达的是表和表之间的特定语义关系内涵。所述语义关系三元组,可以记作“pred(tbli,tblj)”或“(pred,tbli,tblj)”,其中,pred为谓词。谓词可以为空,为空时,记作NULL。其中“(tbli,tblj)”被称为关系二元组。
[0047] 所述属性设置脚本可以是对subj、obj、nodes、links、outputs、groups、orders、dsn、right等属性的设置,分别介绍如下:
[0048] subj属性和obj属性用于表示tbli和tblj的色。因为“(tbli,tblj)”是无序的,即在实际使用时,用“(tblj,tbli)”也可匹配“(tbli,tblj)”领域规则,所以在领域规则的右部需要subj参数和obj参数来标识两个表不同的语义角色。
[0049] nodes属性可以是连接节点,将tbli和tblj按照特定语义关系连接起来的所有表构成的列表。
[0050] links属性可以是连接条件,将上述nodes属性中的表(例如tblO和tbll)连接起来所需的连接条件。
[0051] outputs属性可以是语义关系三元组所要求的出现在SELECT子句中的字段。
[0052] groups属性指定分组表达式,用于构造GROUP BY子句。
[0053] orders属性指定排序表达式,用于构造ORDER BY子句。
[0054] dsns属性指出当前领域规则所针对的数据源,其中,dsn是Data Source Name的缩写。
[0055] rights属性指出要使用当前领域规则需要具备的权限。
[0056] 所述的领域规则可进行预先设置或编辑。两个表之间可能存在多种语义关系,因而一个关系二元组可以关联多条领域规则,在加上谓词后形成的语义关系三元组则可唯一定义一条领域规则。实际应用时,从所述切词方案中提取与各切词分量关联的表,并提取谓词,就可以构造语义关系三元组来对领域规则进行检索。若没有提取到谓词,也可直接用关系二元组来匹配领域规则。为了提高领域规则的检索匹配效率,可使用领域规则左部为入口构造领域规则的索引。
[0057] 可通过如下方式来判断所述领域规则是否被激活:根据切词分量其所关联的表、字段来判定连续的切词分量是否匹配领域规则的左部,具体包括如下步骤:
[0058] 提取切词分量i,从该切词分量i对应的map属性值中提取其对应的表tbli;
[0059] 考查切词分量i的后续分量j(j=i+k),从该后续分量j对应的map属性值中提取分量j对应的表tblj,k的初始值初始化为1,在该后续分量j的map属性为空时将k加1,以便尝试下一个分量;
[0060] 获取切词分量i和后续分量j之间、切词分量i之前及切词分量j之后存在的所有谓词分量构成的集合PredSet;
[0061] 对于所述集合PredSet中的每个谓词分量P,分别与表tbli、表tblk构成元组(P,tbli,tblj),在所述领域规则的索引中查找元组(P,tbli,tblj);
[0062] 在所述领域规则的索引中存在以(P,tbli,tblj)为左部的领域规则时,激活该领域规则;及
[0063] 执行被激活的领域规则的右部,以切词分量i、j以及相应的谓词分量p作为一层子节点添加一个新的解析树节点。
[0064] 所述表达式规则用于识别在用户所输入的自然语言查询语句中的表达式片段。所述表达式规则的左部用于定义表达式的形式化特征,右部为一组相应的属性设置脚本,包括对about、outputs、nodes、constraints、conditions、links、groups、orders、dsns、rights等属性的设置。所述表达式规则的左部是有序的,例如“fmance.EPS,大于,数量”。在生成解析树时,且所述表达式规则的左部被切词方案的一个片段(包括若干个连续的切词分量)满足时,所述的语义解析模块102会以该片段为子节点在所述解析树上创建一个新建解析节点,然后执行中心词判定和表达式规则的右部以初始化该新建解析节点的属性,最后在原来的切词方案中用该新建解析节点替换该片段以生成新的切词方案。
[0065] 为了初始化所述新建解析节点的属性,需要执行所述表达式规则右部。由于在表达式规则右部的属性设置脚本中,可能包含上下文函数,所以在这个过程中需要完成对上下文函数的计算,并用上下文函数的计算结果替换上下文函数出现的位置。
[0066] 所述上下文函数的特征为:嵌入在一个待输出的字符串中,以特定符号如“$”为前导标志,所述上下文函数通常以子节点词标作为参数,以字符串为返回值,该返回值将被用于在待输出的字符串中替换上下文函数。完成上下文函数计算后,待输出字符串中将不再有上下文函数。此外,所述上下文函数可以嵌套,即一个上下文函数可以另一个上下文函数的输出作为其参数。
[0067] 在完成所述上下文函数的计算时,由于用户输入的自然语言查询语句中所使用的单位可能与实际存储单位不一致,因此需要访问单位转换系数表,获得相应的转换系数。所述单位转换系数表有两个参数作为入口:源单位、目标单位,返回值表示从源单位转换为目标单位所需的转换系数。通常所述源单位是指用户实际输入的单位,所述目标单位是指相关字段的默认数据库的存储单位。所述表达式规则和所述单位转换系数表可进行预先定义,并且可以在不同应用间共享。
[0068] 在执行表达式规则右部时,如果不能完成其中包含的所述上下文函数计算,则认为所述表达式规则不能被满足。
[0069] 其中,针对表达式规则被激活后执行规则右部的过程将在图5中进行举例说明。
[0070] 所述中心词判定规则(还可称为“about规则”)左部为由关联类型构成的有序二元组,右部则指出作为后续新建解析节点的中心词子节点应该具备的关联类型。所谓切词分量的关联类型是指切词分量与目标数据库中的表、字段、主关键字段、字段值、视图的关联方式,典型的有对象关联(标记为obj,即与某个表的主管关键字关联),属性关联(标记为prop,即与某个字段关联),值关联(标记为val,即与字段值关联),表关联(记作tbl),视图关联(view)等。所述中心词判定规则可进行预先设定,也可直接导入,并可以在不同应用间共享。为了提高中心词判定规则的访问效率,需要以所述中心词判定规则的左部为入口创建中心词判定规则索引。
[0071] 所述中心词判定是指从匹配一条领域规则或表达式规则的若干个连续的特定切词分量中,找出具有中心词作用的切词分量。所谓中心词是指在一个短语中代表用户希望进一步关注了解的对象的词。例如在短语“每股收益大于1元的股票”中,“股票”就是中心词。
[0072] 一旦判定某个领域规则被激活,则新的解析节点将被创建,新建解析节点的about属性和map属性的设置通过中心词判定来完成,而新建解析节点的其他属性,如links和nodes属性等则根据被激活领域规则的右部来确定。
[0073] 所述中心词判定用于在根据领域规则或表达式规则创建新解析节点时,判定新建解析节点的第一层子节点中,哪个子节点是用户关注的焦点。所述中心词判定分为两种情况:
[0074] 1)如果所述新建解析节点的第一层子节点激活领域规则,应使用中心词判定规则判定中心词子节点。
[0075] 当领域规则被激活时,将据以创建新的解析节点,为了确定新建解析节点的属性,需要提取被激活的领域规则左部的关系二元组成员的关联类型,按其在用户输入的自然语言查询语句中的出现顺序构成有序二元组,然后用这个关系二元组检索中心词判定规则,根据匹配的中心词判定规则的右部所指定的中心词子节点应该具备的关联类型,就可以确定新建节点的中心词子节点。
[0076] 例如(val,prop)=>prop,表示先出现的关系二元组成员的关联类型为val,后出现的关系二元组成员的关联类型为prop,右部则表示应以关联类型为prop的关系二元组成员为新建解析节点的中心词子节点。
[0077] 2)如果所述新建解析节点的第一层子节点匹配表达式规则,则直接以拥有领域词条的子节点作为中心词子节点,无需执行上述判定过程。
[0078] 在确定所述新建解析节点的中心词子节点后,按以下原则设置所述新建解析节点的about属性值和map属性值:
[0079] 如果新建解析节点的中心词子节点为嵌套子节点(即中心词子节点本身还有子节点),则将新建解析节点的about属性值和map属性值分别设置为中心词子节点的about属性值和map属性值;或
[0080] 如果新建解析节点的中心词子节点本身为非嵌套子节点(即中心词子节点本身没有子节点),则以该中心词子节点的正文为新建解析节点的about属性值,以其领域词条中的map属性值为新建解析节点的map属性值。
[0081] 所述语义解析模块102利用所述第二规则来完成所述切词方案与领域规则或表达式规则的匹配,在匹配过程中,可使用上述的领域规则索引来实现对领域规则的快速匹配以及使用上述的表达式规则索引来实现对表达式规则的快速匹配。
[0082] 所述语义解析模块102在所述切词方案的基础上,根据所述领域规则和所述表达式规则生成解析树。在本实施方式中,所述解析树需满足这样的条件:每个非叶子节点的第一层子节点蕴含一个语义关系三元组或者匹配一个表达式。作为一种特殊情况,当切词方案只有一个切词分量时,该切词分量本身即可作为一个解析树。
[0083] 解析树节点(简称解析节点)包括多个属性,例如text、about、map、outputs、nodes、links、conditions、constraints、groups、orders等属性。其中,text属性为解析节点对应的正文;about属性表示子节点中哪个节点是焦点;map属性用于保存about属性值的关联字段;nodes属性表示为了建立语义关系三元组中的关系二元组的连接,需要包括目标数据库中的哪些表;links属性表示为了建立语义关系三元组中的关系二元组的连接,需要包括哪些相应的条件。此外,其余参数类似于查询参数中的定义,起辅助作用,视情况而定是否需要。
[0084] 上文提及的about属性是解析树节点的属性之一,about属性值就是该节点的1层子节点中作为中心词的那个节点,因此根据about属性的值可确定在构成所述解析树节点的一层子节点切词分量中,哪个分量是中心词。当若干连续的切词分量激活了一条领域规则或表达式规则时,将创建一个相应的解析树节点,导致这条规则被激活的那些切词分量将被作为所述解析树节点的一层子节点同时添加到解析树中。所述解析树节点的属性包括about、map等。map属性用来描述所述解析树节点关联的数据库中的表和字段,通常就是在所述解析树节点的一层子节点中作为中心词的分量所关联的表和字段。
[0085] 需要说明的是,由于属性中拥有与查询参数同名的成员,例如nodes,为区别起见,将作为属性的nodes,称为“nodes属性”,而将作为查询参数的nodes,称为“nodes参数”,依此类推。
[0086] 如上文所述,一个切词方案其实就是一个树的集合,在所述语义解析模块102对切词方案的解析过程中,不断根据领域规则或表达式规则来消解切词方案中的切词分量,当一个切词方案中只剩一个切词分量(即一棵树)时,说明已完成了对这个切词方案的语义解析,如果一个切词方案拥有不止一个切词分量,而又无法匹配任何领域规则或表达式规则,则说明该切词方案不能被解析。
[0087] 所述语义解析模块102根据所述领域规则及/或表达式规则来对切词方案序列进行解析,这与通常单纯基于文法规则对用户输入的自然语言查询语句的序列进行解析的做法不同,其优点一是鲁棒性(Robust)较好,避免因为用户的个人表达习惯不同而导致无法完成语义解析,二是支持左递归。
[0088] 在根据所述的第二规则对所述的切词方案进行解析时,所述的切词方案包括切词分量。当所述的切词方案中存在连续的切词分量匹配所述第二规则时,并且被匹配规则的dsns参数与已被使用规则的dsns参数的交集不为空、该dsns参数值为列表型、且当前用户的权限满足被匹配规则的rights参数要求时,利用所述第二规则对所述切词方案中的切词分量进行消解,包括:
[0089] 新切词方案创建步骤:将以这些连续的切词分量为子节点创建一个新的切词分量,然后以原来的切词方案为基础,用新的切词分量替换上述匹配规则的切词分量,以构成一个新的切词方案;及
[0090] 重复执行所述的新切词方案创建步骤,直至新的切词方案不再有切词分量组成的片段匹配所述第二规则或新的切词方案中只剩一个切词分量。
[0091] 如果新的切词方案中只剩一个切词分量,表示解析完成,切词方案中剩余的切词分量作为所生成的解析树的根节点。
[0092] 所述语义解析模块102不断对所有切词方案重复这个过程,直到不再有切词方案发生规则匹配为止,这时只有一个切词分量的切词方案中的切词分量就是解析树。
[0093] 将匹配特定规则的切词分量合并为一个新的切词分量之后,还要执行中心词判定和领域规则或表达式规则的右部以初始化这个新建切词分量的根节点属性,以便后续为解析树的节点生成查询参数。
[0094] 所述的查询分析模块103根据所述解析树的根节点生成局部查询参数,根据所述解析树第一层子节点生成全局查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数。在本实施方式中,在确定了根节点的全局查询参数后,即可生成语义完整的结构化查询语句。
[0095] 解析树中每个节点的查询参数包括全局查询参数及/或局部查询参数。
[0096] 根据所述解析树的各个节点,可以为每个嵌套子节点生成局部查询参数,把一个节点的所有第一层子节点的全局查询参数代入该节点的局部查询参数,就可以得到该节点的全局查询参数。所述嵌套子节点,是指本身作为另外一个节点的第一层子节点,同时又拥有子节点的解析树节点。例如,对于解析树中的节点Node,将节点Node的所有第一层子节点的全局查询参数代入节点Node的局部查询参数之后,就可以得到节点Node的全局查询参数。
[0097] 如果一个节点是非嵌套子节点,则该节点的局部查询参数就是全局查询参数。所述非嵌套子节点,是指其第一层子节点中不包含嵌套子节点的解析树节点。
[0098] 针对上文所述的全局查询参数与局部查询参数,举例说明如下:假设节点Node的第一层子节点中存在嵌套子节点Child,则子节点Child也应有自己的查询参数,子节点Child的查询参数就是节点Node的子查询参数,反过来,节点Node的查询参数就是子节点Child的父查询参数。因此,将节点Node的第一层子节点的全局查询参数代入节点Node的局部查询参数,也可以认为是将节点Node的子查询参数代入节点Node的查询参数,或进一步简称为将子查询参数代入父查询参数。
[0099] 所述的全局查询参数或局部查询参数的结构相同,均可由heads、outputs、nodes、links、constraints、conditions、groups和orders等列表属性组成,其中:heads属性用于生成SELECT子句;outputs属性用于生成SELECT子句;nodes属性用于生成FROM子句;links属性用于生成WHERE子句;constraints属性用于生成WHERE子句;conditions属性用于生成WHERE子句;groups属性用于生成GROUP BY子句;及orders属性用于生成ORDER BY子句。
[0100] 所述的查询语句生成模块104根据所述解析树的根节点的全局查询参数生成语义完整的结构化查询语句。在本实施方式中,所述结构化查询语句可以是SQL(结构化查询语言,Structured Query Language)语句、SPARQL(Simple Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议)语句,或是其他类型的SQL语句。
[0101] 所述的查询语句生成模块104根据结构化查询语句的参数特征,将解析树的根节点的全局查询参数转换为结构化查询语句的参数(可参考下文提供的三个实施例),从而得到所述结构化查询语句。
[0102] 此外,在其他实施方式中,所述的结构化查询语句生成系统10进一步包括数据导入模块105、数据管理模块106以及索引建立模块107。
[0103] 所述的数据导入模块105导入各类关系模型和关系数据以生成上文所述各类词典及第一、第二规则(例如,所述领域词典、所述领域规则、所述列名词典等)的元数据(Metadata),并完成对所述领域规则、表达式规则、中心词判定规则等的设置。
[0104] 所述元数据是描述数据的数据(data about data),主要是描述数据属性(property)的信息,包括指示储存位置、历史资料、资源寻找、文件记录等功能。此外,在所述元数据中,有部分内容需进行编辑或设置,例如所述领域词典中关联类型为obj、prop的词条等。
[0105] 例如,针对领域词典的数据导入,所述的数据导入模块105读入关系模型和关系数据,生成并编辑领域词典,包括:对表名、字段、字符型字段值分别进行处理。具体而言,包括如下步骤:
[0106] (1)按照相关领域的日常表达习惯为目标数据库中的表创建对应的词条,所述词条的nodes参数应被初始化为表名,type属性被初始化为“obj”,其余字段为空,术语部分可进行人工输入或者将现有数据进行导入;
[0107] (2)按照相关领域的日常表达习惯为目标数据库中的字段创建对应的词条,所述词条的map参数和nodes参数应被初始化为相应的复合字段名和表名,type属性被初始化为“prop”,其余字段为空,术语部分可进行人工输入或者将现有数据进行导入;及[0108] (3)按照相关领域的日常表达习惯为目标数据库中的字符型字段值创建对应的词条,所述词条的术语可被初始化为该字段值或含义相同的文字表达,map参数应被初始化为相应复合字段名,type属性被初始化为“val”。
[0109] 又如,针对所述领域规则的生成和编辑,若所述关系模型中包括N个表,则所述的数据导入模块105可生成N×N个关系二元组,然后,为每个关系二元组添加谓词关系和相应的关系参数。该谓词关系和相应的关系参数可由用户直接编辑或者导入已有数据。
[0110] 又如,针对所述列名词典的词条的生成和编辑,所述的数据导入模块105可为每个列生成列名词典词条,以表名、字段名为入口,创建一个新的入口,然后由用户填充每个入口的alias属性和defaultUnit属性(该defaultUnit属性表示这个字段的内部存储单位)。如果当前字段没有单位,则该defaultUnit属性为空。
[0111] 在元数据准备阶段,这种由系统自动生成脚本框架,在自动导入的基础上再由人工做必要的填充的做法是很有优势的,可以大大节省时间、减少错漏几率。除了上述元数据的准备之外,为了使本发明提供的系统能够顺利工作,还需要导入公共词典、表达式规则、单位转换系数表等(导入方式可参考上述举例说明)。
[0112] 所述的数据管理模块106对图3所示流程中的步骤S4和S6中涉及的各类词典及第一、第二规则进行管理,包括对所述领域词典、公共词典、列名词典、命名实体识别规则、领域规则、表达式规则、中心词判定规则等实现浏览、查找、编辑、导出、检索、匹配等功能。
[0113] 所述的数据管理模块106可读入各种配置文件,发现并汇报配置文件中存在的语法错误,并直接生成相应的索引,还可根据索引重新导出各种配置文件。所述配置文件包括领域词典定义文件、公共词典定义文件、命名实体规则定义文件、领域规则定义文件、列名词典定义文件、表达式规则定义文件、单位转换系数定义文件、中心词判定规则定义文件等。
[0114] 所述的数据管理模块106在利用不同的索引对各类词典或规则进行检索时可实现模糊匹配功能。例如,允许以“*”代替任意个字符,用“?”代替一个字符,从而满足特殊检索需求。
[0115] 所述的数据管理模块106支持相似匹配功能。例如,假设领域词典中存在以“每股未分配利润”为术语的词条,并且相似匹配的值设置为0.8,如果输入“每股未分利润”,因为输入与“每股未分配利润”之间的相似度达0.923,仍可以得到“每股未分配利润”作为相似匹配的结果。这个特点可以提高对用户不同输入习惯的适应性,尤其是适应不同的缩略习惯,可基于编辑距离或基于频谱特征实现所述相似匹配的计算。
[0116] 所述的索引建立模块107对上文所述的各类词典及第一、第二规则建立相对应的索引(例如领域词典索引、领域规则索引、公共词典索引等),以便于所述数据管理模块106可快速根据索引查找到相对应的数据。
[0117] 此外,针对表达式规则,所述的数据管理模块106可进一步访问预先存储的单位转换系数表,提供对单位转换系数的浏览、查找、编辑、导入、导出、以及检索功能,并计算相应的转换系数。例如,所述的数据管理模块106可输入源单位查询对应的所有目标单位,根据用户输入的源单位快速查询到所有以用户输入为源单位的目标单位及其单位转换系数,还可输入目标单位查询对应的所有源单位,根据用户输入的目标单位快速查询到所有以用户输入为目标单位的源单位及其单位转换系数。
[0118] 如图3所示,是本发明结构化查询语句生成方法的较佳实施方式的流程图。首先,步骤S2,所述的输入处理模块100获取用户通过手工或语音输入的自然语言查询语句。
[0119] 步骤S4,所述的切词模块101利用预设的词典及第一规则,对所述自然语言查询语句进行切词,并得到切词方案。
[0120] 步骤S6,所述的语义解析模块102利用预设的第二规则,在所述切词方案上生成解析树。
[0121] 步骤S8,所述的查询分析模块103根据所述解析树的根节点生成局部查询参数,根据所述解析树第一层子节点生成全局查询参数,及代入所述解析树第一层子节点的全局查询参数并得到所述解析树的根节点的全局查询参数。在本实施方式中,在确定了根节点的全局查询参数后,即可生成语义完整的结构化查询语句。步骤S8的细化流程可参考图4所示的流程图。
[0122] 步骤S10,所述的查询语句生成模块104根据所述解析树的根节点的全局查询参数生成语义完整的结构化查询语句,然后,结束本流程。在本实施方式中,所述结构化查询查询语句可以是SQL(结构化查询语言,Structured Query Language)语句或SPARQL(Simple Protocol and RDF Query Language,是为RDF开发的一种查询语言和数据获取协议)语句。
[0123] 下文将用三个不同的实施例详细介绍结构化查询语句的生成过程。
[0124] 如图4所示,是本发明结构化查询语句生成方法中的步骤S8的细化流程图。本细化流程图的执行主体为所述的查询分析模块103。
[0125] 为了便于描述,假设图4中涉及解析树的根节点对应的正文为领域词条。于步骤S80,初始化该根节点的局部查询参数(具体实现方式可参照下文所提供的第一实施例)。
[0126] 在其他实施方式中,如果所述解析树的根节点对应的正文不是领域词条,那么该根节点的局部查询参数为空。
[0127] 步骤S81,判断该根节点的第一层子节点是否包括嵌套节点。若该根节点的第一层子节点不包括嵌套节点,所述的查询分析模块103可确定该根节点的局部查询参数就是全局查询参数,则直接执行步骤S85。若该根节点的第一层子节点包括嵌套节点,执行步骤S82。
[0128] 步骤S82,判断该根节点的所有第一层子节点是否扫描完成。若该根节点的所有第一层子节点已经扫描完成,执行步骤S83。若该根节点还有第一层子节点未扫描完成,执行步骤S84。
[0129] 步骤S83,计算该根节点的所有第一层子节点的全局查询参数,然后,流程转至步骤S85。
[0130] 步骤S84,将该未被扫描的第一层子节点视为新的根节点,执行递归调用流程,即返回步骤S80以确定该新的根节点的全局查询参数。其中,具体实现方式可参照下文第二实例中所揭示的方法,将该新的根节点的全局查询参数代入到原始的根节点的局部查询参数中。
[0131] 需要说明的是,在第一遍执行图4所示流程时,步骤S80、S81、S82、S83中的根节点为所述解析树的原始根节点(也可理解为该解析树的第一级根节点),而在步骤S84执行了递归调用流程(即步骤S84后流程返回了步骤S80)后,则在该递归调用流程的执行过程中,步骤S80、S81、S82、S83中涉及的根节点即为步骤S84中所确定的新的根节点及多层子节点进行层层解析,从而最终得到原始根节点的全局查询参数。
[0132] 在执行递归调用流程时,如果该新的根节点的第一层子节点中没有嵌套节点,则递归终止(流程会转至步骤S85),可确定该新的根节点的局部查询参数就是全局查询参数。
[0133] 步骤S85,得到该根节点的全局查询参数。
[0134] 步骤S86,判断步骤S85的根节点是否为原始根节点(参考上文所述内容)。若步骤S85中的根节点为原始节点,结束本流程。
[0135] 若步骤S85中的根节点不是原始根节点,于步骤S87,将步骤S85所得到的全局查询参数代入到上一级节点(该上一级节点可以是原始根节点或者是该原始根节点下被视作新的根节点的一个子节点)的局部查询参数,然后,流程返回至步骤S85。
[0136] 如图5所示,是本发明结构化查询语句生成方法的较佳实施方式的表达式规则右部的执行流程图,将对一个表达式规则被激活时执行该表达式规则右部的流程进行举例说明。
[0137] 首先,步骤S20,假设领域词典中的词条以及假设表达式规则,例如,假设在领域词典中存在词条:“总资产”:map=“finance.TA”,type=“prop”,并假设存在以下表达式规则:“X,超过,数量”=>
[0138] about=“X”,
[0139] nodes=[$TABLE(X)],
[0140] conditions=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X)]
[0141] 这个规则的含义是,如果遇到连续切词方案匹配“X,大于,数量”,则执行以下操作:创建一个新节点,并且将新节点的about参数设为“X”,在完成上下文函数计算后,将该规则右部的nodes参数和conditions参数分别添加到新节点的nodes、conditions属性中。
[0142] 其中,关于本实施例中所使用的上下文函数,简介如下:“$MAP(X)”,MAP是指返回“X”在领域词典中的map属性值,例如如果X为“每股收益”则因其在领域词典中相应词条的map属性为“finance.EPS”,该函数将返回“finance.EPS”;
[0143] “$TABLE(X)”表示返回“X”的关联字段所在的表,同样取自领域词典;
[0144] “$VAL(数量)”,VAL是指Value,返回“数量”的数值部分,例如“3元”就是一个“数量”,则$VAL(数量)的返回值为3;
[0145] “@UCOE(数量,$MAP(X))”,UCOE是指Unit Coefficiene,即单位系数。含义为:返回“数量”节点中的单位(例如“元”)到“X”的关联字段的默认存储单位的转换系数。例如“每股收益”的默认存储单位是“元/股”,于是以“元,元/股”查找单位转换系数表,其系数值为1,于是UCOE函数的返回值将为1。
[0146] 步骤S22,所述的切词模块101根据用户输入的自然语言查询语句生成切词方案。假设输入的自然语言查询语句中包含“总资产超过100亿元”,并且得到包含以下切词分量的切词方案“总资产/fmance.TA,超过/p,100亿元/数量”。其中:“总资产/finance.TA”,是所述切词模块101根据领域词典的索引判定的,因此以“总资产”对应的词条的map属性值“finance.TA”为词标;“超过/p”是所述切词模块101根据公共词典判定的,词标“p”表示“介词”;“100亿元/数量”是所述切词模块101根据命名实体识别规则的索引判定的。
然后,该切词方案将被提交给所述语义解析模块102进行处理。
[0147] 步骤S24,所述的语义解析模块102根据该切词方案判定表达式规则。例如,所述的语义解析模块102根据该切词方案中的片段“总资产/finance.TA,超过/p,100亿元/数量”,判定本实施例假设的表达式规则将被激活:
[0148] “X,超过,数量”=>
[0149] about=“X”,
[0150] nodes=[$TABLE(X)],
[0151] conditions=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X)]
[0152] 步骤S26,所述的语义解析模块102创建新的解析节点(假设该新的解析节点是EXPR)。所述的语义解析模块102将以“总资产/fmance.TA,超过/p,100亿元/数量”为第一层子节点创建一个新的解析节点EXPR,构成一个新的解析树,并以该新的解析树替换原来切词方案中的分量“总资产/finance.TA,超过/p,100亿元/数量”。
[0153] 步骤S28,所述的语义解析模块102执行所匹配的表达式规则右部,初始化该新的解析节点EXPR的属性,并结束本流程。
[0154] 步骤S28中包括以下操作:
[0155] 将EXPR节点的about属性值设置为X,在本例中即为“总资产”;
[0156] 将EXPR节点的map属性值设置为“总资产”的领域词条的map属性值,在本例中即为“finance.TA”;
[0157] 完成nodes和conditions属性值中的上下文函数计算后,分别添加到EXPR节点的nodes和conditions属性中:
[0158] 对于本实施例中所述表达式规则右部中的“nodes=[$TABLE(X)]”,X即为“总资产”,而“总资产”关联的表就是“finance”,因此执行上下文函数“$TABLE(X)”,得到返回值“finance”;
[0159] 对于 本 例 表达 式 规 则右 部 中 的“conditions=[$MAP(X)>$VAL( 数量)*$UCOE(数量,$MAP(X))]”:
[0160] “$MAP(X)”,MAP是指元数据词典中的map参数,该函数“$MAP(X)”表示返回提取X的map属性,本实施例中X即为“总资产”,而“总资产”的map属性为“finance.TA”,因此执行函数“$MAP(X)”将得到返回结果“finance.TA”;
[0161] “$VAL(数量)”函数表示返回“数量”节点的数值部分,例如,如果“数量”节点的正文为“3元”,则函数“$VAL(数量)”的返回值将为3;
[0162] “$UCOE(数量,$MAP(X))”函数表示返回“数量”节点中的单位(如上例“元”)到X节点的关联字段的默认存储单位(或“内部存储单位”)的转换系数。为了得到这个转换系数,就需要以当前单位和默认存储单位为入口检索单位转换系数表。在本例中,$UCOE(数量,$MAP(X))”函数的计算分为两步:<1>完成其中嵌套函数“$MAP(X)”的计算,本例中X即为“总资产”,而“总资产”关联字段为“finance.TA”,于是得到“$UCOE(数量,finance.TA)”;<2>完成“$UCOE”函数的计算,假设,“finance.TA”在数据库中的默认存储单位为“万元”,而用户使用的是“亿元”单位,则系统将以“亿元,万元”为入口检索转换系数表,得到转换系数(即函数值)为10000,表示为了把“亿元”转换为“万元”,需要乘以10000。所述的语义解析模块102最后得到EXPR节点的如下属性:
[0163] about=“总资产”
[0164] map=“finance.TA”
[0165] nodes=[finance]
[0166] conditions=[finance.TA>100*10000]。
[0167] 基于上文介绍的所述结构化查询语句生成系统10中各个模块的功能以及各个流程图,为便于理解,下文将用三个实施例来描述结构化查询语句的具体生成过程。
[0168] 在第一实施例中,以用户输入的自然语言查询语句仅包括一个无嵌套、无歧义的三元组为例进行说明,本实施例的目的是表现根据领域规则产生解析树,执行领域规则右部以初始化新建解析节点的属性,进而生成查询参数的操作特征。
[0169] 首先,假设用户输入:“航空动的每股收益”,此输入中只包含一个三元组,既无嵌套,也无歧义。
[0170] 为了便于介绍第一实施例,进一步假设如下:
[0171] (1)在领域词典中存在以下词条:
[0172] “航空动力”:map=“stock.name”,type=“val”;
[0173] “每股收益”:map=“fmance.EPS”,type=“prop”。
[0174] (2)领域规则中存在以下领域规则:
[0175] 属于(finance,stock)=>
[0176] nodes=[finance,stock],links=[finance.Stock_id=stock.id]
[0177] (3)存在以下中心词判定规则:
[0178] (val,prop)=>prop。
[0179] 这条中心词判定规则表示,如果三元组的subj成员的关联类型为“val”(即值关联类型),而obj成员的关联类型为“prop”(即属性关联类型),则该三元组应以关联类型为“prop”的成员为该语义三元组的about属性值。
[0180] (4)列名词典中存在以下入口:
[0181] ColAlias(finance,EPS=[alias=“每股收益”,defaultUnit=“元/股,,][0182] ColAlias(stock,name)=[alias=“股票名称”]。
[0183] 基于上述假设的各种条件,执行如下步骤:
[0184] (1)切词:所述的切词模块101根据用户输入的自然语言查询语句生成如下切词方案:“航空动力/stock.name,的/u,每股收益/finance.EPS”。在本第一实施例中,基于用户输入的“航空动力的每股收益”,只产生了一个切词方案。
[0185] 其中,“航空动力/stock.name”是所述切词模块101根据领域词典判定的,“航空动力”对应的词条的map属性值“stock.name”为词标;“的/u”是所述切词模块101根据公共词典判定的,词标“u”表示“辅助词”;“每股收益/finance.EPS”的判定过程可参考上文所举例。
[0186] (2)解析:所述的语义解析模块102利用领域规则和表达式规则检查是否存在匹配的规则:
[0187] 提取“航空动力”关联的表,得到“stock”;
[0188] “的”,没有对应的领域词条,并且是辅助词,直接跳过;
[0189] 提取“每股收益”关联的表,得到“finance”;
[0190] 由于直到切词方案被分析结束,没有谓词,所以谓词为NULL。
[0191] 因此,即可用“stock,finance”构成二元关系,用以检索领域规则,从而得到被激活的领域规则:
[0192] 属于(finance,stock)=>
[0193] nodes=[finance,stock],links=[finance.stock_id=stock.id]
[0194] 需说明的是,领域规则的左部是无序的,
[0195] 由于切词方案“航空动力/stock.name,的/u,每股收益/finance.EPS”蕴含了一个语义三元组,因而激活了领域规则,这将导致系统以“航空动力/stock.name,的/u,每股收益/finance.EPS”为子节点创建一个新的解析节点Root,然后进行中心词判定(参见后续“Root节点的中心词判定”),从而确定Root节点的about属性和map属性,同时执行被激活领域规则的右部,以设置Root节点的nodes、links等其他属性。
[0196] 备注:当新的解析节点被用来在原来的切词方案中替换匹配的切词分量构成新的切词方案时,该解析节点本身也就成了新的切词分量。在本例中,完成上述过程后,新的切词方案中只剩一个切词分量,解析完成,最后得到如图5所示的“解析树1”(在本第一实施例中,只产生了一个解析树)。得到解析树之后,由于输入已经结束,因此语义解析模块102将得到的解析树提交给查询分析模块103,准备生成结构化查询语句。
[0197] (3)新的解析节点Root(下文简称为“Root节点”)的中心词判定:一旦领域规则被激活,所述的语义解析模块102将立即创建一个Root节点,并且为Root节点进行如下的中心词判定:
[0198] 提取“航空动力”的关联类型,得到“val”,并提取“每股收益”的关联类型,得到“prop”;
[0199] 以“(val,prop)”检索有无匹配的中心词判定规则索引,参见本第一实施例的条件假设部分的内容,该入口将匹配以下中心词判定规则:
[0200] (val,prop)=>prop
[0201] 由于规则右部为prop,因此以关联类型为“prop”的切词分量为Root节点的中心词子节点。在本第一实施例中,以切词分量“每股收益/finance.EPS”为Root节点的中心词子节点,因此Root节点的about属性值被设为“每股收益”,而map属性值则被设为“每股收益”在领域词条中的map属性值“fmance.EPS”,如图5所示的第一解析树。
[0202] 创建解析节点时,判定about属性值是非常重要的。因为新的解析节点的about属性值将继续参与后续的解析,如此才能最终完成对切词方案的消解,得到解析树。
[0203] (4)所述的查询分析模块103生成查询参数:首先生成Root节点的局部查询参数,说明如下:
[0204] 将Root节点的map属性添加到Root节点的heads参数中;
[0205] 将Root节点的outputs属性与其余第一层子节点的outputs合并到Root节点的outputs参数中;
[0206] 将Root节点的nodes属性与其余第一节点的nodes-起合并到Root节点的nodes参数中;
[0207] 将Root节点的link属性与其余第一层子节点的links-起合并到Root节点的links参数中;
[0208] 将Root节点的constraints属性与其余第一节点的constraints合并到Root节点的constraints参数中。
[0209] 按照上述方式处理Root节点的其余参数,在本第一实施例中,Root节点的其余参数皆为空,于是得到如图6所示的基于第一解析树的查询结果。
[0210] 由于Root节点的第一层子节点没有包含子查询的情况,所以Root节点的局部查询参数就是整个解析树的全局查询参数。
[0211] (5)生成结构化查询语句(以SQL语句为例进行说明),按以下规则利用全局查询参数生成SQL语句:
[0212] Heads->SELECT,将heads成员作为SELECT子句成员。
[0213] outputs->SELECT,将outputs成员作为SELECT子句成员。
[0214] nodes->FROM,将nodes成员作为FROM子句成员。
[0215] constraints->WHERE,将constraints成员作为WHERE子句成员。
[0216] conditions->WHERE,将conditions成员作为WHERE子句成员。
[0217] links->WHERE,将links成员作为WHERE子句成员。
[0218] groups->GROUP BY,将groups成员作为GROUP BY子句成员。
[0219] orders->ORDER BY,将orders成员作为ORDER BY子句成员。
[0220] 使用表的别名进行别名化过程,例如,在本第一实施例中,为stock生成别名a,finance生成别名b。使用表别名,可以使生成的结构化查询语句较为精简。此操作为可选项。
[0221] 在列名词典中根据表名和字段名进行检索,从而为SELECT子句的每个输出字段确定合适的列别名,于是得到如下所示的结构化查询语句:
[0222]
[0223]
[0224] 在第二实施例中,以用户输入的一个有嵌套、无歧义的自然语言查询语句为例进行说明。本实例主要是用来展示为根节点生成局部查询参数,将根节点的所有第一层子节点的全局查询参数代入到根节点的局部查询参数,以获得根节点的全局查询参数的操作过程的特征。
[0225] 首先,假设用户输入“每股收益大于3元的股票”,为了便于介绍第二实施例,进一步假设如下:
[0226] (1)在领域词典中存在以下词条:
[0227] “每股收益”:map=“finance.EPS”,type=“prop”;
[0228] “股票”:map=“stock.name”,outputs=“stock.code”,type=“obj”。
[0229] (2)领域规则中存在以下领域规则:
[0230] 属于(finance,stock)=>
[0231] nodes=[finance,stock],links=[finance.stock_id=stock.id]。
[0232] (3)存在以下表达式规则:
[0233] “X,大于,数量”=>
[0234] about=“X”,
[0235] nodes=[$TABLE(X)],
[0236] condition=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X))]。
[0237] (4)存在以下中心词判定规则:
[0238] 第一中心词判定规则:(prop,obj)=>obj;
[0239] 第二中心词判定规则:(obj,prop)=>prop。
[0240] 所述第一中心词判定规则表示在语义三元组中,如果第一个词的关联类型为prop,第二个词为obj,则以obj为该三元组对应的解析节点的中心词子节点。
[0241] 所述第二中心词判定规则表示在语义三元组中,如果第一个词的关联类型为obj,第二个词为prop,则以prop为该三元组对应解析节点的中心词子节点。
[0242] 基于上述假设的各种条件,执行如下步骤:
[0243] (1)切词:所述的切词模块101根据用户输入的自然语言查询语句生成如下切词方案:“每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”。在本第二实施例中只产生了一个切词方案。该切词方案提交给所述的语义解析模块102进行处理。
[0244] (2)解析:所述的语义解析模块102根据领域规则在切词方案的基础上得到如图7所示的第二解析树。本第二实施例只生成一个解析树。
[0245] 所述切词方案中的“每股收益/fmance.EPS,大于/p,3元/数量”将激活上文所假设的表达式规则:
[0246] “X,大于,数量”=>
[0247] about=“X”,
[0248] nodes=[$TABLE(X)],
[0249] condition=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X))]。
[0250] 所述的语义解析模块102在所述表达式规则被激活后生成新的解析节点EXPR(下文简称为“EXPR节点”),并且将“每股收益/finance.EPS,大于/p,3元/数量”添加为该EXPR节点的子节点。
[0251] 经过中心词判定,该EXPR节点的中心词子节点是“每股收益”节点,由于“每股收益”的map属性为“finance.EPS”,所以EXPR节点的about和map属性值分别为“每股收益”和“finance.EPS”;然后执行表达式规则的右部,以确定EXPR节点的属性:完成表达式规则右部中的nodes属性和conditions属性中的上下文函数计算,再用来设置EXPR节点的属性。于是得到本例中EXPR节点的属性如下:
[0252] About=“每股收益”;
[0253] Map=“finance.EPS”,来自EXPR的子节点“每股收益”的领域词条;
[0254] nodes=[finance]
[0255] conditions=[fmance.EPS>3*1]
[0256] 此时,所述语义解析模块102得到的切词方案为:{{EXPR}/finance.EPS,的/u,股票/stock.name},其中:EXPR的关联表为finance,“股票”的关联表为stock。
[0257] 据此,所述的语义解析模块102可以判定以下领域规则将被激活:
[0258] 属于(finance,stock)=>
[0259] nodes=[finance,stock],links=[fmance.stock_id=stock.id];
[0260] 所述的语义解析模块102继续完成以下操作:
[0261] 创建Root节点,将{{EXPR}/finance.EPS的/u,股票/stock.name}作为Root的子节点;
[0262] 完成Root节点的中心词判定(参见下文描述);
[0263] 执行被激活的领域规则的右部以初始化Root节点的nodes属性和links属性。
[0264] (3)所述的语义解析模块102对Root节点进行中心词判定:
[0265] 如图7所示的第二解析树,Root节点的第一层节点有“{EXPR}/finance.EPS,的/u,股票/stock.name”。其中{EXPR}的about属性值为“每股收益”,而“每股收益”的关联类型为“prop”,同时另一个领域分量“股票”的关联类型为“obj”。
[0266] 所以所述的语义解析模块102以“(prop,obj)”作为入口搜索中心词判定规则索引,从而激活本第二实施例上文所假设的第一中心词判定规则索引:(prop,obj)=>obj,即,以关联类型为obj的那个领域分量(“股票”)作为ROOT节点的中心词子节点。
[0267] 因此,Root的about属性值应该设置为“股票”,然后,根据Root的第一层子节点中“股票”的领域词条,Root的map属性值应设置为“stock.name”。
[0268] 该第二解析树中各个节点的属性即可参考图7所示。
[0269] (4)所述的查询分析模块103生成查询参数:
[0270] (4.1)首先,生成根节点(即Root节点)的局部查询参数:
[0271] 将Root节点的map属性值添加到Root节点的heads参数中;
[0272] 将Ro ot节点的outputs属性与其余第一层子节点的outputs合并到Root节点的outputs参数中;
[0273] 将Root节点的nodes属性与其余第一层子节点的nodes-起合并到Root节点的nodes参数中;
[0274] 将Root节点的link属性与其余第一层子节点的links-起合并到Root节点的links参数中;
[0275] 将Root节点的constraints属性与其余第一层子节点的constraints合并到Root节点的constraints参数中;
[0276] 将Root节点的conditions属性与其余第一层子节点的conditions合并到Root节点的conditions参数中;
[0277] 将Root节点的groups属性与其余第一层子节点的groups合并到Root节点的groups参数中;
[0278] 将Root节点的orders属性与其余第一层子节点的orders合并到Root节点的orders参数中;
[0279] 得到本第二实施例中Root节点的如下局部查询参数(可参考图8所示的基于第二解析树的查询结果):
[0280] heads=[stock.name]
[0281] outputs=[stock.code,fmance.EPS]
[0282] nodes=[finance,stock]
[0283] links=[fmance.stock_id=stock.id]。
[0284] (4.2)所述的查询分析模块103生成Root节点的全局查询参数:
[0285] 获取Root节点的第一层子节点中嵌套子节点的全局查询参数;
[0286] 将Root节点的第一层子节点所有全局查询参数代入到Root节点的局部查询参数中,从而得到Root节点的全局查询参数。
[0287] 在本第二实施例中所述Root节点的第一层子节点中,所述EXPR节点是嵌套子节点,因此所述查询分析模块103将在生成所述Root节点的局部查询参数之后,以递归调用的形式获得所述EXPR节点的全局查询参数,然后再将所述EXPR节点的全局查询参数代入到所述Root节点的局部查询参数中,从而得到所述Root节点的全局查询参数。
[0288] 根据上述说明,所述的查询分析模块103为EXPR节点生成局部查询参数如下:
[0289] heads=[fmance.EPS]
[0290] nodes=[finance]
[0291] conditions=[fmance.EPS>3*1]。
[0292] 由于EXPR节点的第一层子节点中没有嵌套子节点,因此,这里得到的EXPR节点的局部查询参数就是EXPR节点的全局查询参数。
[0293] 进一步,由于本第二实施例中Root节点的第一层子节点中除了所述EXPR节点为一个嵌套子节点之外,没有别的嵌套子节点,所以将所述EXPR节点的全局查询参数代入所述Root节点的局部查询参数之后,就可以得到如下所述Root节点的全局查询参数(参数代入的过程可参考图8所示):
[0294] heads=[stock.name]
[0295] outputs=[stock,code,fmance.EPS]
[0296] nodes=[finance,stock]
[0297] links=[finance.stock_id=stock.id]
[0298] conditions=[fmance.EPS>3]。
[0299] (5)生成结构化查询语句(以SQL语句为例进行说明):
[0300] 采用与第一实施例生成SQL语句一样的方式,经过别名化过程,可以得到如下SQL语句:
[0301]
[0302] 在第三实施例中,以用户输入的一个有嵌套、有歧义的自然语言查询语句为例进行说明。本实例主要是展示本发明在处理词条多重解释以及领域规则歧义方面的特征。
[0303] 首先,假设用户输入:“广东证券的每股收益大于3元的股票”,为了便于介绍第三实施例,进一步假设如下:
[0304] (1)在领域词典中存在以下词条:
[0305] “广东证券”:map=“org.abbr”,type=“val”;
[0306] “广东证券”:map=“stock.name”,outputs=“stock.code”,type=“val”;
[0307] “每股收益”:map=“fmance.EPS”,type=“prop”
[0308] “股票”:map=“stock.name”,outputs=“stock.code”,type=“obj”。
[0309] (2)领域规则中存在以下领域规则:
[0310] (2.1)属于(finance,stock)=>
[0311] nodes=[finance,stock],
[0312] links=[finance.stock_id=stock.id]。
[0313] (2.2)持有(org,stock)=>
[0314] nodes=[org,stock_hold,stock],
[0315] links=[org.id=stock_hold.org_id,stock_hold.stock_id=stock.id]。
[0316] (2.3)推荐(org,stock)=>
[0317] nodes=[org,recommend,stock],
[0318] links=[org.id=recommend.org_id,recommend.stock_id=stock.id]。
[0319] (3)存在以下表达式规则:
[0320] “X,大于,数量”=>
[0321] about=“X”,
[0322] nodes=[$TABLE(X)],
[0323] condition=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X))]。
[0324] (4)存在以下中心词判定规则:
[0325] 第一中心词判定规则:(prop,obj)=>obj;
[0326] 第二中心词判定规则:(val,obj)=>obj.
[0327] 上述假设的多个条件中各个函数的意义可参考上文的实施例中的介绍。
[0328] 基于上述假设的各种条件,执行如下步骤:
[0329] (1)切词:由于“广东证券”一词存在两个解释,所述的切词模块101根据用户输入的自然语言查询语句生成如下两个切词方案:
[0330] (1.1)“广东证券/stock.name,的/u,每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”,这里是把“广东证券”当成了一个股票的名称。
[0331] (1.2)“广东证券/org.abbr,的/u,每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”,这里是把“广东证券”当成了一个企业的名称缩写。
[0332] (2)解析:所述的语义解析模块102根据为每个切词方案各自生成解析树。
[0333] (2.1)切词方案“广东证券/stock.name,的/u,每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”将由于缺少必要的领域规则支持而无法完成解析,最终将被放弃。也就是说,虽然在本例中“广东证券”存在多重解释,但通过语义解析模块1202的解析过程自然完成了歧义消解。
[0334] (2.2)切词方案“广东证券/org.abbr,的/u,每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”中,由于“广东证券/org.abbr,的/u,{股票}/stock.name”激活了如下两条规则,会分别产生各自的解析树:
[0335] 持有(org,stock)=>
[0336] nodes=[org,stock_hold,stock],
[0337] links=[org.id=stock_hold.org_id,stock_hold.stock_id=stock.id][0338] 推荐(org,stock)=>
[0339] nodes=[org,recommend,stock],
[0340] links=[org.id=recommend.org_id,recommend.stock_id=stock.id][0341] 首先,根据“持有(org,stock)”规则(即认为“广东证券的股票”是指“广东证券持有的股票”)得到的第三解析树可参考图9。
[0342] 其次,根据“推荐(org,stock)”规则(即认为“广东证券的股票”是指“广东证券推荐的股票”)得到的第四解析树可参考图10。
[0343] 以第四解析树为例,根据表达式规则:
[0344] “X,大于,数量”=>
[0345] about=“X”,
[0346] nodes=[$TABLE(X)],
[0347] condition=[$MAP(X)>$VAL(数量)*$UCOE(数量,$MAP(X))]。
[0348] 所述的语义解析模块102从分词序列“广东证券/org.abbr,的/u,每股收益/finance.EPS,大于/p,3元/数量,的/u,股票/stock.name”得到分词序列:“广东证券/org.abbr,的/u,{EXPR}/finance.EPS,的/u,股票/stock.name”,其中:“{EXPR}”=“{每股收益/finance.EPS,大于/p,3元/数量}EXPR。
[0349] 根据领域规则:
[0350] 属于(finance,stock)=>
[0351] node=[finance,stock],
[0352] links=[finance,stockid=stock.id]。
[0353] 所述的语义解析模块102得到分词序列:“广东证券/org.abbr,的/u,{股票}/stock.name”,其中:“{股票}”=“{{EXPR}/fmance.EPS,的/u,股票/stock.name}股票”。
[0354] 根据领域规则:
[0355] 持有(org,stock)=>
[0356] nodes=[org,stock_hold.org_id,stock_hold.stock_id=stock.id]。
[0357] 所述的语义解析模块102得到:“{Root}/stock.name”,其中“{Root}”=“{广东证券/org.abbr,的/u,,{股票}/stock.name}Root”,至此,解析完成。
[0358] (3)所述的语义解析模块102对Root节点进行中心词判定,仍以第四解析树为例,分析Root节点、{股票}节点的about属性值的判定:
[0359] (3.1)所述的语义解析模块102对Root节点的about属性值判定:
[0360] Root节点的第一层节点有“广东证券/org.abbr,的/u,{股票}/stock.name”。因为“广东证券”的关联类型为“val”;{股票}的中心词子节点为“股票”节点,而“股票”节点的关联类型为“obj”,因此,所述的语义解析模块102以“val,obj”匹配到本第三实施例假设条件中的第二中心词判定规则索引:(val,obj)=>obj,即,以关联类型为obj的那个子节点作为Root节点的中心词子节点。
[0361] 因此,所述Root节点的中心词子节点应该是“股票”节点,即Root节点的about属性值应该设置为“股票”。
[0362] (3.2)所述的语义解析模块102对{股票}节点的about属性值判定:
[0363] {股票}节点的第一层节点有“{EXPR}/finance.EPS,的/u,股票/stock.name”。因为第一层子节点{EXPR}的about属性值为“每股收益”,而“每股收益”的关联类型为“prop”,同时,另一个子节点“股票”的关联类型为“obj”,所以所述的语义解析模块102以“prop,obj”匹配到本第三实施例假设条件中的第一中心词判定规则索引:(prop,obj)=>obj,即,以关联类型为obj的那个子节点作为{股票}节点的中心词子节点。因此,{股票}节点的about属性值应该设置为“股票”。
[0364] (4)所述的查询分析模块103生成查询参数:
[0365] 如上文所述,在本第三实施例中,所述的切词模块101输出了两个切词方案,而所述的语义解析模块102根据对这两个切词方案进行处理,结果第一个切词方案无法构成解析树,而第二个切词方案输出了两个解析树(即第三、第四解析树),所述的查询分析模块103将为这两个解析树分别构造各自的Root节点的全局查询参数。
[0366] 为每个解析树分别构造Root节点的全局查询参数的过程可参考第二实施例,最终得到以下两组全局查询参数:
[0367] (4.1)基于第三解析树的第一组全局查询参数(表示“广东证券持有的每股收益大于3元的股票”):
[0368]
[0369] (4.2)基于第四解析树的第二组全局查询参数(表示“广东证券推荐的每股收益大于3元的股票”):
[0370] heads=[stock.name,stock.code]
[0371] outputs=[org.abbr,fmance.EPS]
[0372] nodes=[org,recommend,stock,finance]
[0373] constraints=[org.abbr=“广东证券”]
[0374] conditions=[fmance.EPS>3*1]
[0375] links=[org.id=recommend.org_id,
[0376] recommend.stock_id=stock.id,
[0377] finance.stock_id=stock,id]
[0378] groups=[]
[0379] orders=[]
[0380] (5)生成结构化查询语句(以SQL语句为例进行说明):
[0381] 采用与第一实施例生成SQL语句一样的方式,经过别名化过程,为上述每组全局查询参数各自生成如下SQL语句:
[0382] (5.1)第一组SQL语句(表示“广东证券持有的每股收益大于3元的股票”):
[0383]
[0384] (5.2)第二组SQL语句(表示“广东证券推荐的每股收益大于3元的股票”):
[0385]
[0386]
[0387] (6)针对歧义消解:
[0388] (6.1)以下几种情况会产生歧义:
[0389] 术语有多重解释:
[0390] 对同一个输入序列,由于可能产生多个切词方案,因而可能产生多个解析树:
[0391] 两个表之间存在多个谓词关系,但是用户输入时,却没有指定谓词。例如“广东证券的股票”,可能是指“广东证券持有的股票”,也可能是指“广东证券推荐的股票”,还有可能是指“广东证券发行的股票”。
[0392] (6.2)所述的结构化查询语句生成系统10可在以下两个层次进行歧义消解:
[0393] 在所述切词分量对应的术语存在多重解释时,但可能只有一个或者少数解释而不是全部解释能够与上下文构成解析树,舍弃不能与上下文构成解析树的切词分量以及舍弃包含这些切词分量的切词方案;或
[0394] 在存在多个解析树时,这些解析树未必都能构成全局查询参数,因为可能某个位置的子查询参数因为无法建立连接而不能被代入父查询参数,因此,可舍弃不能构成全局查询参数的子节点所对应的切词分量以及舍弃包含这些切词分量的解析树。
[0395] 以上实施方式仅用以说明本发明的技术方案而非限制,尽管参照以上较佳实施方式对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换都不应脱离本发明技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈