基于python构建搜索引擎系列——(四)检索模型

基于python构建搜索引擎系列——(四)检索模型 构建好倒排索引之后,就可以开始检索了, 检索模型有很多,比如向量空间模型,概率模型,语言模型等,其中最有名的

本文包含相关资料包-----> 点击直达获取<-------

基于python构建搜索引擎系列——(四)检索模型

构建好倒排索引之后,就可以开始检索了。

检索模型有很多,比如向量空间模型、概率模型、语言模型等。其中最有名的、检索效果最好的是基于概率的BM25模型。

给定一个查询Q和一篇文档d,d对Q的BM25得分公式为:

公式中变量含义如下:

  • qtf:查询中的词频

  • tf:文档中的词频

  • ld:文档长度

  • avg_l:平均文档长度

  • N:文档数量

  • df:文档频率

  • b,k1,k3:可调参数

这个公式看起来很复杂,我们把它分解一下,其实很容易理解。第一个公式是外部公式,一个查询Q可能包含多个词项,比如“苹果手机”就包含“苹果”和“手机”两个词项,我们需要分别计算“苹果”和“手机”对某个文档d的贡献分数w(t,d),然后将他们加起来就是整个文档d相对于查询Q的得分。

第二个公式就是计算某个词项t在文档d中的得分,它包括三个部分。第一个部分是词项t在查询Q中的得分,比如查询“中国人说中国话”中“中国”出现了两次,此时qtf=2,说明这个查询希望找到的文档和“中国”更相关,“中国”的权重应该更大,但是通常情况下,查询Q都很短,而且不太可能包含相同的词项,所以这个因子是一个常数,我们在实现的时候可以忽略。

第二部分类似于TFIDF模型中的TF项。也就是说某个词项t在文档d中出现次数越多,则t越重要,但是文档长度越长,tf也倾向于变大,所以使用文档长度除以平均长度ld/avg_l起到某种归一化的效果,k1和b是可调参数。

第三部分类似于TFIDF模型中的IDF项。也就是说虽然“的”、“地”、“得”等停用词在某文档d中出现的次数很多,但是他们在很多文档中都出现过,所以这些词对d的贡献分并不高,接近于0;反而那些很稀有的词如”糖尿病“能够很好的区分不同文档,这些词对文档的贡献分应该较高。

所以根据BM25公式,我们可以很快计算出不同文档t对查询Q的得分情况,然后按得分高低排序给出结果。

下面是给定一个查询句子sentence,根据BM25公式给出文档排名的函数:

python def result_by_BM25(self, sentence): seg_list = jieba.lcut(sentence, cut_all=False) n, cleaned_dict = self.clean_list(seg_list) BM25_scores = {} for term in cleaned_dict.keys(): r = self.fetch_from_db(term) if r is None: continue df = r[1] w = math.log2((self.N - df + 0.5) / (df + 0.5)) docs = r[2].split('\n') for doc in docs: docid, date_time, tf, ld = doc.split('\t') docid = int(docid) tf = int(tf) ld = int(ld) s = (self.K1 * tf * w) / (tf + self.K1 * (1 - self.B + self.B * ld / self.AVG_L)) if docid in BM25_scores: BM25_scores[docid] = BM25_scores[docid] + s else: BM25_scores[docid] = s BM25_scores = sorted(BM25_scores.items(), key = operator.itemgetter(1)) BM25_scores.reverse() if len(BM25_scores) == 0: return 0, [] else: return 1, BM25_scores

首先将句子分词得到所有查询词项,然后从数据库中取出词项对应的倒排记录表,对记录表中的所有文档,计算其BM25得分,最后按得分高低排序作为查询结果。

类似的,我们还可以对所有文档按时间先后顺序排序,越新鲜的新闻排名越高;还可以按新闻的热度排序,越热门的新闻排名越高。

关于热度公式,我们认为一方面要兼顾相关度,另一方面也要考虑时间因素,所以是BM25打分和时间打分的一个综合。

比较有名的热度公式有两个,一个是Hacker News的,另一个是Reddit的,他们的公式分别为:

可以看出,他们都是将新闻/评论的一个原始得分和时间组合起来,只是一个用除法,一个用加法。所以我们也依葫芦画瓢,”自创“了一个简单的热度公式:

用BM25得分加上新闻时间和当前时间的差值的倒数,k1k1和k2k2也是可调参数。

按时间排序和按热度排序的函数和按BM25打分排序的函数类似,这里就不贴出来了,详细情况可以看我的项目News_IR_Demo。

至此,搜索引擎的搜索功能已经实现了,你可以试着修改./web/search_engine.py的第167行的关键词,看看搜索结果是否和你预想的排序是一样的。不过由于我们的数据量只有1000个新闻,并不能涵盖所有关键词,更多的测试可以留给大家线下完成。

本文转载自:http://bitjoy.net/2016/01/07/introduction-to-building-a-search-engine-4

参考文献

  • 基于网络爬虫的搜索引擎的设计与实现(湖北工业大学·冯丹)
  • 基于知识图谱的搜索引擎技术研究与应用(电子科技大学·邵领)
  • 博客搜索引擎与排名技术研究(江南大学·严磊)
  • 沈阳地铁门户搜索引擎的设计与实现(东北大学·张森)
  • Web对象提取检索系统的设计与实现(北京大学·刘冠军)
  • 基于Python的非结构化数据检索系统的设计与实现(南京邮电大学·董海兰)
  • 基于Lucene的网页抓取与检索系统(东北大学·席齐)
  • 面向数码商品垂直搜索引擎原型系统的设计与实现(西南交通大学·杨静娴)
  • 基于Lucene的中英文文档全文搜索引擎(电子科技大学·张瑞)
  • 基于J2EE的多语种元搜索引擎的研究与实现(电子科技大学·冯刚)
  • 基于分布式的搜索引擎技术研究与设计(哈尔滨工程大学·张永光)
  • 基于三层体系结构的网络搜索与信息处理系统(广东工业大学·梁继能)
  • 主题网络爬虫的研究与设计(南京理工大学·朱良峰)
  • 面向数码商品垂直搜索引擎原型系统的设计与实现(西南交通大学·杨静娴)
  • 基于Web搜索引擎系统的设计与实现(复旦大学·连蒴)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计客栈 ,原文地址:https://bishedaima.com/yuanma/35585.html

相关推荐

  • Web信息处理

    Web信息处理 爬虫的基本原理以及使用的基本方法(如果使用框架,简述参数和各项module的功能) 由于本学院官网上的教师资料信息较为简单,本次作业的信息爬取使用Python的Requests库完成
    2024年05月14日
    2 1 1
  • 基于JSP的美食网站食谱网站、javaweb源码

    这是一个🔥🔥基于JSP的美食网站食谱网站,javaweb源码🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 美食食谱开发技术栈为JSP项目,可以作为毕业设计课程设计作业利用jsp+servlet实现一个类似下厨房的美食食谱网站
    2024年05月23日
    13 1 4
  • 基于JSP和Mysql的码头船只出行及配套货柜码放管理系统

    基于JSP和Mysql的码头船只出行及配套货柜码放管理系统 摘 要 伴随着全球化的发展,码头的物流和客运增多,码头业务迎来新的高峰,然而码头业务的增加
    2024年05月14日
    1 1 1
  • 基于python实现的比价网站

    1,项目简介 1,1你低我低 是什么? (Introduction) 你低我低 致力于建设绝无人工干预的比价网站 现支持淘宝,亚马逊 支持自定义排序方式 1
    2024年05月14日
    2 1 1
  • 基于Java+SpringMVC的图书管理系统

    这是一个🔥🔥基于SpringMVC的图书管理系统🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 图书管理系统开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于Java+SpringMVC的图书管理系统
    2024年05月23日
    5 1 2
  • 基于Python开发早教管理系统

    金宝贝早教中心管理系统 一,摘 要 近年来,家长对孩子的教育问题愈加重视,倡导启蒙教育,因此,许多早教机构应运而生,而随着就够人员的增多,机构的管理成为重中之重
    2024年05月14日
    1 1 1
  • Java+SSH酒店预订管理网站

    在当前数字化时代,酒店业务管理系统的自动化和高效化已成为了业界的重要趋势,基于Java+SSH技术(Struts2, Spring, Hibernate)的酒店预订管理系统因其灵活性和可扩展性而备受关注
    2024年05月07日
    5 1 1
  • 基于PHP实现的WEB图片共享系统

    基于PHP实现的WEB图片共享系统 摘 要 本系统主要从现代社会电脑化观念出发,通过对现有资料的分析,研究和整理,确定了在基于现存的WEB2,0模式下开发图片共享系统的可行性
    2024年05月14日
    4 1 1
  • 基于SSM架构的网络租车系统

    基于SSM架构的网络租车系统 摘 要 随着网络应用的兴起,人们的生活也因此发生了翻天覆地的变化,人们开始利用计算机来解决我们生活中的实际问题,由此诞生了许多互联网产业
    2024年05月14日
    6 1 1
  • 基于Python实现的验证码识别系统

    基于Python实现的验证码识别系统 1 项目介绍 本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别, 项目封装了比较通用的 校验
    2024年05月14日
    4 1 2

发表回复

登录后才能评论