python 信息检索索引压缩_信息检索课程小结

本文总结了作者使用Python进行信息检索实验的内容,包括E1词频查询、E2汉语分词(最大匹配法)、E3网页处理(使用BeautifulSoup库解析HTML)和E4倒排索引的构建。实验中,作者通过滑动窗口实现最大匹配法,使用BeautifulSoup解析HTML并理解DOM树结构,以及构建倒排索引的基础步骤。
摘要由CSDN通过智能技术生成

这是本学期所有的实验报告

b54f771f8e0e19d3cd297593a4f2b9de.png

因为大一上学期学了python,这学期学的java还不是很熟练,所以所有的实验都是用python实现的。

E1词频查询

E1词频查询就是对一个英文文档进行词频统计,并实现查询功能。这是容易实现的,因为老师给的文档是处理好的,标点与单词间都有空格,直接读取文件,利用字典操作即可。

E2汉语分词

E2汉语分词需要利用最大匹配法进行中文分词,并且要对分词算法进行评分。所谓最大匹配法就是到给出的词典中去匹配最长的词,这里给出一个例子:

d58027d563adf9e8ecbfb6af2a4e1f87.png

根据这个很容易就想到利用滑动窗口实现。代码如下:

def sliding_window(line, left, right, length, word_dict, fp2):

"""滑动窗口,可从左到右寻找词的最大匹配"""

while left < length:

current = line[left:right]

# 成立的两种条件,最大匹配在字典中和单个字,成立后窗口左端右移,右端还原

if (current in word_dict) or (left + 1 == right):

fp2.write(current + ' ')

left = right

right = length

# 不成立时窗口右端左移

else:

right -= 1

分词结束后要利用F值对算法进行评价,标准如下:

5c00a98449eb9d13da30d977d63bdb2a.png

这就需要把分词得到的文档与正确分词的文档进行对比。

E3网页处理

这次实验的任务是从html文件中抽取文本和链接。构建信息检索系统的第一步就是爬取数据(利用爬虫抓取互联网上的网页)以及分析网页(获取文本内容–用于建索引 和 链接–送给爬虫接着抓取新数据)而这次实验就是分析网页。

这个实验一开始有点懵,想直接利用正则表达式对网页进行处理,是但发现工作量太大了。幸亏python有很多牛逼的库,而本次实验我就用了BeautifulSoup,不得不夸一句这个库是真的好用。然后本次实验的重点就成了学习并熟练掌握bs4。

我觉得理解这个库的关键是理解DOM树结构(Document Object Model),这里有个学习网站https://www.jianshu.com/p/0ec77136ec48简单来说一个html文件就是文档节点,其中的标签是元素节点,元素中的文本是文本节点,每个属性是属性节点,注释属于注释节点。

eb8b08b8b542f786de7e15f5a279b30a.png

知道DOM后,bs就好理解了,bs有四种对象Tag,NavigableString,BeautifulSoup和Comment。其中BeautifulSoup对应文档节点,Tag对应标签节点,NavigablesString对应文本节点,Comment对应注释节点。

然后讲一下使用流程,一般三步就行了:

(1) 创建BeautifulSoup对象

soup = BeautifulSoup(open(file_src, encoding=encoding(file_src)), "html.parser")

# 第一个参数传HTML文档字符串,第二个参数传HTML解析器,其他可选参数如编码方式等可自己选择

(2)搜索节点

一种是利用点取属性的方式与find()方法,但只能获取第一个一般不用

二是利用soup.find_all()方法

看个实例:

lst = soup.find_all('a',class_='abc')

# 得到是所有class属性为“abc”的...标签的列表

(3)访问节点信息

接着上面的代码,利用lst[i][‘href’]就可以得到标签的“href”属性

步骤大概是这样,还有些细节的东西需要自己在实践中去体会。

E4倒排索引

正排索引是依据文档去找符合要求的词,而倒排索引就是依据词得到文档ID(docID)表,这是为布尔查询做铺垫的。

先讲一下实现倒排索引的基本步骤:

(1)词条序列

就是得到每个文档词项及其对应的docID

(2)排序

将每个词项依据docID排序

(3)词典 & 倒排记录表

词典记录的是词项(Key)对应文档频率(Value),词典的用处是在进行布尔查询时能先计算比较短的(And操作的效率和倒排索引表的长度有关)。

倒排记录表记录的是词项(Key)对应docID表(Value)

这里要提一句本身倒排记录表是要用链表实现的,但是数据结构还没学,所以就用列表代替了。于是进行布尔查询中的合并倒排索引表就被忽略了,也就是说这个词典在本次实验中没用到。

在完成倒排索引之后就是进行布尔查询。在本次实验中就是对倒排记录表(列表)进行集合操作,这个就很容易实现了,不多赘述。

(第一次写,肯定有很多不足啦。因为这个我是当课程小结来看待的,主要是给自己复习用到。如果有人看了觉得有帮助那最好啦。)

原文链接:https://blog.csdn.net/weixin_46684748/article/details/106538964

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值