3 Z. s @6 h& K) K7 W+ S4.网页重要程度的计算* d! T8 P% e7 i2 o" }
- n; \8 Q& `: X" V1 W搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。不同的顺序达到的结果是不一样的,因此搜索引擎实际上追求的是一种统计意义上的满意。例如,人们认为用Google查询比较好,是因为在多数情况下Google返回的内容要更符合用户的需要。 ( h+ L( p; M" w4 ]' e. K1 `& h
如何对查询结果进行排序有很多因素需要考虑,如何理解一篇网页比另外一篇网页重要?人们参照科技文档重要性的评估方式,核心想法就是“被引用多的就是重要的”。“引用”这个概念恰好可以通过在网页之间的超链进行体现,作为Google创立核心技术的Pag—eRank就是这种思路的成功体现。除此以外,人们还注意到网页和文档的不同特点,即一些网页主要是大量对外的链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接。‘从某种意义上讲,这形成了一种对偶的关系,这种关系使得人们可以在网页上建立另外一种重要性指标。这些指标有的可以在网页处理阶段计算,有的则要在查询阶段计算,但都是作为在查询服务阶段最终形成结果排序的部分参数。 . R: a+ E8 i4 `- F 5 @0 e. M/ w& J- b0 E' X三、查询服务' S: i$ c# J! h5 H
% ^- F9 D4 `- V- R% |3 Q为了完成查询服务,需要有相应的元素来进行表达,这些元素主要有:原始网页文档、URL和标题、编号、所含的重要关键词的集合以及它们在文档中出现的位置信息、其他一些指标,如重要程度、分类代码等。 用户通过搜索引擎看到的不是一个“集合”,而是一个“列表”。如何从集合生成一个列表,是服务子系统的主要工作。服务子系统是在服务进行的过程中涉及的相关软件程序,而网页处理子系统事先为这些软件程序准备了相应的数据。服务子系统的工作原理,主要有4个方面。 : \# _/ D. c8 Y0 J: H# M& ]. p" u4 d0 H7 E- ~$ s R 1.查询方式和匹配1 y) }. n* m! m% X7 A
1 y! Y5 a+ V7 q+ U a) I
查询方式指的是系统允许用户提交查询的形式。对于普通用户来说,最自然的方式就是“需要查询什么就输入什么”。例如,用户输入“搜索引擎”,可能是他想了解有关搜索引擎的定义、概念和相应的知识;也可能是他想了解目前有哪些搜索引擎,如何进行搜索等内容;也有可能用户关心的是间接的信息。目前用一个词或者短语来进行查询,依然是主流的查询模式,这种模式比较简单且容易实现。词的识别是搜索引擎中非常关键的一部分,通过字典文件对网页内的词进行识别。刘于西文信息来说,需要识别词的不同形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、H文、韩文等)需要进行分词处理。识别出网页中的每个词,并分配唯一的wordlD号,用于为数据索引中的索引模块服务。例如,当用户输入“搜索引擎教程”进行搜索时,系统首先将这个短句进行分词处理,将其分为“搜索引擎教程”,然后删除那些没有查询意义或者在每篇文档中都会出现的词,最后形成一个用于参加匹配的查询词表,该词表的数据结构是一个用对应的分词作为索引的一个倒排文件,它的每一个元素都对应倒排文件中的一个倒排表。这样系统就完成了查询和文档的匹配。 7 h O4 s4 a. G) e9 H+ p9 B8 m, [3 ?8 ?+ C 2.索引库的建立7 H; \" m3 v. J- ], n( N* p- N3 J
. r. y" H/ @4 L U1 C# B索引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种索引:文档索引和关键词索引。文档索引分配每个网页一个唯一的doclD号,根据doclD索引出在这个网页中出现过多少个wordlD,每个wordID出现的次数、位置、大小写格式等,形成doclD对应wordlD的数据列表;关键词索引其实是对文档索引的逆索引,根据wordlD索引出这个词出现在哪些网页(用wordlD表示),出现在每个网页的次数、位置、大小写格式等,形成wordlD对应docID的列表。 7 J( \4 K: E; @2 ^! E ( X' v. g: B5 d3 a# T3.结果排序 9 i7 _4 N# e, D, ]) B 2 @6 s. j, H& O# _' N结果就是将查询结果的集合在屏幕上以列表的方式显示出来。所谓列表,就是按照某种评价方式,确定出查询结果集合中元素的顺序,让这些元素以某种顺序呈现出来,这就是相关性。相关性是形成这种查询顺序的基本因素,有效地定义相关性本身是很困难的,从原理上讲它不仅和查询词有关,而且还和用户的背景,以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同的查询可能是针对于不同的需求的。 一般来讲,结果排序的方法是基于词汇出现的频率,也就是说在一篇文档中包含的查询词越多,则该文档就越应该排在前面。这样一种思路有一定的道理,而且在倒排文件数据结构上很容易实现。当我们通过关键词的提取过程,形成一篇文档的关键词的集合后,很容易同时得到每一个词在该文档中出现的次数,即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。然而,由于网页编写的自发性、随意性较强,仅仅针对词的出现来决定文档的顺序,在Web上做信息检索表现出明显的缺点,需要有其他技术的补充。这方面最重要的成果就是PageRank。通讨在网页处弹阶段为短篇网贾形成一个独立于查询词(也就和网页内容无关)的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。 " f& X$ `1 L0 o% F1 o; X. i1 L5 G6 G) `
搜索的处理过程是对用户的搜索请求进行满足的过程,通过用户输入搜索关键字,搜京服务器对应关键词字典,把搜索关键词转化为wordID,然后在索引库中得到docID列表,别doclD列表进行扫描和wordID的匹配,提取满足条件的网页,然后计算网页和关键词的桂关度,根据相关度的数值返回给用户。. n# F# ], A" `
+ O7 n& V& P$ a7 u2 T 4.文档摘要 k0 r) D5 [4 n D$ S
0 @) u4 @4 ?7 ?4 c }, {( i搜索引擎给出的结果是一个有序的条目列表,每一个条目有3个基本的元素:标题、网址和摘要。其中的摘要需要从网页正文中生成。( j! e- \: k/ T t% f" m& I8 R: G) ~
/ @0 b8 m* z$ F" u4 o
一般来讲,搜索引擎在生成摘要时可以归纳为两种方式:一种是“静态”方式,即独立于查询,按照某种规则,事先在预处理阶段从网页内容提取出一些文字,如截取网页正文的开头512个字节(对应256个汉字),或者将每一个段落的第一个句子拼起来,等等。这样形成的摘要存放在查询子系统中,一旦相关文档被选中与查询项匹配,就读出返回给用户。这种方式的优点是实现起来比较容易,缺点是摘要可能和查询的内容无关;另一种是“动态摘要”方式,即在响应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置。 / C0 u5 ]& o8 F* X% J; A ; |2 g9 {1 q3 c" v2 J% Z以上就是本人总结的关于搜索引擎的工作原理介绍,由于是介绍技术性的内容,所以读起来难免会有点枯燥无味,文中若有不足之处,还望指出。9 g3 [" H& E1 i; O0 B' @6 B/ R
; V Q C1 Y, T0 ^原文出处链接:http://blog.sina.com.cn/s/blog_5e5279f00102v8o2.html2 E7 M7 K [' g
搜外论坛原创作者:allenymj: S; O! m7 b# l- { h; z Y- c - x# R' @8 a) Z日期:2014-12-26 - f. b# U# T* O, }& K; s' Z/ D! T9 r) u