博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01布尔模型&倒排索引
阅读量:5942 次
发布时间:2019-06-19

本文共 1763 字,大约阅读时间需要 5 分钟。

原文链接: http://www.cnblogs.com/jacklu/p/8379726.html

博士一年级选了这门课 SEEM 5680 Text Mining Models and Applications,记下来以便以后查阅。

1. 信息检索的布尔模型

用0和1表示某个词是否出现在文档中。如下图例子,要回答“Brutus AND Caesar but NOT Calpurnia”,我们需要对词的向量做布尔运算,即110100 AND 110111 AND 101111=100100 对应的文档是Antony and Cleopatra和Hamlet

然而这种方法随着数据的增大是非常耗费空间的。比如我们有100万个文档,每个文档平均有1000字,总共有50万个不同的词语,那么矩阵将是500 000 x 1 000 000。这个矩阵是稀疏的,1的个数一般不会超过1亿个。

2. 倒排索引

倒排索引是为了解决上述布尔模型的问题。具体来说,每个词用链表顺序存储文档编号。如下图所示:

建立索引的核心是将词按字母顺序排列,合并重复词,但是要记录词频。

3. 倒排索引模型中对查询语句(AND)的处理

1、求Brutus AND Calpurnia,即求两个链表的交集。

算法思路是如果文档号不同就移动较小的指针,伪代码 INTERSECTION(p1, p2):

answer<-()while p1 != NIL and p2 != NILdo if docID(p1) = docID(p2)     then ADD(answer, docID(p1))         p1 <-next(p1)         p2 <-next(p2)     else if docID(p1) < docID(p2)         p1 <-next(p1)     else p2<-next(p2)return answer

思考题,有两个词项A,B,其文档编号链表长度分别为3和5,那么对A,B求交集,最少的访问次数和最多的访问次数分别是多少?各举一个例子

最少访问次数是4,比如A:1-2-3,B:3-4-5-6-7;最多访问次数是8,比如A:1-7-8, B:3-4-5-7-9

2、思考题:求Brutus OR Calpurnia,即求两个链表的并集。伪代码 UNION(p1,p2):

answer<-()while p1 != NIL and p2 != NILdo if docID(p1) = docID(p2)    then ADD(answer, docID(p1))        p1 <-next(p1)        p2 <-next(p2)    else if docID(p1) < docID(p2)    then ADD(answer, docID(p1))        p1<-next(p1)    else ADD(answer, docID(p2))        p2<-next(p2)return answer

3、思考题:求Brutus AND NOT Calpurnia。伪代码 INTERSECTION(p1,p2, AND NOT):

answer<-()while p1 != NIL and p2 != NILdo if docID(p1) = docID(p2)        p1 <-next(p1)        p2 <-next(p2)    else if docID(p1) < docID(p2)    then ADD(answer, docID(p1))        p1<-next(p1)    else p2<-next(p2)        if p1 != NIL and P2 = NIL    then ADD(answer, docID(p1))        p1<-next(p1)return answer

 

参考资料:http://www1.se.cuhk.edu.hk/~seem5680/

转载于:https://www.cnblogs.com/jacklu/p/8379726.html

你可能感兴趣的文章
如何做618数据复盘?你需要掌握这8大思路
查看>>
《ANSYS FLUENT 16.0超级学习手册》——2.5 FLUENT 16.0的基本操作
查看>>
深入理解Spark:核心思想与源码分析. 3.9 启动测量系统MetricsSystem
查看>>
讲给普通人听的分布式数据存储
查看>>
《C++面向对象高效编程(第2版)》——3.13 采用语义
查看>>
《 短文本数据理解》——2.5小结
查看>>
如何编写一个全新的 Git 协议
查看>>
马云携阿里17位创始人及合伙人捐赠浙大一院5.6亿,杭州渐成中国硅谷
查看>>
《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析
查看>>
《配置管理最佳实践》——2.10 建立构建过程
查看>>
《C++入门经典(第5版•修订版)》——2.6 问与答
查看>>
PLM调研第二天
查看>>
《精通Linux设备驱动程序开发》——1.5 Linux发行版
查看>>
《术以载道——软件过程改进实践指南》—第1章1.3节如何实施CMMI
查看>>
Harris’s Linked List
查看>>
(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践
查看>>
什么Linux服务器最适合你?
查看>>
git 换行符问题,统一linux风格
查看>>
SQL on Linux Run on Docker
查看>>
C语言程序设计实践(OJ)-初识函数
查看>>