摘 要 为数据库设计自然语言接口成为数据库应用的一个研究方向
本文介绍了一种基于受限的汉语自然语言查询技术,通过建立机器辞典,对自然语言查询语句进行切词,再通过查找查询对象和查询条件,生成SQL语句
关键字 受限;自然语言;机器辞典;切词;SQL语句 1 引言 随着人工智能的发展和数据库技术的广泛应用,人们非常希望以一种更方便的方法去查询数据库
使用自然语言进行查询无疑是解决这一问题的有效方法
它避免了以往命令式人机界面、图形式人机界面繁杂的操作训练
事实证明,通用的自然语言理解往往是低效的,而作为数据库人机接口的自然语言界面具有使用目的单一、用词范围有限等特点,在数据库查询意义上实现自然语言理解是完全可行的
另外,我们可以通过语音识别技术进行语音输入,从而简化复杂的输入工作
本系统针对数据库这一单一领域进行查询,从而简化了数据库查询的复杂操作
以提取查询对象和查询条件为手段,生成数据库查询语句为目的的软件
本软件的人机交互界面既可以单纯的通过输入语句,然后转换成SQL语句,也可以通过语音输入,再依靠复制-粘贴的手段进行输入,然后转换成SQL语句
2 数据辞典的设计 2.1辞典结构的设计 为了便于以后对机器辞典进行查找,本系统通过类来设计了机器辞典,具体结构如下: class jqcd //定义一个反映机器辞典的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 辞典的排序 辞典排序采取先按机内码由小到大,再按词条长度由大到小进行排序,通过排序以后,切词时可以先通过机内码找到该词第一个字,然后通过最大匹配法进行切词
【4】 3 切词及其存储 3.1 切词 切词采取机内码匹配,然后通过匹配词条字符串进行切词,具体流程如图1所示
具体分析如下:首先,读入句子
然后,按照句子的第一个字的机内码与辞典中的词条第一个字相匹配,匹配成功则从辞典中顺序查找词条,找到词条后入栈
如果找不到,则进行容错处理
对于数字,我们给他添加特别标志,使其在辞典中的位置为“-1”,以后进行分析时,只要遇到位置为“-1”的词时,就认为是数字
3.2 存储 切词完毕,用栈进行存储中间结果,栈的结构如下: struct save { char *savestr; int indexInDirectory; struct save *next; }; 其中:savestr存储切出的词
indexInDirectory存储切出的词在辞典中的位置,便于以后查询机器辞典中的词条