没有合适的资源?快使用搜索试试~ 我知道了~
沙特国王大学学报使用计算语言学将NLQ转换为SQL福通·凯德万沙特阿拉伯麦地那穆格林王子大学计算机与网络科学学院软件工程系阿提奇莱因福奥文章历史记录:收到2021年2022年2月9日修订2022年3月10日接受2022年3月24日在线提供保留字:自然语言处理查询语言关系数据库结构化查询语言计算语言学A B S T R A C T本研究讨论了一个非结构化的自然语言问题(NLQ)到结构化查询语言(SQL)语句的自动翻译的实现实验。SQL是一种具有特殊查询语法的关系数据库(RDB)交互语言,也是一种计算机可执行的人工语言.这样,数据库(DB)管理员或一般用户很少或根本没有SQL查询能力可以执行查询关系数据库在一个交互式的方式。本文的主要目标是开发一种基于规则的手工映射约束算法.该算法将NLQ令牌值、属性)。然后,匹配的RDB元素(称为匹配过程使用MetaTables中表示的计算语言这种映射算法被证明是有效的,特别是与小RDBS的准确性为95%,是约93%的准确性与较大的RDBS。©2022作者由爱思唯尔公司出版代表沙特国王大学这是一个开放的访问CC BY-NC-ND许可证下的文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。1. 介绍本节介绍了研究目的、目标、范围和潜在挑战。首先,建议的工作的目的是弥合技术和非技术数据库(DB)用户之间的差距。换句话说,在没有编程背景的情况下调解计算机和人类之间的交互,并促进信息交换和从所采用的数据库中检索,在这种情况下,数据库的自然语言接口人机交互(HCI)使用用户的自然语言问题(NLQ)进行。用户不需要知道任何关系数据库(RDB)模式元素或结构,如表的名称、关系、格式、属性或数据类型。RDB模式是RDB元素组织的简要描述,不包括任何RDB值。在这项工作中,一个轻量级的NLQ到结构化查询语言(SQL)的翻译方法是通过利用RDB MetaTable作为哈希表来实现的。电子邮件地址:gmail.com沙特国王大学负责同行审查制作和主办:Elsevier如示于图 1,用户的NLQ被接受作为给定NLIDB的输入,连同其对应的RDB。NLQ到SQL的转换是由底层的多层自然语言处理(NLP)框架执行然后,系统可以理解NLQ并使用其等效的SQL进行响应所 提 出 的 工 作 的 主 要 重 点 是 回 答 问 题 : 如 何 使 用 RDB 模 式MetaTables将非结构化全文NLQ表达式转换为SQL语句,从而产生准确的结果?这种转换机制及其框架设计,从NLQ接口开始,直到识别等效的SQL,旨在克服一些潜在的挑战,例如:Abbreviations.support:如果用户使用缩写“kg”询问患者支持SQLSELECT、FROM等)同义词或在NLQ中没有它们多列SELECT;识别多个NLQ转换运算符和数字(即,等于,三)转化为数字形式和符号(即,(3).从NLQ中提到的文字值导出表或属性支持命题项(即,上,之间)。考虑NLQ中的所有条件项,并将其转换为多个WHERE条件。支持聚合函数(例如,将“highest”转换https://doi.org/10.1016/j.jksuci.2022.03.0101319-1578/©2022作者。由爱思唯尔公司出版代表沙特国王大学这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表沙特国王大学学报杂志首页:www.sciencedirect.com●●●●●●●●F. 凯德万沙特国王大学学报6565研究框架从处理简单的联机事务处理(OLTP)类型的查询开始,避免 嵌 套 查 询 。 OLTP 查 询 是 SQL 的 简 单 SELECT 、 FROM 和WHERENLP使用深度学习技术作为AI领域的一部分。它侧重于计算语言学分析人机交互的语言用于这种交互式通信。1.1. 背景本节证明了使用RDB进行DB模式表示的合理性。 RDB模型(Agrawal等人, 2002)被用作后台数据存储和管理结构的基础。由于关系数据库实体之间的关系,包括它们的表属性和子字段以及它们的值,所以它被选择作为所提出的研究的数据存储介质。这些关系本身就包含着重要的信息,就好像它们是完全独立的实体。此外,存储在关系上的信息被证明可以提高数据检索的准确性,这将在后面的实现测试和性能测量部分中进行演示RDB的元素(即,表、属性、关系等)图2中的表示描述了实体之间的关系以表示RDB语义的一部分。一个数据关系图(ERD)(Chen,1976)用于演示RDB结构,因为它使数据关系更加可见,如下所示:一个实体表示一个表,即,‘‘Patient”实体的特征表示特定表的属性,即,“P_Name”。特定属性的任何实例表示属性的值,即,有向关系表示实体对其他实体的行为或影响,即,在1976年,Chen(Chen,1976)是第一个使用ERD来表示NLQ结构的图形化建模RDB模式实体的人。在(Tseng等人,1992),ERD用于代表NLQ构建体通过分析NLQ结构然而,NLQ构造内部关系在先前的工作中没有在将构造映射到RDB查询语言(即,SQL),并将其实现在当前的研究工作中。Fig. 1. 基础研究机构图。图二. 创伤后应激障碍(PTSD)RDB。此外,RDB使用RDB模式MetaTables(如表1和表2)支持NLQ到SQL的映射。MetaTables是数据存储库,充当数据字典,描述RDB元素及其之间的关系。除了使用RDB MetaTables之外,NLQ上下文和存储在多个连接的RDB表中的知识的基于情况的链接提高了数据检索的准确性。在下文中,第2节介绍了算法第三部分是算法第四节介绍了框架的实施结果和讨论,第五介绍了研究结论和未来的工作。2. 实施方案本节介绍了NLQ在达到等价的SQL查询之前必须经历的步骤,并详细说明了每一步的必要性。目前的研究框架组件开始与NLIDB接口,用户使用输入NLQ的句子。为了理解输入的NLQ,NLQ必须通过基本的NLP任务(例如词形化、标记化、注释和基于规则的解析)来进行词性(POS)识别。接下来的步骤,消歧,是NLQ将仅在存在模糊POS词的情况下经历的条件步骤(即,“内容”是名词还是形容词?“separate”是动词还是形容词?之后,识别的NLQ令牌将被传递到匹配器/映射器步骤,用于将令牌映射到RDB模式MetaTables的元素中,并将识别的词典映射到SQL子句中。匹配的词典将在SQL生成步骤中使用,该步骤将在接下来执行。在下文中,将使用图9(附录1)和伪代码1(附录2)中所示的步骤进一步详细讨论研究框架组件。图3解释了NLQ单词转换到令牌然后到lexica的整个过程,并在箭头上进行了总结2.1. NLQ输入接口此界面用于在NLQ表单中输入问题。采用的NLIDB是一个基于NLQ的接口(Malik和Rishi,2015),因为它在将其转换为SQL语句之前首先尝试理解NLQ。该系统对输入的NLQ进行词典分解和NLP句法和语义分析。选择基于NLQ的接口作为NLIDB系统的接口这是因为它是与计算机通信的最自然的方式这也是作为拟议研究工作目标受众的决策者最希望的沟通方式此外,在将NLQ翻译成查询语言之前,充分了解NLQ是最重要的部分。由于拟议研究工作的主要重点和贡献是映射机制,而不是解决或消除结构错误或不完整的NLQ的歧义,因此只考虑完整的简单NLQ问题。然而,有一个简单的disam- biguation模块实现了简单的NLQ问题。地址:表1NLQ MetaTable。话句法角色类别同义词莎拉例如值人员、患者、医生具有动词关系拥有,获得,拥有医师名词属性医生,供应商,精神病,●●●●F. 凯德万沙特国王大学学报6566表2RDB元素MetaTable。话语法角色类别数据类型PK/FK封闭源同义词疾病名词表词没有RDB:创伤后应激障碍疾病,疾病采取动词关系词没有表格:患者->药物获取,吸收,获得,拥有P_ID名词属性数字是的属性:患者、医生、药物患者、标识、编号、人员图三. NLQ词汇,标记和词汇术语澄清。对复杂的一般性问题的求解是今后的主要工作之一。当用户将NLQ插入到数据输入界面时,他们将返回从MySQL DB生成的SQL结果或错误警报。错误警报可能与输入的NLQ语言问题有关,或者与RDB MetaTable中的NLQ参数存在1个以上匹配或根本不匹配的错误有关。 NLQ将通过NLI屏幕作为输入数据插入,最多200个字符,并借助两个Python库,即“”server.bot”和“”text_processing.text_nlp”。NLI会将NLQ词汇识别为论元,这将有助于为识别它们的语义和句法角色做好准备。2.2. POS识别几个基本的NLP层被认为是和实现的POS识别模块的一部分使用的POS识别Python库是该模块对于全面理解NLQ以进行适当和准确的翻译至关重要。多层翻译算法框架将NLQ分成其组成令牌。然后,将这些标记与RDB MetaTables的内容进行使用与模式数据匹配的标记,即词典、NLQ应该能够被语义地解析以标识令牌名词、动词等)这有助于翻译过程。对NLQ字符串执行的第一个过程是将其单词进行词形分析并将其词干转换为其分解的原始根形式。这是通过删除单词的屈折词尾并将它们恢复到它们的基本形式来完成的,例如将“entries”转换为“entry”。词形化简化了等价RDB元素的选择和映射过程。它还有助于标记的句法和语义识别。然后,根据预定义的语法规则和内置的句法角色,对词干进行解析并将其标记为标记。语法角色将映射到特定的RDB元素(例如,NLQ动词与RDB关系映射)。对于任何NLQ翻译过程,解析的标记及其后续的POS标记都必须清晰准确地识别。这是由底层的多层流水线执行的,该流水线从标记NLQ POS开始。然后,将应用标记器、注释器、语义和语法(基于规则)解析器,并删除任何标点符号。该步骤的一部分是省略系统中预定义的无意义的多余转义词(即,a,an,to,of,in,at,are,whose,for,etc.)从NLQ单词组中选出。解析后,生成解析树,并在NLQ元表中维护标记名称、语法角色和同义词的字典此外,NLQ的主语,宾语,动词和其他语言角色被确定。因此,每个分词化的单词都通过语法分析仪然后将标记传递到语义分析器进行进一步处理。语义分析器采用使用语言词汇词典或本体(诸如WordNet)的词类型标识符。 诸如WordNet的词类型标识符标识词或短语(即,普通名词或专有名词)在句子中的作用以及它们的角色分配者(动词)是什么。此外,语义分析器能够识别条件词或符号词,并将它们与来自语言本体的它们的相对表示映射。例如,短语“大于”将被替换为运算符“>"。换句话说,语义分析器的实体注释器检测输入NLQ实体中的条件或符号词。然后,它将它们替换为模式注释器先前标识的等价语义类型。实体替换创建了一种新形式的相同NLQ,这更容易被SQL生成器或模式匹配器检测到。实体注释器并不是NLQ处理的唯一注释器。NLQ还通过了其他注释器,如数字注释器、日期注释器、比较器注释器等。在未来的工作中,可以进一步改进这一步骤,以搜索以前的注释结果,检查任何存储的词汇化规则的匹配模式。这一步将有助于确定合适的SQL模板类型或其进一步的子查询的部门更快. NLQ被转换成令牌流,并且令牌ID被提供给NLQ的每个单词。标记被分类为它们的语言类别,例如名词、代词、动词或文字值(字符串/整数变量)。该算法根据标记的语言类别和语义角色将其映射为表、属性、值或关系。所获取的其余信息将用于制定SQL查询子句(即,比较或操作表达式)。代币Python NLP轻量级库(TextBlob)用作NLQ POS识别器(即,“speech_recognition”库)。实现了NLQ标记器和lemmatizer,以方便等 效 RDB 元 素 的 选 择 。 还 考 虑 其 他 库 , 包 括 但 不 限 于“string_punctuation”、“StanfordCoreNLPspellcheck”、“nltk.corpus”(使用WordNet)、“textblob.-word”、“wordNetLemmatizer” 、 “nltk.stem” 、 “sentence_tokenize” 、“word_tokenize”、“nltk.tokenize”、“unicodedata”(用于数学运算和符号)、“textt_processing”、“text_nlp”和“server.tokenizer”。这些库的使用和分布在图中解释。 9(附录1)和图。 10(附录3)。系统检查每个NLQ单词的语义角色,并将其添加到注册表中,以便传递到下一个步骤,例如,如果列表中的第一个元素(index[0])是一个普通名词,代码将检查NLQ单词是否是一个表。此外,如果值有对应的属性,则将该单词添加到值列表中,依此类推。该算法应用伪代码3(附录5)中说明的该算法使系统能够避免重复使用相同的令牌,这有助于避免潜在的错误和不准确性。要识别文字值,可以使用“babel.numbers”库中的函数F. 凯德万沙特国王大学学报6567nltk中的“parser”和“WordNetLemmatizer”函数。 stem这是通过添加同义词, 然后使用相应的 RDB 元素创建关系'IS_LIKE'来实现的,如伪代码4(附录6)中所示。在标记器和标记器阶段,如伪代码5(附录7)所示,NLQ POS,语义分析和句法表示通过标记它们来表达和提取。这有助于提取标记的语言子部分(即, 形容词和名词/动词短语),以便稍后进行准确映射。POS标记器将标记每个NLQ标记以定义其语法角色。分词器分析表8(附录8)中讨论的NLQ标记类型,并返回提取的句子结构部分(即,动词、名词短语)以及词形化标记的标记版本。此外,还将返回SQL范围内的令牌对NLQ字符串执行的第一个过程是将其单词进行词形分析并将其词干转换为其分解的原始根形式。这是通过删除单词的屈折词尾并将它们恢复到它们的基本形式来完成的,例如将“entries”转换为“entry”。词形化简化了等价RDB元素的选择和映射过程。它还有助于标记的句法和语义识别。然后,根据预定义的语法规则和内置的句法角色,对词干进行解析并将其标记为标记。语法角色将映射到特定的RDB元素(例如,NLQ动词与RDB关系映射)。对于任何NLQ翻译过程,解析的标记及其后续的POS标记都必须清晰准确地识别。这是由底层的多层流水线执行的,该流水线从标记NLQ POS开始。然后,将应用标记器、注释器、语义和语法(基于规则)解析器,并删除任何标点符号。该步骤的一部分是省略系统中预定义的无意义的多余转义词(即,a,an,to,of,in,at,are,whose,for,etc.)从NLQ单词组中选出。解析后,生成解析树,并在NLQ元表中维护标记名称、语法角色和同义词的字典此外,NLQ的主语,宾语,动词和其他语言角色被确定。因此,语法分析器将每个分词的单词注册到NLQ元表然后将标记传递到语义分析器进行进一步处理。语义分析器采用使用语言词汇词典或本体(诸如WordNet)的词类型标识符。 诸如WordNet的词类型标识符标识词或短语(即,普通名词或专有名词)在句子中的作用以及它们的角色分配者(动词)是什么。此外,语义分析器能够识别条件词或符号词,并将它们与来自语言本体的它们的相对表示映射。例如,短语“大于”将被替换为运算符“>"。换句话说,语义分析器的实体注释器检测输入NLQ实体中的条件或符号词。然后,它将它们替换为模式注释器先前标识的等价语义类型。实体替换创建了一种新形式的相同NLQ,这更容易被SQL生成器或模式匹配器检测到。实体注释器并不是NLQ处理的唯一注释器。NLQ还通过了其他注释器,如数字注释器、日期注释器、比较器注释器等。在未来的工作中,可以进一步改进这一步骤,以搜索以前的注释结果,检查任何存储的词汇化规则的匹配模式。这一步将有助于确定合适的SQL模板类型或其进一步的子查询NLQ被转换为令牌流,并为每个单词提供令牌ID标记被分类为它们的语言类别,诸如名词、代词、动词或文字值(字符串/整数变量)。该算法根据标记的语言类别和语义角色将标记映射到表、属性、值或关系中。所获取的其余信息将用于形成SQL子句(即,比较或操作表达式)。Python NLP轻量级库(TextBlob)用作NLQ POS识别器(即,“speech_recognition”库)。实现了NLQ标记器和lemmatizer,以方便等 效 RDB 元 素 的 选 择 。 还 考 虑 其 他 库 , 包 括 但 不 限 于“string_punctuation”、“StanfordCoreNLPspellcheck”、“nltk.corpus”(使用WordNet)、“textblob.-word”、“wordNetLemmatizer” 、 “nltk.stem” 、 “sentence_tokenize” 、“word_tokenize”、“nltk.tokenize”、“unicodedata”(用于数学运算和符号)、“textt_processing”、“text_nlp”和“server.tokenizer”。这些库的使用和分布在图中解释。 9(附录1)和图。 10(附录3)。系统检查每个NLQ单词的语义角色,并将其添加到注册表中,以便传递到下一个步骤,例如,如果列表中的第一个元素(index[0])是一个普通名词,代码将检查NLQ单词是否是一个表。此外,如果值有对应的属性,则将该单词添加到值列表中,依此类推。该算法应用伪代码3(附录5)中说明的该算法使系统能够避免重复使用相同的令牌,这有助于避免潜在的错误和不准确性。要 识 别 文 字 值 , 可 以 使 用 “babel.numbers” 库 中 的 函 数“parse_decimal” 和 “NumberError” 。 nltk 中 的 “parser” 和“WordNetLemmatizer”函数。 stem这是通过添 加同义词,然 后使用相应的 RDB 元素创建关 系'IS_LIKE'来实现的,如伪代码4(附录6)中所示。在标记器和标记器阶段,如伪代码5(附录7)所示,NLQ POS,语义分析和句法表示通过标记它们来表达和提取。这有助于提取标记的语言子部分(即, 形容词和名词/动词短语),以便稍后进行准确映射。POS标记器将标记每个NLQ标记以定义其语法角色。分词器分析表8(附录8)中讨论的NLQ标记类型,并返回提取的句子结构部分(即,动词、名词短语)以及词形化标记的标记版本。此外,还将返回SQL范围内的令牌不仅RDB元素用它们的同义词标记,而且SQL关键字也用同义词和 语 义 信 息 标 记 。 这 种 标 记 使 用 语 义 词 典 ( WordNet ) 和“nltk.tokenize”库(其他SQL关键字,如聚合函数(例如,AVG、SUM等)或比较操作(例如,>、、=等),在Python的“unicodedata”库中定义的毕竟,NLQ和SQL单词都标记有它们的同义词,算法将启动测试模块来验证RDB Lexica和NLQ标记与它们标记的同义词的相似性。如果在这种情况下,lexica或token是F. 凯德万沙特国王大学学报6568表3映射表设计选项。使用NLQ和RDB元表,分别在下面给出的表1和表2中匹配的词汇表将是RDB大小例如使用的应用技术数据用SQL子句映射。该映射使用所提出的基于规则的算法,该算法基于观察性神经网络,小Zomato Python字典服务器地图NLQ令牌和RDB元素之间的关联表8(附录8)中讨论的选项表表1是NLQ元表的一个示例,大型WikiSQL数据分析RDB元素的统计信息使用WordNet同义词数据集根据其语义标记其匹配的同义词。2.3. 消歧只有当映射器找到多个与某个NLQ令牌匹配的RDB元素时,在目前的 因 此 , 通 过 应 用 StanfordCoreNLP ( CoreNLP , 2014 ) 和“nltk.corpus”Python库(Iftikhar等人,2016年)。这些工具仅用于检查NLQ的有效性。语法规则检查器也用于任何NLQ语法错误。所采用的程序是交互式的,用户会弹出一条错误消息,要求他们重新措辞一个单词或从一些可能的拼写更正中选择。朴素贝叶斯分类器(Kumar和Dua,2014)用于简单地将用户响应分类为积极或消极(是/否)。NLQ输入消歧是一个中间过程,通过语境分析来完成。当系统由于某些模糊性而无法做出决定时,它会要求用户进一步输入。这发生在对于特定NLQ令牌存在多于一个匹配的情况下(例如, 然而,吸引用户仅仅是为了通过从词汇表中存在的相似单词或同义词的建议列表中进行选择来澄清NLQ输入中的某个歧义。在未来的工作中,作为进一步消除歧义的步骤,以保证生成的SQL的准确性,反馈系统可以应用后NLQ分析。该反馈系统通过询问用户“这是所需的SQL吗?”来要求用户确认已翻译的NLQ到SQL查询。然而,由于我们假设用户的无知的任何编程能力,包括SQL,这个反馈系统是不适用于目前的研究工作。具有相同名称的RDB元素根据NLQ元表(表1)和RDB元素因此,歧义检查模块最终将具有所有相同命名的元素及其在RDB中的位置每个输入的NLQ都要经过语法规则检查器,以检查是否有语法错误。该模块使用Python库“unittest”和“textblob”检查NLQ的有效性或是否需要用户澄清任何歧义或拼写错误如果NLQ有效,则算法将继续进行下一步另外,算法将通过要求用户从一些潜在的更正中进行选择来从用户处寻找澄清或拼写更正响应。然后,用户的响应被分类为肯定(即,是)或否定(即,否)。这种分类使用来自预构建Python库“textblob.classifiers”的朴素贝叶斯分类器如果用户这一步使用“Stanford CoreNLP”和“nltk.corpus”库来检查NLQ的有效性,并使用语法规则检查器来检查拼写错误,2.4. 匹配器/映射器除了RDB关系之外,所采用的映射器是权限-属性-值(EAV)映射映射NLQ令牌输入的NLQ到其后续令牌中。下面的表2是RDB元素MetaTable的一个例子,它解释了每个RDB元素的性质,类别,语法角色等。这两个表将在整个研究文档中经常引用和详细说明。在这个阶段,NLQ标记的同义词被替换为嵌入式词典列表中的等价名称。然后,对SQL关键字进行映射,并添加相应的关系数据库词典. Matcher/Mapper模块应用表8中列出的所有映射条件,包括NLQ标记、其关联的RDB词汇、SQL子句、条件或运算表达式或数学符号。该模 块可以访 问所有属 性、关系 、表和 唯一值( 映射表) 的MetaTables(数据字典)。图4中的两个映射器都可以引用嵌入式语言语义角色框架模式、数据或语言字典或底层RDB模式。该层使用RDB模式知识(语义数据模型、MetaTables)和相关语法知识将NLQ标记正确映射到相关RDB结构和内容。关于唯一的RDB值,并且由于将指定唯一值的托管属性和表,并使用哈希函数访问它们。对于较小的RDB(即,Zomato),并且如下一页中的表3所述,映射表是使用Python字典“server.map”构建的,该字典查找NLQ令牌和经 常 一起 查 询 的RDB 元 素 之间 的 关 联。 对 于 较大 的 RDB ( 即 ,WikiSQL),对RDB元素的统计数据执行数据分析这种编译是基于哪些RDB元素被更频繁地查询,然后作为哈希函数存储在映射表中。映射表表示为mapping_table[unique_value]=对应的属性。与映射表为算法的准确性增加的巨大价值相比,集成映射表不会增加任何显著的开销。然而,RDB越大,映射表的大小就越大,这会影响存储容量方面的资源使用。2.4.0.1. a)将NLQ令牌映射到RDB元素本单元将NLQ令牌与RDB模式MetaTables(lexica list)进行匹配 , 以 检 查 它 们 是 否 存 在 。 本 单 元 还 检 查 通 用 英 语 语 言 本 体(WordNet)中NLQ标记的同义词和含义。在讨论映射算法本身之前,必须定义RDB模式关系、它的词法(表首先,将定义并注册RDB模式中的关系。然后,它们将与NLQ动词匹配。如果见图4。 两个嵌入式映射器。F. 凯德万沙特国王大学学报6569NLQ动词未识别或缺失,NLQ标记之间的关系将通过分析词汇内部关系来找到,如伪代码9(附录12)中逐步解释的那样。既然已经定义并注册了RDB关系,那么算法就可以检索匹配的RDB词典及其托管属性或表。匹配根据匹配的NLQ词汇和它们之间建立的关系发生。然后将检索到的数据传递到下一个步骤,以便在SQL子句映射中使用,如伪代码10(附录13)中所述。NLQ标记通过MetaTables和同义词与RDB模式中的内部表示进行映射,然后映射到SQL子句。每个输入标记与其相关联的RDB元素(词典)类别(例如,值、列、表或关系)。映射器将NLQ文字条件和约束(无论是时态的还是基于事件的)转换为SQL查询子句,例如将“Older than 30”转换为“Age”>3000。映射器还提取功能或结构字的匹配(即,链接词或比较词 ) 和 搜 索 标 记 ( 即 , 从 注 释 的 NLQ 。 功 能 词 可 以 是 介 词(即,,,,他,他们,它),限定词(即, the , a, my ,neither),连词(即,和,或,当,当),辅助(即,is、am、are、have、got)或parti- cles(即,as,not)。该模块检查是否存在任何NLQ条件、运算或数学表达式(即,min、max、avg等)在NLQ中自定义WHERE语句,以便只从RDB中检索相关数据,如伪代码11(附录14)所述。在句法分析阶段,NLQ被分解为中心词-名词、名词修饰语、将语义角色联系在一起的动词、对象和关系修饰主义以及描述动词的形容词或副词。因此,NLQ令牌可以是表8(附录8)中的任何令牌类型。根据表8中总结的这些基于观察的假设,可以很容易地生成SQL模板SQL模板生成器主要需要知道属性、表和关系的数量.此外,进一步的信息被提供给SQL生成器,例如AND/OR子句(用于JOIN子句),条件比较表达式(用于WHERE或AGGREGATE子句),条件比较运算(用于INTERVAL子句或受控值)以及数字和实例(文字)作为值。例如,如果标记是一个值,那么对应的属性(对象)就是它的列名。此外,还考虑了SQL子句的同义词。例如,类似地,此外,“where”、“who has”或“with”是“WHERE”子句的同义词。由于RDB词典可能未在NLQ中显式使用,因此匹配器/映射器单元尝试通过将每个标记(及其同义词)与其潜在RDB元素(或其同义词)进行比较来将NLQ标记与等效RDB词典匹配。此外,NLQ动词还将与其等效的RDB模式关系相匹配,以定位该标记在RDB模式中被引用的位置。如果找到匹配项,算法将用匹配的词典替换标记,并以每个元素都被span标记包围的形式(表、属性、值、关系)返回匹配项如果发现令牌是RDB值,则属性和后续表将自动获知这一步使用Python库依赖关系树用于解释任何2个值之间的关系,基于它们的连接状态或具有公共依赖关系树中的父节点。关系数据库说明了基于数据类型的关系。因此,现有的值和属性同一实体(列)中的属性表或表之间存在关联关系在这项工作中,动词将被映射到关联关系,并将动词的参数(主语或宾语名词短语)映射到词汇表中相应的属性。识别这种关系关联被证明可以提高相应属性选择的准确性。因此,在该阶段中,由词法分析器使用语言本体Word-Net来定义标记列表,并且最终由RDB MetaTable词法替换并传递给语法分析器。2.4.0.2. 将RDB词法映射到SQL子句该映射使用基于假设表(表8)的基于规则的算法。第一步是构建主要的SQL子句,即SELECT、FROM和WHERE子句。属性名称将被输入到SELECT子句中。因此,SELECT关键字附加了表属性。通过语义分析WH-词的主要名词短语或中心名词(名词短语中的主要名词)来识别属性。WHERE关键字与从NLQ语义派生的属性-值对映射。FROM关键字与SELECT和WHERE子句中引用的所有相关表的名称映射.如果有一个以上的表,表将被连接并添加到FROM子句。如果存在数据检索条件,则将添加WHERE子句,并且条件将如伪代码13(附录16)中所示进行连接在这个阶段中,关键映射功能是将SQL子句和关键字与NLQ标识的词典映射以构建SQL查询。必须标识从中选择表名称的表列表,以及关系、属性和值及其形式为(属性,值)的关联属性2.5. SQL模板生成器数据查询语言(DQL)除了其他补充子句(例如,Where,AS,FROM). DQL虽然有一个主要的命令短语,但它是SQL的其他短语中使用最多的短语,特别是在RDB操作中。SELECT关键字用于向RDB发送查询,以查找特定的信息。这可以通过命令行提示符(即,终端)或通过应用程序接口(API)。本文提出了一种利用SELECT命令短语及其子句将NLQ翻译成SQL的算法为了形成SQL,SQL组件(即,表名、词汇库来源、属性值对、数据检索条件及关系),并按适当的次序排列。然后将识别的NLQ词典、模式匹配元素和识别的操作符(如果有的话)输入SQL模板生成器,以生成正确的SQL语句。SQL模板将根据已识别的表、属性和属性-值对的数量进行选择。系统与RDB建立连接,将SQL传输到RDBMS执行。RDB模式包含唯一标识符(例如,主键(PK)和外键(FK)列表存储在依赖关系表(映射表)中。该表唯一地标识每个属性的每个实例,以及它们是否通过与任何RDB元素的关系连接。每个属性SELECT语句的SQL模板列表根据NLQ问题和所需答案使用前面步骤中的所有输入来考虑对于具有显式SELECT的F. 凯德万沙特国王大学学报6570参数,所提出的基于查询的系统使用调查启发式程序,以确定哪些参数属于哪个SQL槽。参数可以用作查询约束(例如,在哪里,在哪里,等等) 如果它们已经有值,或者作为SELECT语句的一部分;如果它们需要从RDB中检索它们的值。之后,输入值和必要的{'table':'restaurant'},‘where’:'ope r a t or ' : '= ' , 'va l ue ' :'B ur r i to '} , ]} , } .执行结果为:运算符用于在适当的SQL模板中构造查询约束指定合适的运算符的示例每个WHERE条件对(属性和值)都在转换将NLQ字符串此外,确定系统可以或不能生成的SQL类也很重要。支持的SQL语句在图11中声明(附录17)。选择的SQL模板仅依赖于与表、属性和值相关的NLQ令牌的数量。然而,生成的SQL模板的类型可以是嵌套的、聚合的、否定的或基本的选择、连接和投影。这些类型在附录7中进一步分类。Python库“string.template”和“server.sql_templat es”用于构造和生成SQL语句,格式为:SELECT {attributes} FROM {table} [,{table}](WHERE {at- tribute = value} [and {attribute = value}])。该算法使用默认模板字符串(占位符),直到它从前面的步骤,特别是从匹配器/映射器步骤中接收到所选词汇。此过程按照表8中的标记映射规则执行,如14(附录18)。需要注意的是,所有SQL模板都使用DISTINCT关键字,正如前面解释的嵌入式最大长度算法一样。SQL模板生成器模块的第一步是通过“mysql.connector”函数将SQL模板生成器环境连接到MySQL服务器和MySQL DB会话 SQL模板生成器将选择应该选择哪个模板来生成查询。这个SQL模板选择是基于所需的表、属性和属性值对的数量,这些表、属性和属性值对是使用MySQL DB和Python库“pymysql”和“server.sql”从RDB模式中派生出来的选择正确的模板后,算法将返回生成的SQL状态,并正确插入词典然后,如Pseu- doCode 14中所示,查询被向前推以在连接的RDB上执行2.6. SQL执行和结果在这个阶段,与RDB建立连接以传递生成的SQL。查询结果可以被传递回第一层,以产生以自然语言形式对最终用户的适当响应。这是一个与最初提出的研究相反的过程,其中SQL是输入,NLQ是答案生成的输出。这一逆向过程需要话语表征结构。从SQL到NLQ的转换需要基于本体的语义解释器。这个解释器是一个中间语言表示层,在最初提出的研究工作中没有使用。在生成的SQL查询执行之后,从RDB中获取数据并将其作为原始数据显示给用户使用的一个示例python3-m nlqsql.main-d zomato/city.sql-j输出。json-i输出将是:请选择“:”属性“:”大小“,”类型“:”平均值“},”从“:3. 实施测试和性能衡量该算法的目的是改善人机交互,没有任何RDB查询语言的用户的先验知识。在所提出的研究中,NLQ到SQL的翻译算法开发使用基于语言学的映射过程与基于规则的机制。输入的NLQ经过许多NLP过程来生成并执行SQL。3.1. 实施环境和系统描述对于实现编码和执行,Python 3.7被选为编程语言,因为它具有清晰的语法和流行的用于RDB处理任务的NLP库。集成开发环境(IDE )PyCharm C用于开发和编译源代码,因为它们具有与Python 软 件 基 金 会 一 致 的 Python 单 元 测 试 自 动 化 框 架(Papalexakis等人, 2012年)。系统所需的软件如图10所示,Python 3.7(Python.,2018年):一种简洁而轻量级的编程语言,与大多数OS平台兼容。MySQL Community Server 8.0.18(下载,2019):MySQL RDB后端服务器。MySQL RDB(MySQLdb,,2012):用于存储和查询数据的RDB工具。NLTK(NLTK 3.4.5文档。,2019):提供Python兼容的库,用于NLQ词形化,标记,标记,解析,分类和语义推理。除了WordNet语料库之外,它还支持50多个词汇资源的接口。TextBlob(TextBlob,,2015):一个Python库,用于处理NLP任务,如POS标记,分类,名词短语提取和情感分析。Stanford CoreNLP 3.9.2(CoreNLP,2014):提供一组集成的NLP工具,通过Python兼容的应用程序编程接口(API)对任何传 入 的 NLQ 应 用 语 言 分 析 。 它 提 供 句 子 此 外 , StanfordCoreNLP还提供了词干分析器、POS标记器、日期和时间规范化器、命名实体识别(NER)、注释器、解析器和自举模式学习。此外,它还提供了开放的信息提取工具,如提取NLQ令牌之间的关系。WordNet(Miller,1995):一个大型英语词汇数据库,包括名词、动词、形容词等,除了IDE PyCharm C(JetBrains,2019):用于代码开发和单元测试的Python IDE。MySQL SQL(MySQL,,2019):一个SQL开发和管理工具,主要用于可视化建模。3.2. 数据库当前的实现使用MySQL DBMS作为后端环境。实现测试使用两个RDB,用于算法测试的Zomato RDB(Kaggle,,2017)和WikiSQLRDB●●●●●●●●●F. 凯德万沙特国王大学学报6571图五、 使用Zomato RDB的第一次实验的ROC曲线( GitHub , , 2017 ) 进 行 算 法 验 证 。 Zomato ( 小 型 RDB ) 和W
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功