首页 文学文摘 时政新闻 科技科普 经济法律 健康生活 管理财经 教育教学 文化艺术 社科历史

基于RSS源的搜索引擎概述与实现方法

作者:刘聪 来源:科技风

摘 要:互联网的普及,拓展了人们的信息获取途径,同时也增加了信息的冗余度和信息筛选的难度。RSS有效得聚合了信息,RSS搜索引擎弥补了传统搜索引擎的不足。本文将探讨RSS搜索引擎的技术背景、实现思路和发展趋势,以尽量简洁语言和实用的操作帮助读者了解RSS搜索引擎。

关键词:RSS;搜索引擎;信息;实现

一、技术背景

搜索引擎为网络信息检索提供了巨大的方便,使我們可以直接利用检索语法来获取自己想要的信息。但是随着互联网的发展与信息爆炸式增长,传统的搜索引擎逐渐暴露出更新速度慢、收录不完整等缺点,不能满足用户多样化、纯净化的需求,RSS搜索引擎应运而生。

顾名思义,RSS搜索引擎是对RSS信息的再次整合,用户可以通过关键字搜索检索自己需要信息。相比于传统搜索引擎,RSS源搜索引擎能够满足用户的时效性需求、信息定位更加精准、信息搜索更加全面以及更小的信息冗余和更高的搜索效率。

二、实现思路

(一)数据获取

RSS采用XML(可扩展标记语言)格式,使用特定标签将信息写入RSS。虽然不同的RSS数据源有自己的特点,但标签取名和标签数量基本一致。RSS信息中一般含有标题、摘要、链接和时间,部分RSS还有图片和正文等信息。

为减少工作量和开发难度,获取数据一般采用专用的RSS解析器,主流的解析器有RSSLibJ、Flock 、Informa 、ROME等,其功能大同小异。笔者以ROME为例,通过向解析器提供RSS地址,强大的解析器提取出、<link>、<description>和<pubDate>等信息,对于这些信息我们可以直接操作。</p> <p>由于大多数RSS不提供正文,正文需要进一步的获取。以人民网RSS源为例,通过观察可<bdo id="5mDw3yG4ONlij167MrKJ+ydrPrM="></bdo>知正文包含在一个指定的标签<div class="box_con" >中。我们需要获取指定标签类中的信息,jsoup类库中的connect()可以帮助我们很好做到这一点。拿到信息后一般会存入数据库等待分词处理。</p> <p>(二)分词处理</p> <p>中文与英文在检索处理中最大的区别就是有更加复杂多变的构词原理,分词不当可能会使检索效能降低。所以,开源词库的选择与使用尤为重要。在对比了众多分词工具以后,笔者选择了IKAnalyzer。除了更快的速度以外,IKAnalyzer还采用了特有的“正向迭代最细粒度切分算法“,支持细粒度和智能分词两种切分模式。如:“我爱北京天安门”可以切分为“我|爱|北京|天安门|天安|安门”,从而涵盖了所有词与出现的可能性。</p> <p>对于分词后的结果需要永久储存在数据库,数据库的表格布局以及每个数据项的空间大小决定着倒排索引表的构建速度。为了更好的配合索引表的构建,每一个元组都会对应编号(ID)、词语(w)文章编号(aID)和出现频数(num),其构建原理在后文将会提到。</p> <p>(三)倒排表构建</p> <p>倒排索引是用来记录全部文档下某个单词出现位置的一种映射,在编程中常借助散列表嵌套来实现,每个单词对应若干文章的编号和词频。我们在java中定义为“HashMap<String,HashMap<Integer,Integer>>()”。为了提高散列表查询速度,除了关键字我们均采用数值型数据。由于RSS是不断更新的,RSS搜索引擎也需要实时获取数据并更新倒排表,从而保证搜索信息的及时补充。</p> <p>(四)搜索处理</p> <p>我们不能保证每一次搜索请求都为单个词语,对于长句搜索的准确度也是衡量一个搜索引擎性能的重要标准。我们对搜索语句分词处理,采用与原文分词相同标准的最细粒度切分算法,此时无须担心分词处理对搜索准确度的影响,而且还能在索引语句无法完全匹配的情况下寻找出最大相关文章。但是,分词索引同时也增加了计算成本,需要对若干碎词多次请求。</p> <p>(五)搜索结果排序</p> <p>分词索引获取了大量与若干碎词相关文章,此时对文章的排序也更加复杂。根据实际请求需要,匹配率(索引碎词/原文出现索引碎词种类*100%)优先,在匹配率相同的情况下对文章词频(文章中出现索引碎词的次数)排序。运用Java中的TreeMap(),我们通过自定义排序方式实现对搜索结果双优先级排序。</p> <p>三、未来趋势</p> <p>伴随着RSS源的数量和种类越来越多,搜索技术越来越先进,RSS搜索引擎也将不断发展和完善,同时也将越来越普及,那么未来的RSS搜索引擎又将会有何种趋势呢。</p> <p>一是在未来RSS搜索引擎的专业程度将越来越高,分类更加细化,检索精确度也更高,通过RSS搜索引擎我们可以直接定位到自己需要的信息。再者,随着RSS信息不再只局限于文字,RSS搜索引擎可搜索的信息也将多样化。同时,随着机器学习与数据分析等技术的成熟,RSS搜索引擎也将具备更加智能的服务功能,包括更加准确的信息聚类和信息推荐、更加多样信息检索和排序的指标。</p> <p>参考文献:</p> <p>[1] 王涛,吴洁明.搜索引擎建立倒排索引的算法研究[J].现代计算机(专业版),2008(01).</p> <p>[2] 翟春红.中文RSS搜索引擎发展趋向探析[J].图书馆工作与研究,2012(01).</p> <p>[3] 戚晶.基于RSS的搜索引擎的研究与实现[D].吉林:吉林大学,2006.</p> <p>[4] 维基百科.RSS [EB/OL]. https://zh.wikipedia.org/wiki/RSS. 2016.</p> <p>[5] 百度百科.简易信息聚合[EB/OL].</p> <p>[6] 耿祥义.张跃平.java大学实用教程[M].北京:电子工业出版社,2011:139-143.</p> <p>作者简介:</p> <p>刘聪(1993-),男,山东济宁人,山东科技大学电气信息系信息管理与信息系统专业学生。</p> </p> </div> </div> </div> </div> </div> <div class="right"> <div class="top"> <a href="/tag-0"><img src="/img/part_pic1.jpg?v=2"/></a> <a href="/tag-1"><img src="/img/part_pic2.jpg?v=2"/></a> <div class="cl"></div> </div> <div class="recom"> <div class="title"> <span>热门推荐</span> </div> <ul class="ul1"> <ul class="ul1"> <li><em class="top3">1</em><a href="#" class="l">[食品与健康]</a><a href="/info/YX3mnRu8uBA=" target="_blank">孕妇可以吃微波炉加热的食物吗?</a></li> <li><em class="top3">2</em><a href="#" class="l">[食品与健康]</a><a href="/info/1CMCLc+JqkU=" target="_blank">吃菠菜可以补铁吗?</a></li> <li><em class="top3">3</em><a href="#" class="l">[食品与健康]</a><a href="/info/C3@UZQwzZTw=" target="_blank">吃菠菜可以补铁吗?</a></li> <li><em>4</em><a href="#" class="l">[食品与健康]</a><a href="/info/O3EYSJHYx0g=" target="_blank">锁住营养的速冻食品</a></li> <li><em>5</em><a href="#" class="l">[食品与健康]</a><a href="/info/2c1PQjivBBk=" target="_blank">锁住营养的速冻食品</a></li> <li><em>6</em><a href="#" class="l">[食品与健康]</a><a href="/info/kS8P2lxYcHg=" target="_blank">心若年轻 岁月不老</a></li> <li><em>7</em><a href="#" class="l">[食品与健康]</a><a href="/info/k+dPV7OqQ28=" target="_blank">心若年轻 岁月不老</a></li> <li><em>8</em><a href="#" class="l">[食品与健康]</a><a href="/info/Wu4Mn61yc88=" target="_blank">老年朋友不要盲目“被种草”</a></li> <li><em>9</em><a href="#" class="l">[食品与健康]</a><a href="/info/nZibq5d3RGw=" target="_blank">老年朋友不要盲目“被种草”</a></li> <li><em>10</em><a href="#" class="l">[食品与健康]</a><a href="/info/CBqYmA6KMOQ=" target="_blank">做好心理定位和谐亲子关系</a></li> </ul> </ul> </div> <div class="recom book_ce"> <div class="title"> <span>电子杂志</span> <a href="/book">更多 +</a> </div> <ul class="ul2"> <li><a href="/book/食品与健康"><img src="https://img1.qikan.com/qkimages/spjk/spjk202007-z.jpg"/></a></li> <li><a href="/book/企业科技与发展"><img src="https://img1.qikan.com/qkimages/qyfz/qyfz202005-z.jpg"/></a></li> <li><a href="/book/现代电子技术"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/moet201814-z.jpg"/></a></li> <li><a href="/book/决策探索"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/jcts201810-z.jpg"/></a></li> <li><a href="/book/南方文坛"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/nflt201803-z.jpg"/></a></li> <li><a href="/book/办公室业务"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/bgsy201806-z.jpg"/></a></li> <li><a href="/book/现代装饰"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/xdza201612-z.jpg"/></a></li> <li><a href="/book/电子技术与软件工程"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/djrg201805-z.jpg"/></a></li> <li><a href="/book/神州·中旬刊"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/snzo201807-z.jpg"/></a></li> <li><a href="/book/当代作家评论"><img src="http://alicdn.hnyunji.com/buzhibushi.com/book/ddzp201706-z.jpg"/></a></li> </ul> </div> </div> <div class="cl"></div> </div> <div id="foot"> <div class="foot_t"> <img src="/img/foot_logo.png" alt="" /> <a href="/">首页</a> <a href="/column-1">文学文摘</a> <a href="/column-2">时政新闻</a> <a href="/column-3">科技科普</a> <a href="/column-4">经济法律</a> <a href="/column-5">健康生活</a> <a href="/column-6">管理财经</a> <a href="/column-7">教育教学</a> <a href="/column-8">文化艺术</a> <a href="/column-9">社科历史</a> <div class="cl"></div> </div> <div class="foot_b"> Copyright © 2018 www.buzhibushi.com Inc. All Rights Reserved. </div> </div> </div> <div style="display:none"> <script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1274378079'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s22.cnzz.com/stat.php%3Fid%3D1274378079' type='text/javascript'%3E%3C/script%3E"));</script> </div> </body> </html>