📄 智能答疑系.txt
字号:
pos : ^postp; //当前的字在全文中出现的位置列表
next : ^tailtp //指向在本文中出现的内码在同一区的汉字的有关信息
END;
TYPE hashtable = RECORD
Elem : ARRAY[0x81..0xFE] OF tailtp
//全文所有的汉字的Hash表,索引值就是汉字内码的首字节
END;
从上面的数据结构可以看出,汉字的位置信息是一个序对(串号,字号),串号是该字所在的短串在全文的系列字符串中的序号,字号则是该字在所在的字符串中排在第几个字。设计这样的Hash表,可以满足既可快速查找到某个汉字在全文中所有的位置,又避免了采用双字节为索引时对空间的巨大占用。
当想计算某个汉字串的频度时,不必将该汉字串与所有的短串逐个匹配,只需要计算串中各个汉字的位置链表的邻接位置序列的个数即可。比如:汉字“中”的位置(可以根据其内码迅速在Hash表中找到)是(4,2)→(12,8)→(22,9),而“国”字的位置链表是(5,1)→(12,9)→(22,10),则字符串“中国”在全文中出现的次数就是2。
对于统计出来的字符组合以及其出现的频率,还要按照权值计算函数W=F×进行覆盖性检查。对于获得汉字组合,如果其权值大于了指定的某个阈值(比如50),则将该汉字组合放进临时词库中。临时词库中的词的优先级高,且在使用完了之后被自动清除。
切分过程:切分时依据的词典按照优先级顺序排列是针对本文的关键词词典(由答案材料的提供者在HTML文件中用META标记的Keywords属性来指定)、串频统计得到的临时词典和系统使用的常用词词典。
顺序扫描待切分的文本序列,利用上面的三个词典对文本进行逆向最大匹配分词。
(2)对于答案材料的分词结果进行加权
答案材料的分词结果中关键词对描述答案材料的语义的作用是不同的,用其相应的隶属度来表示。加权的目的就是确定各个关键词对于答案材料的隶属度。当然,根据语义来抽取可近似表示答案材料语义的关键词是一个需要高度智能的问题。除了要求能正确理解材料的语义,还要比较高的概括能力和较深的领域知识,才能解决这个问题。这是现有的计算机所难以完成的。所以采取的是使用统计的方法来计算隶属度。
计算的方法是从分词的结果开始逐词顺序往下扫描,并按下列方法来统计:
每个词在其第一次出现时设置一个相应的计数器,并设置成1,此后该词每出现一次就在其相应的计数器中加1。
在TITLE标记中出现的词,除同步骤1一样处理外,再在相应的计数器中外加一个整数T。
如果出现的词属于在META标记的Keywords的属性中指定的词之一,则除同步骤1的处理外,再在相应的计数器中外加一个整数K。
归一化:将所有词的计数器的计分相加得到总和S,然后将每个计数器的值除以S得到其隶属值。
进行λ滤波:设定阈值λ(λ属于[0,1]区间的一个小数),进行λ滤波。也就是将隶属值小于λ的关键词去掉。仅选取那些隶属值大于阈值的词作为关键词。
将经过上述步骤得到的关键词以及其权值(针对某篇答案材料的),存入系统的加权关键词库中,用于问题文本的分词。
在后面的分析中可以看到,对答案材料分词加权的过程不仅为系统对问题文本的分词提供了词库,更是对答案材料库的全文建立基于词的全文索引的过程。
而对于问题文本进行分词,实际上也是根据答案材料库的基于词的全文索引对答案材料进行搜索的过程。它包含两个阶段:一是对于问题文本根据系统的加权关键词词库进行逆向最大匹配分词;二是根据加权关键词库(实际上也是系统的基于词的全文索引库)各个词的权值计算分词结果中的各个词在同一篇文档中的权值和,权值和超过某个阈值的文档将被按照权值和的大小依次返回。
2.全文搜索
全文搜索技术是一项被广泛采用的搜索技术。包括两方面的核心技术,一是如何建立和维护全文索引库,另外一个是提供快速有效的全文检索机制。
全文搜索技术最重要的一点就是将原始文档中所有的基本元素的位置信息记录在索引库中。在汉语中,可选择的基本元素可以是字,也可以是词。从而形成了两种索引库结构,基于字表的索引库和基于词表的索引库。字表法是将原始文档中的每个字的位置信息记录在索引库中;而词表法则是以词为单位将其位置信息记录在索引库中。
字表法和词表法各有自己的优缺点。词表法需要使用切分词典,因而适用用于特定领域中内容相对固定的文档的全文搜索。其优点是索引库比较小,检索速度快。缺点则是不能适应跨领域的文档处理要求,因为此时的词典将急剧膨胀,难以使用。另外歧义的消除也是比较大的问题。而字表法采用对每个字的出现位置进行统计,不需要任何词典,适用范围强。当然,采用字表法的检索精度没有采用词表法那么高。
对于智能答疑系统来说,其答疑内容基本上是针对某个学科或者专有领域的。因此本文采取词表法来组织全文索引。
对答案材料库建立全文索引的方法,已经在上面的对答案材料进行分词的部分详细描述了。下面主要讨论词表的组织和检索的策略。
(1)词表的组织
词表法的全文索引库的主要部分是每个关键词的词表。索引库中的词表结构如下表所示。
表1 词表结构示意图
……
……
……
……
词语i
文档j的ID
权值
位置序列
……
……
……
……
其中的词语i就是被索引的能够代表目标文档j的文本特征的关键词。这样的关键词可能不只在某一个文档中是关键词,所以后面的文档选项则记录了对应的目标的文档j的ID号,通过ID号,可以在答案文档库中查找文档j的属性信息。权值则是词语i在文档j中的权值,计算方法已经在答案材料的分词中详细说明。位置序列则是词语i在文档j中出现的位置的数组,位置使用词语i在文档j中的偏移字节数。
由于使用词表法建立对答案材料的全文索引,所以检索策略很简单。对输入的问题文本,以索引库中的词条集合作为词典,使用逆向最大匹配算法来进行分词,并针对每个目标文档,进行关键词权值和的计算。权值和超过系统指定的阈值的文档将被返回。文档返回的顺序按照权值和的大小降序排列。
基于词的全文索引存储在大型商业数据库中,这样可以利用商业数据库的强大的存储和搜索性能,特别是可以利用SQL语句来指定条件进行搜索。
(2)高级检索功能的实现
对自然语言表示的问题文本先分词后根据词表法表示的索引库进行搜索,其实质就是关键词的逻辑与组合进行搜索。除了这种使用方式,智能答疑系统还应该支持直接的关键词逻辑组合、通过通配符进行模糊检索等高级检索功能。
关键词的逻辑组合检索,也就是布尔检索,是指多个关键词之间按照一定的逻辑运算关系组合在一起形成的组合检索。支持的基本逻辑关系是“与”、“或”和“非”三种,还可以与括号组合在一起形成逻辑表达式。检索的时候,系统首先要分析逻辑表达式,将其转换为逆波兰表达式,然后顺序处理该表达式,对遇到的被检索的关键词进行检索,并根据表达式中的逻辑关系,结合中间结果对检索范围进行优化,处理结束后,将得到符合条件的所有文档。
系统提供的通配符主要有两种,单字匹配和任意长度的字的组合匹配,分别用符号“?”和“*”表示。这只需要在搜索索引库的时候,利用对应的SQL语句指定搜索条件就可以做到。
3.WWW浏览服务与邮件服务的整合
WWW浏览和电子邮件是最常使用的两种基本的Internet服务。智能答疑系统提供对WWW浏览和电子邮件的支持,无疑降低了系统的使用难度。同时,WWW浏览和电子邮件也分别对应了同步和异步两种使用方式,所以系统的工作具有更高的灵活性。
对WWW浏览的支持的实现很简单,将智能答疑系统建立Web服务器的基础上,答案材料以HTML的形式来组织。
而对于电子邮件服务的支持,则需要在Web服务器端增加电子邮件处理引擎。邮件处理引擎包括下面三个基本功能:
邮件引擎可以接收远程的邮件服务器上某个邮件帐户的邮件。本模块的作用形式有两种:一种是在服务器端定时执行,接收智能答疑系统的用户给系统专用的接收提问邮件的邮件帐户发送过来的提问邮件;另外就是用户可以使用浏览器通过邮件引擎来接收自己的邮件。
邮件引擎可以分析并提取邮件的组成部分:如收件人的地址、发件人的地址、主题、邮件正文和附件等。
邮件引擎可以发送电子邮件,可以指定收件人的邮件地址,抄送地址,主题,邮件正文,附件等等。系统或用户可通过浏览器来执行该功能。
邮件引擎上述的三个基本功能,实际上就是在服务器端利用服务器的扩展API(如微软的Internet Information Server的ISAPI以及Netscape公司的Web服务器的NSAPI)以及支持的服务器端脚本语言(如Active Server Pages、Perl和PHP3等)的特点来分别实现服务应用的开发以及对于浏览器方式使用的支持。具体实现邮件引擎时,要利用上面的开发接口实现SMTP协议和POP3协议或IMAP协议的支持
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -