简单搜索引擎的基本原理

简单搜索引擎的基本原理

那几年我们过着简单的生活,就像我们曾经讲过的那样,杯茶碟豆就是一顿美餐,可也不能经常奢望。但那并非贫穷的生活,因为我们既不指望也不渴望更多的物质享受;那也并非困厄的生活,因为我们可以从智慧和灵感中得到满足。--- 杨振宁回忆西南联大的艰苦生活

 

偶写的一个初步的概要设计。(绝大部分是参照亦冰同学的指导,她毕业设计就是做的这个。强啊,跟我那师姐(去了MS)简直不分伯仲,再次谢谢她!)

 
概要设计
 
2007-01-19(yyyy-mm-dd)
 
1 软件功能需求
 
本软件就是针对某一网站做特定信息的提取分析。
软件的功能模块主要由以下三个模块组成:
 
(1)      输入模块
(2)      处理模块
(3)      输出模块
 
1.1    输入模块
 
输入在本系统中是指对参数的设置。
最主要的参数有两个:一个是网站的网址,即一个URL或者一个URL的List,例如: http://www.sina.com.cn/;另外一个就是特定信息的关键词,如:姚明。
在程序中两个参数用各用一个字符串表示。
 
1.2    处理模块
   
处理模块主要包括爬行模块,索引器和查询排序模块,以及更新功能。
(1)爬行模块:
此模块主要完成两个功能:一是URL提取,二是正文信息的提取。
(2)索引器:
此模块完成对正文部份建立索引文件,合并索引。
(3)查询排序:
 主要完成在索引文件中对给定信息的查询,并根据某种相关度和重要性对查询结果进行排序。
(4)更新功能:
主要完成定时再次提取URL和信息,更新索引表。
 
1.3    输出模块
 
以网页的形式给出,形如Google,Baidu的搜索结果。
由于排序功能在查询排序模块中完成,此模块主要对排序的结果进行分页显示。
                                                                                                               
2 算法及数据结构
 
(1)       爬行模块:
 主要的数据结构是一个HashMap和队列。
其中HashMap主要用于避免重复工作以及剔无效网页,避免死循环;队列的作用是实质上是一个广度优先(BFS)
 A  初始化,将第一个URL放入HashMap中和队列中,
 B  只要队列不为空,转入C;否则退出爬行模块
 C  取队列首元素(为一个URL),若超出爬行深度,转入B;否则判断connection是否有效,若有效,转入D;否则 转B。
 D  分析网页源代码,提取URL和正文信息
 E  判断该URL是否已存在于HashMap中,若已存在,转入B;否则加入到HashMap中,并加入到队列中。
 
(2)       索引器:
计划用Lucene包完成。
Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包。
 
 
3 技术难点
 
(1)登陆隐藏页面
因为有些页面进去以后需要点击鼠标才能继续下去,比如登陆,这样才能继续操作。这就要求爬虫实现模拟浏 览器的一些行为,如登陆,然后才能进行进一步的操作。这就要求根据表单作一些模拟。
 
(2)相对链接的归格化
通过查询主机名以及使用协议,把相对链接转化为绝对链接
(3)网页中javasript语言的解析
 要求要填加js文件的解析功能以使得爬虫能够提取出隐藏的URL。
 
 

只是个初步的概要设计。好多东西未考虑到,需要补充和完善。

 

 

PS: 靠,感冒了。一大堆事情要做,好在考试都基本上都结束了,只剩下一门网络。

 

题外话:

(1) 给大家推荐几首个人认为比较好听的歌:(有些是不是早就出来了?汗。^_^。)
   
    1 凤凰传奇-月亮之上
    2 凤凰传奇-我和草原有个约会
    3 誓言-求佛
    4 谢娜-菠萝菠萝蜜
    5 伊能静-念奴娇
    6 刘嘉亮-爱我就别伤害我
    7 王强-秋天不回来
    8 王心凌-睫毛弯弯
    9 胡杨林-香水有毒

 

(2) 关于博客

老大走过来说,说博客太浪费时间了。我也懒得跟他解释。不过这里还是说两句吧。

我想唯一的目的就是分享。

一是分享一份知识。看别人的博客,也是与别人的一种交流,这与看看书本质上也没有什么两样吧。网上认识的一些网友,有的就是国内顶尖的高手(至少我认为是这样)。他们也总是在繁忙中抽出一点宝贵的时间来写下自己的心得与体会。看看他们的所写所得,就会发现,他们对计算机的理解,对语言的掌控,对问题思考的广度和深度,有时候真的会让人震撼,这样就使得我们能够看到一个更高的层次,甚至让人明白在那个领域什么才算得上是登峰造极。

二是分享一份快乐。尽管写下的都是些不起眼的小玩意,也不太能拿出手的一些小东西,但是,正如前辈们所说的,敢于展现自己的无知与幼稚也算是一种勇气吧,^_^。不过,更为重要的是,那种对问题的思考与探索过程中的美妙感觉,对计算机持久的兴奋感觉,跟那个让你朝思暮想的女生给你带来的感觉是没有什么两样的,没有比这个更美妙的事情了。这个,难道不值得来个定格/序列化吗?(唯一的代价就是我们少睡会儿懒觉,少打会儿游戏,少看会儿电影电视。)

 


这天的工作已完成,让我有个好梦。--- 泰戈尔

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值