⒊ 模块的具体实现
在对关键词模式的转换中,我们立足于对现有的关键词进行合理的扩展,即对体现关系的关键词进行合理的近义或者同义扩展,并对疑问词的位置进行适当的调换,力争全方位、多角度、合理化的转换问题模式。转换的关键是用网络中使用频率较高的词语代替句子中原有的关系词。例:CBA包括多少支球队?初步划分为:CBA+包括+球队。“包括”一词在网络中出现的频率远远低于“有”,所以,在问题模式转换过程中,将“包括”替换为“有”,提交给网络的模式即为:CBA+有+球队。
该模块的代码如下:
输入 string;
Sqlstr=”select mainkey from biao1
Where mainkey-type=
(select mainkey-type
From biao2
Where enlarge-text=’$string’ )”
String=sqlstr
输出 string
上述代码的作用是:依次将问题理解模块传来的关键词,依次与关键词转换表中的词相匹配,有则返回主关键词,和问题理解模块分析出的实体词一起提交给网络,进行下一步的操作。
这其中涉及到对关键词的扩展表的查询,借用了SQL server中查询语句“select”,通过获取问题分析传来的关键词,对照扩展表,进行查询、转换。
其表结构如表3.3、表3.4所示:
表3.3 关键词表
字段名 数据类型
Mainkey 文本
Mainkey-type 数字
表3.4 关键词转换表
字段名 数据类型
Enlarge-text 文本
Mainkey-type 数字
当然,此种转换方式存在一定的局限性. 例如:含有“球队+参加+比赛”,既可以问参加比赛的球队数量,也可以用来问具体的哪些球队。为了解决这一局限性,我们提出了常见问题知识库的建立。
3.2.3 常见问题知识库的建立
常见问题知识库的建立是为了这样的一个目的:直接给用户一个简介的答案。由于网络信息的繁杂,及该系统的局限性等原因,对部分问题无法给出具体答案。我们觉得有必要建立这样一个库,一个立足于网络的常见问题知识库。即将用户常见的、关心的问题,整理后存放入库中。用户点击相关问题时,即可进入库中,查看其答案。部分问题的答案因其篇幅等原因,暂时给出相关网站,用户点击问题后,在显示相关网站的同时,触发网络连接,给用户具体的网页截取图。
在此库中,我们将问题分为以下几种类型:球员、球队、比赛、其它。
其表结构如表3.5所示:
表3.5 常见问题库表
字段名 数据类型
question text
answer text
type text
此模块运行界面如图3.3所示:
图3.3 常见问题库
该模块的建立代码如下:
Dim myconn As New ADODB.Connection
Dim rs As New ADODB.Recordset
strconn = "provider=microsoft.jet.oledb.3.51; data source=D:\wenjian\db5.mdb"
Myconn.Open strconn
sqlstr = "select * from question where type like'球员'"
rs.Open sqlstr, myconn
List1.Clear
If Not rs.EOF Then
While Not rs.EOF
List1.AddItem "" & rs.Fields (1) & ""
rs.MoveNext
Wend
End If
根据上述代码,可以将一些常见的问题依次分类的加入到库中,用户查看时可以根据自己的问题进行相关查询。必要的时候,可以对该库进行相应的修改。
上述模块及关系的划分,在具体的实现过程中可能有些变动,各种实体之间存在的关系可能也不止一种,体现关系的关键词也会与现实存在差异。我们做这个系统的,一是为了检验我们前面所提出的“基于知识库的问答系统”是否合理,是否可以顺利实现,另一方面也希望对研究问答系统的其它模型有稍许帮助。系统中存在的种种问题及不足,我们力求最小化;模块的划分及选择,我们力求大众化;答案的模式取舍,我们力求简单化。
实验结果和分析
实验平台要求
Visual basic 6.0能够运行的条件:Windows95、Windows NT或者更高的版本;Microsoft Windows95支持的cd-rom. Microsoft Windows95支持的VGA或分辨率更高的监视器; Windows 95/98下要求的24MB内存, Windows nt下要求32MB以上的内存[11] 。
具体实验
实验一:CBA有多少球队?程序运行的界面如图4.1所示: