基于python构建搜索引擎系列——(六)系统展示及总结
系统展示
前几个博客已经介绍完搜索引擎的所有功能,为了实现更好的用户体验,需要一个web界面。这一部分是另一个队员做的,我这里借用他的代码。
我们利用开源的Flask Web框架搭建了展示系统,搜索引擎只需要两个界面,一个是搜索界面,另一个是展示详细新闻的页面(实际搜索引擎没有这个页面)。编写好这两个模板页面并调用前面给出的接口,得到数据,展示出来就可以。
这一部分没有太多需要讲解的算法,直接上效果图(点击图片可以查看大图)。
由于数据量不大,只有1000条新闻,所以第一页中后面几个结果相关度就不是很高了。但是经过测试,在大数据量的情况下,不论是搜索的速度、准确率、召回率以及推荐阅读的相关度,都达到了不错的效果。
总结
至此,整个新闻搜索引擎构建完毕,总体效果令人满意,不过还是有很多可以改进的地方。下面总结一下本系统的优点和不足。
优点
倒排索引存储方式。因为不同词项的倒排记录表长度一般不同,所以没办法以常规的方式存入关系型数据库。通过将一个词项的倒排记录表序列化成一个字符串再存入数据库,读取的时候通过反序列化获得相关数据,整个结构类似于邻接表的形式。
推荐阅读实现方式。利用特征提取的方法,用25个关键词表示一篇新闻,大大减小了文档词项矩阵规模,提高计算效率的同时不影响推荐新闻相关性。
借用了Reddit的热度公式,融合了时间因素。
不足
构建索引时,为了降低索引规模,提高算法速度,我们将纯数字词项过滤了,同时忽略了词项大小写。虽然索引规模下降了,但是牺牲了搜索引擎的正确率。
构建索引时,采用了jieba的精确分词模式,比如句子“我来到北京清华大学”的分词结果为“我/ 来到/ 北京/ 清华大学”,“清华大学”作为一个整体被当作一个词项,如果搜索关键词是“清华”,则该句子不能匹配,但显然这个句子和“清华”相关。所以后续可以采用结巴的搜索引擎分词模式,虽然索引规模增加了,但能提升搜索引擎的召回率。
在推荐阅读模块,虽然进行了维度约减,但是当数据量较大时(数十万条新闻),得到的文档词项矩阵也是巨大的,会远远超过现有PC的内存大小。所以可以先对新闻进行粗略的聚类,再在类内计算两两cosine相似度,得到值得推荐的新闻。
在热度公式中,虽然借用了Reddit的公式,大的方向是正确的,但是引入了参数k1k1和k2k2,而且将其简单的设置为1。如果能够由专家给出或者经过机器学习训练得到,则热度公式的效果会更好。
本文转载自:
-
http://bitjoy.net/2016/01/09/introduction-to-building-a-search-engine-6
-
http://bitjoy.net/2016/01/09/introduction-to-building-a-search-engine-7
参考文献
- 复合规则驱动聚焦爬虫系统的设计与实现(哈尔滨工业大学·刘强)
- 基于三层体系结构的网络搜索与信息处理系统(广东工业大学·梁继能)
- 基于JavaEE和XML的分布式信息检索系统设计与实现(山东大学·牛拥军)
- 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
- 基于B/S结构的新闻发布系统(吉林大学·郭蕊)
- 主题网络爬虫的研究与设计(南京理工大学·朱良峰)
- 基于三层体系结构的网络搜索与信息处理系统(广东工业大学·梁继能)
- 沈阳地铁门户搜索引擎的设计与实现(东北大学·张森)
- 分布式网络爬虫在农产品搜索系统中的应用与研究(南昌大学·袁龙涛)
- 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
- 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
- 复合规则驱动聚焦爬虫系统的设计与实现(哈尔滨工业大学·刘强)
- 面向特定网页的Web爬虫的设计与实现(吉林大学·马慧)
- 基于Java技术的搜索引擎研究与实现(西南交通大学·何世林)
- 基于J2EE的多语种元搜索引擎的研究与实现(电子科技大学·冯刚)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码客栈 ,原文地址:https://bishedaima.com/yuanma/35587.html