布尔检索模型接受布尔表达式查询,即通过AND、OR及NOT等逻辑操作符捋词项连接起来的查询.
grepping的定义。
假如你想知道《沙士比亚全集》中包含Brutus和Caesar但不包含Calpurnia.一种办法就是从头到尾阅读这本全集,对每部剧本都要留心包含Brutus和Caesar但不包含Calpurnia。这种线性扫描就是一种最简单的计算机文档检索方式。这个过程就叫作grepping.它来至于Unix下的一个文本扫描命令grep.在文本内进行grepping扫描速度很快,在使用现在的计算机的情况下会更快,并且在扫描过程中还可以使用正则表达式来支持通配符查找。总之,在使用现代化的计算机进行查找时,对一个规模不大的文档集(不超过100万个单词)进行线性非常简单,根本不需要做额外的处理。
但是,在大部份情况下只采用上述扫描方式是远远不够的,我们需要做更多的处理.这些情况如下所述:
1、大规模的文档集查找.在线数据量的增长并不低于计算机的速度增长,我们可能需要几十亿到万亿单词的数据规模下进行查找.
2、有时我们需要灵活的匹配的方式.比如:在grep命令下不支持诸如Romans NEAR countrymen之类的查询,这时的NEAR操作符的定义可能扩为5个词之内或同一个句子中.
3、需要对结果进行排序.很多情况下,用户希望在多不个满足自己需求的文档中找到最佳答案.此时我们就不能采用上面的线性扫描方式了.一种非线性的方式就是事先给文档建立索引(index).我们仍然回到《沙士比亚全集》的例子,并通过介绍布尔检索的基本知识.给定词表《沙士比亚全集》中共使用32000个不同的词),假定我们对每篇文档(这里指每部剧本)都事先记录它是否包含词表中的某个词,结果就会得到由一个布尔值构成的词项-文档关联矩阵(incidence matrix).词项(Item)是索引的单位(将在后面章节谈到),它通常可以用词来表示,目前可以把词项当成词.当然在信息检索的文献中一般都采用词项这个更正式的说法,而词项也不一定是词.比如1-9,Hong Kong也可以作为词项,但它们并不是词.再回到上述矩阵中,根据从行还有列的角度来看,可以得到不同的向量;从行来看,可以得到每个词项对应的文档向量;表示在那个文档中出现或不出现;从列来看,可以得到每个文档对应的词项向量.表示文档中那些词项出现或不出现.
图1-1