信息索引导论学习笔记(1)——布尔检索

标签: 信息 索引 学习 | 发表时间:2013-06-09 17:49 | 作者:zinss26914
出处:http://blog.csdn.net

信息检索

信息检索(Information Retrieval,简称IR):从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程

信息检索按照规模分类:
  • 以web搜索为代表的大规模级别
  • 小规模级别,典型示例为个人信息检索
  • 中等规模级别,面向企业、机构和特定领域的搜索

倒排索引

顺序扫描:这种线性扫描就是一种最简单的计算机文档检索方式。这个过程通常称为grepping,它来自于Unix下的一个文本扫描命令grep。

顺序扫描无法满足的几种情况:
  1. 大规模文档集条件下的快速查找。
  2. 更灵活的匹配方式。比如grep命令下不能支持诸如Romans NEAR countrymen之类的查询
  3. 需要对结果进行排序
词项-文档的关联矩阵



词项-文档的关联矩阵,其中每一行代表一个词,每列表示一个剧本。当词t在剧本d中存在时,矩阵元素(t, d)的值为1,否则为0

为想要查询 Brutus AND Caesar AND NOT Calpurnia,我们分别取出 Brutus,Caesar及Calpurnia对应的行向量,并对Calpurnia对应的向量求反,然后进行基于位的与操作,得到:
110100 AND 110111 AND 101111 = 100100

词项-文档(term-doc)的关联矩阵具有高度稀疏性,仅仅保存非零的位置明显更好

倒排索引的构建
  • 对每个词项t,记录所有包含t的文档,建立词条序列<词条,docID>二元组
  • 对词项、文档排序。按词项排序,然后每个词项按docID排序
  • 合并词项,并记录词项的文档频率df(对每个词项t,记录所有包含t的文档数目)



布尔查询处理

and查询处理

比如说,我们要寻找既包含字符串“Brutus”又包含字符串“Calpurnia”的文档,我们可以采用归并的方法(类似于归并排序中的merge操作),进行如下几步:
  1. 取出包含字符串“Brutus”的倒排记录表
  2. 取出包含字符串“Calpurnia”的倒排记录表
  3. 通过合并两个倒排记录表,找出既包含“Brutus”又包含“Calpurnia”的文档



利用归并的算法,可以在O(n)的时间复杂度求出交集,书上用链表,我为了方便,直接用数组了

#include <stdio.h>

int main(void)
{
	int arr1[7] = {1, 2, 4, 11, 31, 45, 173}; /*Brutus文档集合*/
	int arr2[4] = {2, 31, 54, 101}; /*Calpurnia文档集合*/
	int result[7] = {0}; /*交集集合*/
	int i, j, k, len1, len2;

	/*变量初始化*/
	len1 = sizeof(arr1) / sizeof(int);
	len2 = sizeof(arr2) / sizeof(int);

	/*归并算法*/
	for (i = j = k = 0; i < len1 && j < len2;) {
		if (arr1[i] == arr2[j]) {
			result[k] = arr1[i];
			i ++;
			j ++;
			k ++;
		} else if (arr1[i] < arr2[j]) {
			i ++;
		} else if(arr1[i] > arr2[j]) {
			j ++;
		}
	}

	/*打印输出*/
	for (i = 0; i < k; i ++) {
		printf("%d ", result[i]);
	}
	printf("\n");

	return 0;
}

通用的查询优化策略(词典中保存文档频率df的一个充分理由)

(madding OR crowd) AND (ignoble OR strife) AND (killed OR slain)

  • 每个布尔表达式都能转换成上述形式(合取范式)
  • 获得每个词项的df
  • 通过将词项的df相加,估计每个OR表达式对应的倒排记录表的大小
  • 按照上述估计从小到大依次处理每个OR表达式

布尔逻辑转换(数学理论)

可以参考我之前写的一篇博客: http://blog.csdn.net/zinss26914/article/details/9056049

这种变换基于关于逻辑等价的规则:
  • 双重否定律
  • 德×摩根定律:非(P 且 Q) = (非P)  |  (非Q) 非(P 或 Q) = (非 P) 且 (非 Q)
  • 分配律

参考链接

作者:zinss26914 发表于2013-6-9 17:49:40 原文链接
阅读:17 评论:0 查看评论

相关 [信息 索引 学习] 推荐:

信息索引导论学习笔记(1)——布尔检索

- - CSDN博客推荐文章
信息检索(Information Retrieval,简称IR):从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程. 以web搜索为代表的大规模级别. 小规模级别,典型示例为个人信息检索. 中等规模级别,面向企业、机构和特定领域的搜索. 顺序扫描:这种线性扫描就是一种最简单的计算机文档检索方式.

Innodb索引和锁的学习笔记

- - 数据库 - ITeye博客
附录:前段时间学习了下innodb锁的相关知识,对锁和事务有了大体理解,这里做个小总结. 1.Innodb事务和锁的关系.    Innodb区别于MyISAM的两个特点就是Innodb对于事务的支持和对行锁的支持. 事务要求了一组SQL语句的ACID特性,同时为了避免对一行记录的并发更新,innodb本身会在一定情况下加锁,然后等语句所在的事务退出后(rollbak或者commit)释放锁.

MySQL学习(索引、引擎、优化)

- - 数据库 - ITeye博客
索引对于查询的速度至关重要,理解索引也是数据库调优的起点. 建立索引前,先设计好建立索引列的数据类型. 1)越小的数据类型性能越好:因为越小的数据类型对于硬盘读取、内存、CPU缓存都需要更少的空间,处理起来更快. 2)简单的数据类型更好:整型比字符型更好. 3)尽量避免使用NULL: 建立索引的列最好是Not Null约束的,如果一定要用NULL,可以用0或者某特殊值替代.

搜索引擎-信息检索实践—网络爬虫

- - CSDN博客互联网推荐文章
网络爬虫有两个任务:下载页面和发现URL. 1.从请求队列中取出URL,下载对应页面,解析页面,找到链接标签. 2.网络爬虫发现了没有遇到过的URL,将其加入请求队列. 网络爬虫使用礼貌策略(politeness policy):. 网络爬虫不会在特定的网络服务器上一次抓取多个页面,在同一个网络服务器的两次请求之间,网络爬虫会等待一定时间.

Lucene5学习之多线程创建索引

- - 编程语言 - ITeye博客
    昨晚睡觉前把多线程创建索引demo写好了,今天早上7点多就起来,趁着劲头赶紧记录分享一下,这样对那些同样对Lucene感兴趣的童鞋也有所帮助.     我们都知道Lucene的IndexWriter在构造初始化的时候会去获取索引目录的写锁writerLock,加锁的目的就是保证同时只能有一个IndexWriter实例在往索引目录中写数据,具体看截图:.

[信息图表]Internet如何改变学习的方式

- Amom - cnBeta.COM
以下是来自Column Five Media制作的信息图表,它展示了Internet是如何深远地影响了教育的. 在这个容量有7万亿美元的市场里面从来就不缺乏大公司的支持,他们都在互联网的教育圈子里努力培养自己的未来客户和雇员,电子书籍、开放式在线课堂、移动学习、个性化学习环境等概念层出不穷,现在让我们一起来看这张信息图吧:.

调查称搜索引擎仍为网民最主要信息查找方式

- rudan - cnBeta.COM
北京时间8月15日下午消息,美国互联网调查机构“皮尤网络与美国生活项目”(Pew Internet and American Life Project,以下简称“皮尤”)公布的最新调查结果表明,美国92%的成年网民通过搜索引擎在网上查找信息,而依赖电子邮件的美国成年人也达到相同的比例.

CloudMagic: 整合多平台数据 打造个人信息搜索引擎

- - 雷锋网
随着网络服务的迅速发展,人们已经习惯将各种各样的文件上传到云端存储,但是往往要用这些文件的时候却记不清楚到底在哪,相信很多人都遇到过这种情况吧. 那么有没有一种服务可以帮你快速的在不同云服务中检索你需要的信息呢. CloudMagic是一个跨平台的云搜索应用,这款服务可以追溯至2010年,当初是作为加速Gmail搜索的一个浏览器扩展,后来又推出了 iOS和 Android版本,还另外添加了其它服务如Google Docs, Google Contacts, Google Calendar, Microsoft Exchange和 Twitter等.

Google发布交互式信息图:搜索引擎是怎样工作的?

- - 雷锋网
每一个人都好奇Google 搜索是怎样工作的,是怎样从一个页面爬行到另一个页面的,当人们搜索时怎样排列这些结果的. 所以Google用一个全新的方式呈现了这个答案,看看下面的 交互式图表,详细解释了搜索过程,包括Google是如何处理垃圾邮件的. Google去年发布了一个互动图谱( The Story Of Send)解释如何处理邮件的.

维基百科准备打造搜索引擎 信息比谷歌更可靠

- - cnBeta全文版
维基媒体基金会本周确认了备受争议的“知识引擎”项目所获得的捐款. 维基媒体基金会同时确认,维基百科将进军搜索市场,但维基百科创始人吉米·威尔士(Jimmy Wales)否认,维基媒体基金会将从事类似谷歌的业务. 维基媒体基金会此前拒绝披露来自奈特基金会捐款的细节. 这导致了由社区选出的维基媒体基金会董事会成员詹姆斯·赫尔曼(James Heilman)去年12月的辞职.