欢迎来到天天文库
浏览记录
ID:9647615
大小:54.00 KB
页数:4页
时间:2018-05-04
《自然语言接口软件的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、自然语言接口软件的设计与实现摘要为数据库设计自然语言接口成为数据库应用的一个研究方向。本文介绍了一种基于受限的汉语自然语言查询技术,通过建立机器辞典,对自然语言查询语句进行切词,再通过查找查询对象和查询条件,生成SQL语句。关键字受限;自然语言;机器辞典;切词;SQL语句1引言随着人工智能的发展和数据库技术的广泛应用,人们非常希望以一种更方便的方法去查询数据库。使用自然语言进行查询无疑是解决这一问题的有效方法。它避免了以往命令式人机界面、图形式人机界面繁杂的操作训练。事实证明,通用的自然语言理解往往是低效的,而
2、作为数据库人机接口的自然语言界面具有使用目的单一、用词范围有限等特点,在数据库查询意义上实现自然语言理解是完全可行的。另外,我们可以通过语音识别技术进行语音输入,从而简化复杂的输入工作。本系统针对数据库这一单一领域进行查询,从而简化了数据库查询的复杂操作。以提取查询对象和查询条件为手段,生成数据库查询语句为目的的软件。本软件的人机交互界面既可以单纯的通过输入语句,然后转换成SQL语句,也可以通过语音输入,再依靠复制-粘贴的手段进行输入,然后转换成SQL语句。2数据辞典的设计2.1辞典结构的设计为了便于以后对机器
3、辞典进行查找,本系统通过类来设计了机器辞典,具体结构如下:classjqcd//定义一个反映机器辞典的jqcd类{char*ct;//词条字符串char*yzym;//标志char*yybz;//语义char*szb1;//所在表1char*szb2;//所在表2char*szb3;//所在表3}其中:ct:表示词条字符串,在切词时进行匹配,便于以后生成SQL语句。yzym:表示句法标志,用来表示词条在语句中的功能。用九个数字表示不同的含义,其中:“0”表示域名,“1”表示域值,“2”表示逻辑操作符,“3”表示
4、关系操作符,“4”表示查询动词,“5”表示疑问词,“6”表示连接动词,“7”表示使役动词,“8”表示中性词。yybz:表示语义标志,用来表示词条所对应的概念在语义框架中的功能。给词条加上合适的语义标志,有助于以后生成SQL语句。语义标志比语法标志复杂的多。szb1:表示词条所在表1,因为有些词条(如学号等)不只在一个表中,指出所在表有助于以后生成SQL语句。szb2:表示词条所在表2,因为有些词条(如学号等)不只在一个表中,指出所在表有助于以后生成SQL语句。szb3:表示词条所在表3,因为有些词条(如学号等)
5、不只在一个表中,指出所在表有助于以后生成SQL语句。2.2辞典的排序辞典排序采取先按机内码由小到大,再按词条长度由大到小进行排序,通过排序以后,切词时可以先通过机内码找到该词第一个字,然后通过最大匹配法进行切词。【4】3切词及其存储3.1切词切词采取机内码匹配,然后通过匹配词条字符串进行切词,具体流程如图1所示。具体分析如下:首先,读入句子。然后,按照句子的第一个字的机内码与辞典中的词条第一个字相匹配,匹配成功则从辞典中顺序查找词条,找到词条后入栈。如果找不到,则进行容错处理。对于数字,我们给他添加特别标志,使
6、其在辞典中的位置为“-1”,以后进行分析时,只要遇到位置为“-1”的词时,就认为是数字。3.2存储切词完毕,用栈进行存储中间结果,栈的结构如下:structsave{char*savestr;intindexInDirectory;structsave*next;};其中:savestr存储切出的词。indexInDirectory存储切出的词在辞典中的位置,便于以后查询机器辞典中的词条。图1切词流程图4中间链表的生成生成中间链表【2】的目的是为了便于以后的语句分析,便于生成查找对象和查找条件中间链表的结构如下
7、:structe;//对应的域名intlocationlibrary;//在辞典中的位置structe;//域名intnamEindex;//域名在字典中的位置char*condition;//关系(逻辑或者一般关系)char*value;//域值intvaluEIndex;//域值在字典中的位置structcondStack*next;};7SQL语句的生成根据前面生成的查询对象栈和查询条件栈,进行SQL语句的转换。【1】首先,判断对象栈和条件栈是否为空。如果这两个栈有一个为空,则SQL转化没有办法执行,直接
8、返回空。其次,分别将对象栈和条件栈中的结点做出栈处理。并分别记下查询对象和条件的个数,并判断该查询语句属于哪一种情况:(1)单对象,单条件(2)单对象,多条件(3)多对象,但条件(4)多对象,多条件。然后,根据属于哪一种情况,来进行对汉语查询语句的SQL转换。但是,不管查询语句属于哪一种情况,都要进行判断查询对象和查询条件是否在同一个表中。这是通过szb()函数和OneOrMoreTa
此文档下载收益归作者所有