[转]搜索引擎的实现

搜索引擎简介

“有问题百度一下”,“有问题Google一下”,随着Google本地化为谷歌,百度全面出击日本,这些宣传语已经不止印在公司的宣传品上了,而且已经深入了人们的生活,那么,作为网络时代的重要工具,搜索引擎是如何工作的呢?今天就有我带大家进入搜索引擎的世界

自网络诞生以来,目前网络上至少存在40亿以上的网页(2004 Google 统计的数据40亿),中国网上到2004年初大致有约3亿网页。而全人类自产生以来总共产生了大概一亿本书,中华民族有史以来出版的书籍大约不超过275万种。要在这么多的资源中找到我们需要的内容,没有一个好的工具是不行的。而搜索引擎所要做的,就是根据我们输入的关键字去寻找我们所需要的内容。

搜索引擎一般可以分为以下几个部分:

由图我们可以看出,搜索引擎实际上可以分成独立工作的两个部分,其中一部分是面向用户的,图中虚线以上的部分。另一部分是面向互联网上的站点的,图示为虚线下面的部分。

我们先讨论虚线以上的部分,即面向用户的部分的工作过程。

1.               用户输入搜索关键词,可能是一个词,也可能是一句话。比如说:国家法定假日修订方法

2.               用户提交,搜索引擎中的分词组件把搜索关键字分解成更小的关键字词组列表。

3.               把关键字词组列表发给数据库,查找出所有相关的列表。

4.               排序组件把数据库搜索结果根据已有的经验对列表进行排序和优化之后,返回给用户

接下来我们具体讨论各个部分。

用户界面是搜索引擎与用户进行交互的主要媒介,一般搜索引擎包括两张页面就可以了,一张是搜索条件输入页,另一张是搜索结果页。

搜索条件输入页提供用户输入搜索关键字的接口,它一般包括一个文本框和一个搜索按钮。下面是百度和智酷(目前由信息科协运行和维护)

搜索结果页用来显示用户搜索的结果,一般也会包括一个搜索文本框和搜索按钮,便于用户不用返回首页就可以重新进行搜索操作。搜索结果页的主要部分是搜索结果列表,它包含了与用户输入的搜索关键字相关的所有的页面的列表。另外,搜索引擎还会包括与用户搜索关键字相关的其他关键字,供用户调整自己的搜索关键字重新搜索。

以下是百度搜索结果页和智酷(目前由信息科协运行和维护)的搜索结果页)

结果页中最重要的部分是结果列表,而结果列表中的每一个结果项一般是有以下几个部分组成的:

其中,标题:以某种方式得到网页内容的标题,一般就是我们在打开网页的时候浏览器标题栏上显示的内容。

URL:显示的是该网页的原始链接,用户可以使用该页面访问原始网页,不过一般是使用该网页判断一下网页内容权威性。比如说我们搜索到一些伊拉克战争的页面,一个页面是news.sina.com.cn/20050415/12550.html,另一个是blog.sina.com.cn/xiaoxiaonews/article.jsp?

article=1542,那么明显前一个页面的内容更接近我们所需要的内容。

摘要:显示网页的部分内容,用户可以使用摘要来简要的了解一下网页的内容,以确定网页的内容是不是自己需要的内容。

网页快照:现代搜索引擎中一般会把自己搜索到的网页整张的网页存储到自己的数据库中,由于搜索引擎不可能及时更新网页数据库,所以不能保证搜索的网页确实存在,所以使用网页快照链接把用户连接到网页数据库中存放的网页,以使用户能够找到和摘要符合的网页。

用户在输入关键字并点击提交之后,首先要经过的就是分词组件,那么什么是分词组件呢?它有什么用呢?

要了解分词程序,首先要理解什么是分词。所谓分词,就是把语言中的一段连续的语句中的所有有意义的词语全部分解出来。举例来讲,有这样一句话:“江南大学矩形活动庆祝国庆节”。我们可以将这句话分解成以下词组:“江南大学、举行、活动、庆祝、国庆节”。这样就完成了一次分词程序。

分词的研究由来已久,根据语言的不同,我们有不同的分词方法,英文由于词语与词语之间有空格,例如:“website of detective Conan,我们可以直接使用字符串的Split函数使用空格分解字符串成字符数据即可。而中文与英文不同,中文中没有可以直接用来分割字符窗的字符,中文中各个词之间没有明显的界限,我们要分词的话,必须使用其他的方法来实现。

目前常用的方法就是分词词库加最长匹配的方法来实现的。分词词库中包含日常语言中可能用到的大量词语,而最长匹配算法是这样运算的:比如说我们刚才输入的句子:

“江南大学举行活动庆祝国庆节”,我们词库中现在有以下词语可以和这句话匹配(所谓匹配就是在这句话中出现过):1.江南2大学3.江南大学4.举行5.活动6.国庆.7.8.国庆节。

那么按照最长匹配算法,我们对字符进行一一分析,首先拿到最左边的两个字符:“江南”是词语,然后向后移动一个字符“江南大”:不是词语,在向后移动一个字符:“江南大学”,是词语,在向后移动一个字符:“江南大学举”,不是。当这个搜索到了一定长度时我们停止搜索。返回最长的匹配结果:江南大学。然后重复这个过程。这样我们最后返回的结果是:

江南大学、举行、活动、庆祝、国庆节。

分词程序的结构可以简单表示为:

分词程序

     分词词库

用户的请求经过分词程序处理后,在发给数据库之前,一般还会有一个预处理的过程,这个过程主要目的是把一些语言中的没有用的词语删除,特别是一些助词,比如:的、呢、吗、什么、那里、怎么、如何、哪里。

然后请求就会发给网站的数据库,数据库从已经有的记录中返回符合要求的记录。在智酷的搜索算法中,我采用的是把搜索关键字组合成可以直接使用Split函数分解的字符串:比如我们把上面的分词结果连接成这样的字符串:“江南大学,举行,活动,庆祝,国庆节”。也有可能会把“举行”和“庆祝”去掉,因为一般用户不会去搜索动词。然后在数据库中在分成一个一个的词语,把结果搜索出来,对这些集合进行集合运算就可以得到结果:我们可以对这些集合求并集,也可以求交集,如果求并集的话,得到的结果是最全面的搜索结果,我们在上面的那个搜索关键字下既可以搜索到江南大学的国庆节庆祝情况也可以搜索到苏州大学的国庆节庆祝情况,如果求交集,得到的结果是最准确的搜索结果。我们在上面的那个搜索关键字下得到的只是江南大学的国庆节庆祝活动的情况。一般可以在前几页使用交集,后面的结果页使用并集。

【声明】本文章来自互联网

posted @ 2008-01-04 14:07  孤城浪子  阅读(1694)  评论(0编辑  收藏  举报
博客园,让我更上一层楼