搜索引擎的那些事(开篇)
来源:互联网 发布:www.web pro seo.com 编辑:程序博客网 时间:2024/05/01 23:18
说起搜索引擎,大家肯定都不陌生。至少对于我来说,每日百度的次数不下几十次。在信息的查询和搜索方面,百度帮了我很大的忙,当然这中间也有很多搜索结果我也不是很满意。那么不知道大家有没有兴趣知道搜索引擎是怎么做出来的?其实说简单也简单,说复杂也复杂。
大家知道,网络搜索结果都是按照网页来进行查找的。一般来说,如果网页中包含了这个关键字,那么这个网页就是我们需要的。但是,事实上结果不都是这样的。大家知道,互联网上的网页非常多,想要在不到1秒钟的时间内就寻找到自己需要到那个结果基本上来说是不可能的。别的不说,把这互联网上几十亿个网页下载下来就不是一件容易的事情,更不要说后面的查找和遍历了。所以说,搜索引擎所查找的任何结果都是计算机预处理的结果,有了这个基本概念之后后面的讲解就比较容易了。
要做一个简单的搜索引擎其实不是件复杂的事情。关键步骤可以分成三个部分,即网页的遍历和下载、中文分词和解析、查询结果和排序。
(1) 网页下载和遍历
要有自己的搜索引擎,要有自己的数据,这个数据就是网页的数量。说到这里,我们就不得不说网页的一个重要特性,那就是超链接。有了超链接,我们就可以继续爬行到别的网页了。说到这里,有几个问题需要考虑,这个网页该怎么爬行,是首先按照宽度进行遍历呢,还是按照广度进行遍历呢,如何判断哪些网页是已经遍历过了的,哪些网页尚没有遍历,如果利用多线程对网页进行遍历呢?
(2)中文分词和倒排文件
有了自己的网页,这只是一个基本条件。下面,我们就需要对网页的数据进行拆解,对网页中的每一个句子进行拆解。这就是所谓的中文分词。当然,中文分词可以有很多的方法,基本上说按照字典来拆解就可以了,要么从左向右进行拆解,要么从右向左进行拆解,或者按照最小词组数目进行拆解也可以。当然,网页的数目是在不断递增的,但是一般来说一个语言的词组的数目是一定的,一般来说汉语的词组也就在几十万个左右。其他语言呢,比如说英语,因为英语是由一个一个单词组成的,按照牛津词典的标准,单词的最大数目也就在几十万个单词上下。所以,在此我们设计了倒排文件的格式。用最简单的话说,我们不再关注一个网页包含了哪些词语,我们更关注某个词语在哪些网页中出现了,这就是倒排文件的基本思路。
(3)索引查找和排序
有了倒排文件之后,我们就可以把这些索引结果用数据库进行保存起来的。因此,大家注意我们搜索的任何结果都是从这份数据库合并过来的。当然,查到了这些结果之后,我们怎么判断哪些排序结果应该排在前面,哪些结果应该排在后面。说到这里,一个不得不提的算法就是pagerank,这个算法的基本思想就是大家都想要的结果就是你想要的结果,某个网页重要是因为别人引用它的次数比较多。打个通俗的比方来说,一个被大家多次引用的论文质量肯定差不到哪去。当然,还有其他影响排序的因素,比如字频、网页日期、网站权重、是否为客户购买的关键字、是否为作弊网页、是否为标题文字等等。
- 搜索引擎的那些事(开篇)
- 搜索引擎的那些事(开篇)
- 搜索引擎的那些事(网页下载)
- 搜索引擎的那些事(中文分词)
- 搜索引擎的那些事(中文分词)
- 搜索引擎的那些事(web遍历)
- Javascript 那些事-开篇
- 搜索引擎的那些事(多线程web遍历)
- 搜索引擎的那些事(title信息提取)
- 搜索引擎的那些事(摘取价格数据)
- 搜索引擎的那些事(32位MD5算法)
- 搜索引擎那些你不知道的事
- 瘦客户端那些事 - 开篇
- Erlang那些事--谈古论今之开篇
- 《江湖X》开发那些事 - 1.开篇
- 搜索引擎和知识图谱那些事
- 开篇语 ---从零开始学搜索引擎
- 【那些年我们一起做的java面试题】---------1.开篇立论(我为什么要写博客)
- InterlockedIncrement和InterlockedDecrement是做什么用的
- 使用qt creator2.60编写c/c++程序(windows7-64bit)
- jquery ajax struts2 json
- 收藏来自http://blog.csdn.net/zhoufoxcn/article/details/2453803 的文章
- 第一家公司第二面的笔试
- 搜索引擎的那些事(开篇)
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- Hibernate的unsaved-value
- Monad-进阶理解
- 第二家公司的笔试、机试、面试。
- 物理地址,虚拟地址,线性地址及逻辑地址
- 理解$HandlerLabel HANDLER $HandleLabel宏
- 我的一些SQLServer 优化
- 设计模式之观察者模式 及 c++ 实现