自然语言接口软件的设计与实现_第1页
自然语言接口软件的设计与实现_第2页
自然语言接口软件的设计与实现_第3页
自然语言接口软件的设计与实现_第4页
自然语言接口软件的设计与实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第页自然语言接口软件的设计与实现

关键字受限;自然语言;机器辞典;切词;SQL语句

1引言

随着人工智能的发展和数据库技术的广泛应用,人们非常希望以一种更方便的方法去查询数据库。使用自然语言开展查询无疑是解决这一问题的有效方法。它防止了以往命令式人机界面、图形式人机界面繁杂的操作训练。事实证明,通用的自然语言理解往往是低效的,而作为数据库人机接口的自然语言界面具有使用目的单一、用词范围有限等特点,在数据库查询意义上实现自然语言理解是完全可行的。另外,我们可以通过语音识别技术开展语音输入,从而简化复杂的输入工作。

本系统针对数据库这一单一领域开展查询,从而简化了数据库查询的复杂操作。以提取查询对象和查询条件为手段,生成数据库查询语句为目的的软件。本软件的人机交互界面既可以单纯的通过输入语句,然后转换成SQL语句,也可以通过语音输入,再依靠复制-粘贴的手段开展输入,然后转换成SQL语句。

2数据辞典的设计

2.1辞典构造的设计

为了便于以后对机器辞典开展查找,本系统通过类来设计了机器辞典,具体构造如下:

classjqcd//定义一个反映机器辞典的jqcd类

{char*ct;//词条字符串

char*yzym;//标志

char*yybz;//语义

char*szb1;//所在表1

char*szb2;//所在表2

char*szb3;//所在表3

}

其中:ct:表示词条字符串,在切词时开展匹配,便于以后生成SQL语句。yzym:表示句法标志,用来表示词条在语句中的功能。

用九个数字表示不同的含义,其中:“0”表示域名,“1”表示域值,“2”表示逻辑操作符,“3”表示关系操作符,“4”表示查询动词,“5”表示疑问词,“6”表示连接动词,“7”表示使役动词,“8”表示中性词。yybz:表示语义标志,用来表示词条所对应的概念在语义框架中的功能。给词条加上合适的语义标志,有助于以后生成SQL语句。语义标志比语法标志复杂的多。szb1:表示词条所在表1,因为有些词条(如学号等)不只在一个表中,指出所在表有助于以后生成SQL语句。szb2:表示词条所在表2,因为有些词条(如学号等)不只在一个表中,指出所在表有助于以后生成SQL语句。szb3:表示词条所在表3,因为有些词条(如学号等)不只在一个表中,指出所在表有助于以后生成SQL语句。

2.2辞典的排序

辞典排序采取先按机内码由小到大,再按词条长度由大到小开展排序,通过排序以后,切词时可以先通过机内码找到该词第一个字,然后通过最大匹配法开展切词。

3切词及其存储

3.1切词

切词采取机内码匹配,然后通过匹配词条字符串开展切词,具体流程如图1所示。

具体分析如下:首先,读入句子。然后,按照句子的第一个字的机内码与辞典中的词条第一个字相匹配,匹配成功则从辞典中顺序查找词条,找到词条后入栈。如果找不到,则开展容错处理。对于数字,我们给他添加特别标志,使其在辞典中的位置为“-1”,以后开展分析时,只要遇到位置为“-1”的词时,就认为是数字。

3.2存储

切词完毕,用栈开展存储中间结果,栈的构造如下:

structsave

{char*savestr;

intindexInDirectory;

structsave*next;

};

其中:savestr存储切出的词。indexInDirectory存储切出的词在辞典中的位置,便于以后查询机器辞典中的词条。

4中间链表的生成

生成中间链表的`目的是为了便于以后的语句分析,便于生成查找对象和查找条件中间链表的构造如下:

structwTypeList

{charword;//词条

char*wordType;//词性

charfield_value;//对应的域值

charfield_name;//对应的域名

intlocationlibrary;//在辞典中的位置

structwTypeList*next;//next指针

};

其中:该中间链表中的词性是关系到以后生成查询对象和查询条件的关键项。通过词性的判断可以提取查询对象和查询条件,以便生成SQL语句。

5查询对象的生成

自然语言的查询语句不外乎是命令性的祈使句、疑问句、条件判断句,根据相应句型,采用不同搜索方式来确定查询对象,本软件采用三种搜索方式:不需要搜索查询对象、需正向搜索查询对象、需逆向搜索查询对象。

经过反复比较和总结自然语言查询语句,共有六种句型:

(1)who—sentence如“谁的学号为100033102?”,这种句型的查询对象隐含在“谁”中,搜索方式为“不需搜索”。

(2)us—sentence如“哪些学生的籍贯是**?”

(3)特殊语句:即verbqus不在句子首尾,而可以在其他的任何位置上。如“戴子强是哪个地方的人?”。以上句型一般采用正向搜索查询对象。

(4)findsentence这是以动词开头的句型,大部分的祈使句的查询句都是这种句型。如“查询学号为1000033102的学生的姓名”。

(5)b(把)sentence这是以“把”为首的祈使句。如“把学号为1000033102的学生找出来”。

(6)sentence--verb—qus(who)这种句型是以verbqus或verbwho结尾的句子,如“张三的学号是多少?”

(4)(5)(6)三种句型采取逆向搜索查询对象。以上六种句型,其覆盖的查询句子已相当广泛,所以当句型和搜索方式确定以后,就可以找出查询对象。查询对象的搜索规则渗透到程序中,采取的方法是一边搜索中间词链,一边根据句型搜索查询对象。

6查询条件的生成

首先,根据前面生成的中间词链,在通过查询对象寻找的程序后用一个指针从中间词链的头移动到尾,分别判断当前指针指向的结点的词性是不是为“-1”、“8”、“4”,即为查询对象、查询动词、中性词、一般动词。如果是,指针后移;如果不是,则复制该结点,然后执行插入查询条件词链中的程序。这样指针移动到头后,所生成的查询条件链就是下一步程序所要的词链。若中间词链的头指针和首结点相等的话,即中间词链为空,则直接返回查询条件栈的头指针。

其次,根据七种基本模版:(1)域名+关系符+域值(2)域名+关系符(3)域名+域值(4)域值(5)域值+域名+关系符(6)域值+域名(7)关系符+域名开展匹配。一个查询条件链可以有一个或多个模版组成。

最后,将匹配成功的一个或多个模版分别压入条件栈,返回入栈后的栈顶指针。在没有找到匹配的模版或条件链为空时,直接返回没有结点的条件栈的栈顶指针。

查询条件栈的构造为:

structcondStack//查询条件栈

{char*name;//域名

intnameIndex;//域名在字典中的位置

char*condition;//关系(逻辑或者一般关系)

char*value;//域值

intvalueIndex;//域值在字典中的位置

structcondStack*next;

};

7SQL语句的生成

根据前面生成的查询对象栈和查询条件栈,开展SQL语句的转换。

首先,判断对象栈和条件栈是否为空。如果这两个栈有一个为空,则SQL转化没有方法执行,直接返回空。

其次,分别将对象栈和条件栈中的结点做出栈处理。并分别记下查询对象和条件的个数,并判断该查询语句属于哪一种情况:(1)单对象,单条件(2)单对象,多条件(3)多对象,但条件(4)多对象,多条件。

然后,根据属于哪一种情况,来开展对汉语查询语句的SQL转换。但是,不管查询语句属于哪一种情况,都要开展判断查询对象和查询条件是否在同一个表中。这是通过szb()函数和OneOrMoreTable()函数结合来实现的。

在单对象,单条件中,如果查询对象和条件在同一表中,则直接调用函数one()来执行SQL语句的转化。在one()函数中,将select、from、where等SQL语句中必要的单词转换成字符串,将查询对象和查询条件根据他们能在SQL中的位置开展转换。当查询对象和查询条件不在同一个表中,此时就是一个嵌套查询的语句。根据提供的9个表,找出查询对象和查询条件分别所在表之间的联系。因这9个表之间都是通过什么号(例如:学号、院系号)开展联系的,所以最后在多表问题上通过表之间的联系并调用more()函数来开展SQL语句的转换。

在单对象,多条件情况中,先判断条件是否在同一个表中,然后在分别判断多条件和单个对象是否在同一个表中。这样就又会出现多条件在同一个表中,与单对象在同一个表中,与单对象不再同一个表中;多条件不在同一个表中,单条件与单对象在同一个表中,单条件与对象不再同一个表中等多种情况。分别对这些情况开展判断和分析,最后都将它们转换成简单的单对象单条件的情况开展处理。对于实在没有方法处理的句子情况

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论