【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

说起搜索引擎,大家肯定都不陌生。至少对于我来说,每日百度的次数不下几十次。在信息的查询和搜索方面,百度帮了我很大的忙,当然这中间也有很多搜索结果我也不是很满意。那么不知道大家有没有兴趣知道搜索引擎是怎么做出来的?其实说简单也简单,说复杂也复杂。

大家知道,网络搜索结果都是按照网页来进行查找的。一般来说,如果网页中包含了这个关键字,那么这个网页就是我们需要的。但是,事实上结果不都是这样的。大家知道,互联网上的网页非常多,想要在不到1秒钟的时间内就寻找到自己需要到那个结果基本上来说是不可能的。别的不说,把这互联网上几十亿个网页下载下来就不是一件容易的事情,更不要说后面的查找和遍历了。所以说,搜索引擎所查找的任何结果都是计算机预处理的结果,有了这个基本概念之后后面的讲解就比较容易了。

要做一个简单的搜索引擎其实不是件复杂的事情。关键步骤可以分成三个部分,即网页的遍历和下载、中文分词和解析、查询结果和排序。

(1) 网页下载和遍历

要有自己的搜索引擎,要有自己的数据,这个数据就是网页的数量。说到这里,我们就不得不说网页的一个重要特性,那就是超链接。有了超链接,我们就可以继续爬行到别的网页了。说到这里,有几个问题需要考虑,这个网页该怎么爬行,是首先按照宽度进行遍历呢,还是按照广度进行遍历呢,如何判断哪些网页是已经遍历过了的,哪些网页尚没有遍历,如果利用多线程对网页进行遍历呢?

(2)中文分词和倒排文件

有了自己的网页,这只是一个基本条件。下面,我们就需要对网页的数据进行拆解,对网页中的每一个句子进行拆解。这就是所谓的中文分词。当然,中文分词可以有很多的方法,基本上说按照字典来拆解就可以了,要么从左向右进行拆解,要么从右向左进行拆解,或者按照最小词组数目进行拆解也可以。当然,网页的数目是在不断递增的,但是一般来说一个语言的词组的数目是一定的,一般来说汉语的词组也就在几十万个左右。其他语言呢,比如说英语,因为英语是由一个一个单词组成的,按照牛津词典的标准,单词的最大数目也就在几十万个单词上下。所以,在此我们设计了倒排文件的格式。用最简单的话说,我们不再关注一个网页包含了哪些词语,我们更关注某个词语在哪些网页中出现了,这就是倒排文件的基本思路。

(3)索引查找和排序

有了倒排文件之后,我们就可以把这些索引结果用数据库进行保存起来的。因此,大家注意我们搜索的任何结果都是从这份数据库合并过来的。当然,查到了这些结果之后,我们怎么判断哪些排序结果应该排在前面,哪些结果应该排在后面。说到这里,一个不得不提的算法就是pagerank,这个算法的基本思想就是大家都想要的结果就是你想要的结果,某个网页重要是因为别人引用它的次数比较多。打个通俗的比方来说,一个被大家多次引用的论文质量肯定差不到哪去。当然,还有其他影响排序的因素,比如字频、网页日期、网站权重、是否为客户购买的关键字、是否为作弊网页、是否为标题文字等等。

选到这一个题目来写我的博客,和我的工作没有什么关系,主要是因为个人的兴趣而已。当然,整个文章的风格和自己之前的博客差不多,基本上还是一个标题一个标题来写,中间会穿插C语言代码描述该功能是怎么实现的。要是还能对大家有一些帮助,那是我最开心不过的事情了。

搜索引擎的那些事(开篇)相关推荐

  1. 搜索引擎的那些事(中文分词)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面,我们在介绍搜索引擎的时候也谈到过中文分词.和英文不一样,中文上所有的汉字都是连在一起的, ...

  2. 搜索引擎的那些事(web遍历)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 写搜索引擎对我来说是一件有趣的事情,做的多好谈不上,但是至少可以一步一步做出来.当然做的怎么样 ...

  3. 搜索引擎的那些事(网页下载)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们只是开了一个搜索引擎的头,下面我们就要对搜索引擎的各个内容进行分析和解剖了.当然,我们 ...

  4. 瘦客户端那些事 - 开篇

    人类活动最大的成本花费在哪里?我认为在沟通和学习上.我们从哇哇落地开始,就在不断的学习前人总结的经验.学校教育,大大加速了这一进程.随着互联网的发展,人们可以自由的分享知识和经验,使得我们平时遇到的问 ...

  5. 瘦客户端那些事 - 开篇,互联网营销

    人类活动最大的成本花费在哪里?我认为在沟通和学习上.我们从哇哇落地开始,就在不断的学习前人总结的经验.学校教育,大大加速了这一进程.随着互联网的发展,人们可以自由的分享知识和经验,使得我们平时遇到的问 ...

  6. 搜索引擎的那些事(32位MD5算法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 对于学过密码学的同学来说,md5算法肯定不会很陌生.但是,对于我来说,md5是一个新的命题.那 ...

  7. 搜索引擎的那些事(摘取价格数据)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 下载网页不难,提取数据其实也不难.前面,我们说到了如何在当当网页中提取title.当然了,不仅 ...

  8. 搜索引擎的那些事(多线程web遍历)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 上面一篇博客当中,我们可以利用单一的线程完成网页的下载.今天,我们打算在此基础上完成多线程的访 ...

  9. 看似简单的搜索引擎,原来背后的数据结构和算法这么复杂?

    来源 | 码海 封图 | CSDN 付费下载于视觉中国 前言 我们每天都在用 Google, 百度这些搜索引擎,那大家有没想过搜索引擎是如何实现的呢,看似简单的搜索其实技术细节非常复杂,说搜索引擎是 ...

最新文章

  1. 停止Password Manager Agent服务导致应用程序启动缓慢
  2. The Swift Code之UITextField的使用,及事件委托
  3. Spring学习笔记专题三
  4. 【5003】马遍历问题
  5. Lightroom Classic 教程,如何在 Lightroom 中风格化照片?
  6. 全国行政区划json数据包
  7. html gzip解压易语言,易语言GZIP解压缩源码
  8. virtualxposed使用教程_VirtualXposed
  9. Ubuntu 图形桌面与命令行界面 切换快捷键
  10. thinkphp 实现图片中的二维码识别
  11. 交叉网线做法,开发板 PC直连
  12. AS179-92LF pHEMT GaAs FET单刀双掷(SPDT)开关SKYWORKS
  13. python实现打印九九乘法表
  14. linux下使用ffmpeg将amr转成mp3(转)
  15. html 页面 title keyworld 的 SEO优化的 基本设置格式
  16. C语言字模文件的使用,PCtoLCD2002(字模软件) 最新版 附使用指南
  17. 【Golang】golang实现发送微信服务号模板消息
  18. 前端 如何检测到当前的网页已经退出_js监听浏览器离开页面操作
  19. 代自序 财富寓言:羊、狼、狮子与大象(1)
  20. java毕业设计的创意项目众筹平台的设计与开发mybatis+源码+调试部署+系统+数据库+lw

热门文章

  1. 树莓派的wifi网络
  2. 了解一下JAVA中的NIO模块
  3. STL库的内存配置器(allocator)
  4. .Net应用程序打包部署总结
  5. 装箱与拆箱的概念及意义
  6. 负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
  7. 通讯框架 t-io 学习——给初学者的Demo:ShowCase设计分析
  8. 网站后台发通知页面效果图
  9. css权威指南 note2
  10. BZOJ3442: 学习小组