前段时间写了一些seo的案例来跟大家分享,本来今天打算继续分享以前做过的SEO案例,但是觉得写得有点烦了,所以干脆换个话题。今天来跟大家分享一下这几年本人通过SEO和SEM以及一些牛人的经验说总结出来的搜索引擎的工作原理。这里的搜索引擎并不特指某个搜索引擎。当然,这些只是工作原理,至于具体的算法就不可能总结得出来了,因为那些都是搜索引擎的核心技术。那么下面进入正题:" ?& }$ I4 r' Q. K; x: Y3 ~" q( U$ e
( [$ ~: Y1 {3 u$ r) t ]3 R搜索引擎的工作原理,可分为3步:从互联网上抓取网页、建立索引数据库、在索引数据库中搜索排序。
& C- N1 \6 F2 ~# V& ]: a! l6 I" M# I$ E) t, L$ {
从互联网上抓取网页,就是利用能够从互联网上自动收集网页的Spider系统程序,自动访问互联网,并沿着任何网页中的所有URL爬到其他网页,重复这过程,并把爬过的所有网页收集回来。 # X% X* K+ X( q1 f9 `0 }" N0 ?
) h4 @. v5 f; s, \
建立索引数据库,就是由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息,根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后用这些相关信息建立网页索引数据库。 * s9 M9 w Z1 R4 w) d2 K
4 `# f q0 z( I/ m在索引数据库中搜索排序,就是当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所有相关网页针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序,相关度越高,网站排名越靠前。最后,由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。
( Q- j9 i# `, c; y/ g" e6 a3 |0 N" [: V
【SEO技术分享】搜索引擎的工作原理介绍
* ]- l# a$ r( b& g
& o! Y& Y/ Z2 z' a
8 A3 \6 s G. a6 \; i0 ?一、网页搜集
7 J7 p1 u1 A/ N4 o# G" ~$ i1 a: A" Q1 Z* t# T5 |0 ?4 T4 o
搜索引擎网页的搜集过程并不是在用户提交关键词后进行及时的搜索,而是预先将网页搜集好并进行相关的处理之后等待用户的查询。我们知道,在网络比较畅通的情况下,从网上下载一篇网页大约需要1秒钟,因此如果用户在查询的时候即时去网上抓来成千上万的网页,一个个分析处理后再和用户的查询匹配,这样查询的时间就会很慢也不可能满足用户的需求。有可能多个用户重复抓取同一个网页,使系统的效益降低。面对大量的用户查询,不可能每来一个查询,系统就到网上“搜索”一次。大规模的搜索引擎是将一批预先搜集好的网页进行管理和维护。那么如何维护呢?有两种基本的方法。
; U1 {/ R- `4 h, m/ `, G( A# N8 l, F; G
定期搜集法
: S& r% P C4 d0 \" B+ s
9 d3 ~: c' q! K2 ]' J' m5 s$ c& ]每次搜集替换上一次的内容,我们称之为“批量搜集”。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花费几周的时间。这样做的开销比较大,通常两次搜集的间隔时间也很长(如早期天网的版本大约每3个月搜索一次,Google在一段时间曾是每隔28天搜索一次)。这种方法的好处是系统实现比较简单,缺点是时实性不高,还有重复搜集所带来的额外带宽的消耗。
$ X( F) s% \2 n2 ^+ L6 R$ t; x5 I
9 Y, q5 W0 P% E/ {1 C, s9 F增量搜集法 ) ?3 U2 v) ?3 T9 C
5 |. b4 C! W% Z- ^5 X
最初时搜集好一批数据,以后只是搜集新出现的网页和改变的网页并删除不再存在的网页。除了新闻网站外,许多网页的内容并不是经常变化的,这样一来每次搜集的网页量不会很大,于是可以经常进行搜集。3千万个网页,一台PC机,在一般的网络条件下,半天也就搜集完了。这样的系统表现出来的信息时实性就会比较高,主要缺点是系统实现比较复杂。 在具体搜集过程中,如何抓取一篇篇的网页,可以有不同的考虑。最常见的一种是所谓“爬取”,具体过程是,将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL的集合S(或者说“种子”)开始,沿着网页中的链接,按照先深、先宽或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。整个过程可以形象地想象为一个蜘蛛(Spider)在蜘蛛网(web)上爬行。一个真正的系统其实是多个“蜘蛛”同时在爬。
L( k: V6 U5 o6 I) o+ M& K v* N. J Q* D' M
这种方法实现起来不算困难,但需要注意的是在实现过程中通过一定的策略,使搜集到的某些网页相对比较“重要”。我们知道任何搜索引擎是不可能将Web上的网页搜集完全的,通常都是在某些条件的限制下来结束搜集的过程(如磁盘满,或者搜集时间已经太长了)。因此就有了一个尽量使搜到的网页比较重要的问题,这对于那些并不追求很大的数量覆盖率的搜索引擎特别重要。一般情况下按照先宽搜索方式得到的网页集合要比先深搜索得到的集合重要。
0 |2 o7 U: K5 j0 h
& N( Q6 Q$ \- I9 I5 o另外一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。每搜到一个网页,如果它发生变化并含有新的URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个URL对应的网页不存在了,则将它从S中删除。这种方式也可以看成是一种极端的先宽搜索,即第一层是一个很大的集合,往下最多只延伸一层。
/ }& D" @1 N; O
1 m [! F$ C. N) r; v) E还有一种方法是让网站拥有者主动向搜索引擎提交它们的网址,系统在一定时间内向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存人数据库中。大型商业搜索引擎一般都提供这种功能。+ w! W* G2 ]& R* Y! Q! t" ?: K
) v2 Q2 p, V/ V) R$ U: K) t二、网页处理 8 d1 I+ Z8 B" o4 q0 `
( m& \' M3 r* r/ E4 V! z& S
互联网上大部分信息都是以HTML格式存在,对于索引来说,只处理文本信息。因此需要把网页中文本内容提取出来,过滤掉一些脚本标示符和一些无用的广告信息,同时记录文本的版面格式信息。网页处理主要包括4个方面:关键词的提取、重复或转载网页的消除、链接分析和网页重要程度的计算。
) o9 a& } F; s+ P+ {1 C! w
. Q* I# T+ s3 S8 r. W* S1.关键词的提取
7 A' {, u9 D3 j) p$ w4 r" G W7 m- v1 u7 `8 }! L
由于HTML文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息(如广告,导航条,版权说明等)。为了支持查询服务,需要从网页源文件中提取出能够代表它的内容的一些特征——关键词。 网页处理阶段的一个基本任务,就是要提取出网页源文件的内容部分所包含的关键词。对于中文来说,就是要根据一个词典∑,用一个“切词软件”,从网页文字中切出∑所含的词语来。这样一篇网页就可以由一组词来近似代表了。一般来讲,可能得到很多词,同一个词可能在一篇网页中多次出现。从效果和效率考虑,不应该让所有的词都出现在网页的表示中,要去掉诸如“的”、“在”等没有内容指示意义的词,称为“停用词”(StopWord)。这样,对一篇网页来说,有效的词语数量大约为200。 0 M j# [* I4 l5 z5 [& n8 y
, v3 z* a" r0 Y" u5 n' E& A- ]2.重复或转载网页的消除0 m5 Q/ j( t7 o! P" |5 }
7 R, W7 y/ j+ ?
我们知道Web上的信息存在大量的重复现象。统计分析表明,网页的重复率平均大约为4。也就是说,当通过一个URL在网上看到一篇网页的时候,平均还有另外3个不同的URL也给出相同或者基本相似的内容。这种现象对于搜索引擎来说,它在搜集网页时要消耗机器时间和网络带宽资源,而且如果在查询结果中出现,将消耗查询者计算机的资源,也会引来用户的抱怨。因此,消除内容重复或主题重复的网页是网页处理阶段的一个重要任务。
" f2 D V" d) D, G7 X" C; i' A- ] X C% c
3.链接分析5 ]5 `* u, F. Z- i( t
3 t' B+ C5 |# m
从信息检索的角度讲,如果系统面对的仅仅是内容的文字,我们能依据关键词和关键词在文档集合中出现的频率来统计该词的相对重要性以及和某些内容的相关性。有了HTMI。标记后,情况还可能进一步改善,例如,在同一篇文档中,<H1>和</H1>之间的信息很可能就比在<H4>和</H4>之间的信息更重要。尤其HTML文档中所含的指向其他文档的链接信息是人们特别关注的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。* C6 b8 p6 ~( a( V+ Y6 b# U
7 w2 Y% e' v& k4 {; M
4.网页重要程度的计算
$ R5 m* U( X+ c! p2 r: w) r) F# N( j {& ^+ @3 B2 b1 X
搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。不同的顺序达到的结果是不一样的,因此搜索引擎实际上追求的是一种统计意义上的满意。例如,人们认为用Google查询比较好,是因为在多数情况下Google返回的内容要更符合用户的需要。: d; L: r4 C/ l" L$ ]# O- P
8 c. i4 N V; k" X% ?" c如何对查询结果进行排序有很多因素需要考虑,如何理解一篇网页比另外一篇网页重要?人们参照科技文档重要性的评估方式,核心想法就是“被引用多的就是重要的”。“引用”这个概念恰好可以通过在网页之间的超链进行体现,作为Google创立核心技术的Pag—eRank就是这种思路的成功体现。除此以外,人们还注意到网页和文档的不同特点,即一些网页主要是大量对外的链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接。‘从某种意义上讲,这形成了一种对偶的关系,这种关系使得人们可以在网页上建立另外一种重要性指标。这些指标有的可以在网页处理阶段计算,有的则要在查询阶段计算,但都是作为在查询服务阶段最终形成结果排序的部分参数。# n# n: ~8 s( ?' g6 G: O) O
! [' ?; R. s* d
三、查询服务
: m5 ~7 X* Q% i$ m
# O1 @5 ?: C7 G. ^+ M8 r( y为了完成查询服务,需要有相应的元素来进行表达,这些元素主要有:原始网页文档、URL和标题、编号、所含的重要关键词的集合以及它们在文档中出现的位置信息、其他一些指标,如重要程度、分类代码等。 用户通过搜索引擎看到的不是一个“集合”,而是一个“列表”。如何从集合生成一个列表,是服务子系统的主要工作。服务子系统是在服务进行的过程中涉及的相关软件程序,而网页处理子系统事先为这些软件程序准备了相应的数据。服务子系统的工作原理,主要有4个方面。9 {! x$ G$ a. K
$ _8 X- U; \! w6 i' m2 l1.查询方式和匹配8 }! f) m$ s4 H+ r! J
& {- N7 s+ R8 [9 T3 p1 Y
查询方式指的是系统允许用户提交查询的形式。对于普通用户来说,最自然的方式就是“需要查询什么就输入什么”。例如,用户输入“搜索引擎”,可能是他想了解有关搜索引擎的定义、概念和相应的知识;也可能是他想了解目前有哪些搜索引擎,如何进行搜索等内容;也有可能用户关心的是间接的信息。目前用一个词或者短语来进行查询,依然是主流的查询模式,这种模式比较简单且容易实现。词的识别是搜索引擎中非常关键的一部分,通过字典文件对网页内的词进行识别。刘于西文信息来说,需要识别词的不同形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、H文、韩文等)需要进行分词处理。识别出网页中的每个词,并分配唯一的wordlD号,用于为数据索引中的索引模块服务。例如,当用户输入“搜索引擎教程”进行搜索时,系统首先将这个短句进行分词处理,将其分为“搜索引擎教程”,然后删除那些没有查询意义或者在每篇文档中都会出现的词,最后形成一个用于参加匹配的查询词表,该词表的数据结构是一个用对应的分词作为索引的一个倒排文件,它的每一个元素都对应倒排文件中的一个倒排表。这样系统就完成了查询和文档的匹配。
3 E, j8 @' v1 m; ]; C. o! A+ T
' V; l" \# `6 s) t' ~2.索引库的建立
0 [' v3 N$ p: Z# q, e% U4 u2 d& X D, @7 i4 Q
索引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种索引:文档索引和关键词索引。文档索引分配每个网页一个唯一的doclD号,根据doclD索引出在这个网页中出现过多少个wordlD,每个wordID出现的次数、位置、大小写格式等,形成doclD对应wordlD的数据列表;关键词索引其实是对文档索引的逆索引,根据wordlD索引出这个词出现在哪些网页(用wordlD表示),出现在每个网页的次数、位置、大小写格式等,形成wordlD对应docID的列表。- h* y' {: i" g m1 _
3 i% {; S1 R2 _$ T ^
3.结果排序& K0 ]# w6 f( m$ {/ x L/ S9 C
7 @- X' ~' _& I, |
结果就是将查询结果的集合在屏幕上以列表的方式显示出来。所谓列表,就是按照某种评价方式,确定出查询结果集合中元素的顺序,让这些元素以某种顺序呈现出来,这就是相关性。相关性是形成这种查询顺序的基本因素,有效地定义相关性本身是很困难的,从原理上讲它不仅和查询词有关,而且还和用户的背景,以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同的查询可能是针对于不同的需求的。 一般来讲,结果排序的方法是基于词汇出现的频率,也就是说在一篇文档中包含的查询词越多,则该文档就越应该排在前面。这样一种思路有一定的道理,而且在倒排文件数据结构上很容易实现。当我们通过关键词的提取过程,形成一篇文档的关键词的集合后,很容易同时得到每一个词在该文档中出现的次数,即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。然而,由于网页编写的自发性、随意性较强,仅仅针对词的出现来决定文档的顺序,在Web上做信息检索表现出明显的缺点,需要有其他技术的补充。这方面最重要的成果就是PageRank。通讨在网页处弹阶段为短篇网贾形成一个独立于查询词(也就和网页内容无关)的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。% t$ ~) B) x( B/ l" U; e/ d
# p/ |! `- t; k) E4 S6 E3 \$ y
搜索的处理过程是对用户的搜索请求进行满足的过程,通过用户输入搜索关键字,搜京服务器对应关键词字典,把搜索关键词转化为wordID,然后在索引库中得到docID列表,别doclD列表进行扫描和wordID的匹配,提取满足条件的网页,然后计算网页和关键词的桂关度,根据相关度的数值返回给用户。
2 `# a0 H8 l- s W2 h- s3 A9 L" ^! h Q7 v) }* E% D1 a$ D
4.文档摘要
1 P3 M$ Y, `" L; {# q$ A# m9 O6 B, k/ k( r7 q* f7 R2 X0 ]; ~
搜索引擎给出的结果是一个有序的条目列表,每一个条目有3个基本的元素:标题、网址和摘要。其中的摘要需要从网页正文中生成。
* p$ ]; v* f% N( Y H4 s
5 z, ~0 Y T1 S- h* G一般来讲,搜索引擎在生成摘要时可以归纳为两种方式:一种是“静态”方式,即独立于查询,按照某种规则,事先在预处理阶段从网页内容提取出一些文字,如截取网页正文的开头512个字节(对应256个汉字),或者将每一个段落的第一个句子拼起来,等等。这样形成的摘要存放在查询子系统中,一旦相关文档被选中与查询项匹配,就读出返回给用户。这种方式的优点是实现起来比较容易,缺点是摘要可能和查询的内容无关;另一种是“动态摘要”方式,即在响应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置。
" k' M9 ^0 t" s3 c" _
5 [6 S, T; Z: [$ d0 Y$ ]' Y" l以上就是本人总结的关于搜索引擎的工作原理介绍,由于是介绍技术性的内容,所以读起来难免会有点枯燥无味,文中若有不足之处,还望指出。
+ o c# D* J( m" S3 ^. x+ X, a! [* L& y1 u. ]( l$ N
原文出处链接:http://blog.sina.com.cn/s/blog_5e5279f00102v8o2.html
2 H$ U6 U0 U/ g* A. M3 {2 d搜外论坛原创作者:allenymj: S; O! m7 b# l- { h; z Y- c" L2 _3 g' s( a$ k2 K/ L3 m% j
日期:2014-12-266 k5 H" I7 u# Z. x8 N8 Y
) P% J2 Z8 w8 i/ R. I
% @) l& h$ S7 k! x7 d# S, f+ y) V4 b从互联网上抓取网页前段时间写了一些SEO的案例来跟大家分享,本来今天打算继续分享以前做过的SEO案例,但是觉得写得有点烦了,所以干脆换个话题。今天来跟大家分享一下这几年本人通过SEO和SEM以及一些牛人的经验说总结出来的搜索引擎的工作原理。这里的搜索引擎并不特指某个搜索引擎。当然,这些只是工作原理,至于具体的算法就不可能总结得出来了,因为那些都是搜索引擎的核心技术。那么下面进入正题:
6 {/ s+ |+ c8 D1 _
/ G9 d9 T S: c搜索引擎的工作原理,可分为3步:从互联网上抓取网页、建立索引数据库、在索引数据库中搜索排序。
3 s) \! g" o; }5 ^% O
+ _2 p* k+ u! G1 I2 w+ O4 C从互联网上抓取网页,就是利用能够从互联网上自动收集网页的Spider系统程序,自动访问互联网,并沿着任何网页中的所有URL爬到其他网页,重复这过程,并把爬过的所有网页收集回来。 . S, O: M2 i3 x1 ?( a0 p. o* M
: Z* I% |( ]) ~: H6 L0 C i
建立索引数据库,就是由分析索引系统程序对收集回来的网页进行分析,提取相关网页信息,根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后用这些相关信息建立网页索引数据库。
7 @9 R7 P6 Y7 L' ]" t9 `! U8 D0 I$ u7 v& m
7 Q, Y8 L5 O- R" U! @% j在索引数据库中搜索排序,就是当用户输入关键词搜索后,由搜索系统程序从网页索引数据库中找到符合该关键词的所有相关网页。因为所有相关网页针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序,相关度越高,网站排名越靠前。最后,由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。/ N- J" ?2 W% N) `
& _- t5 p; Z* k5 |5 I; F& H
" b$ A9 C$ _: p3 X V( c8 v$ m2 t! t; V" M- j9 o
9 S& u. F7 Y7 i: `一、网页搜集
0 x9 `0 ~$ C: ? u) a* f9 {! G) l9 |$ U3 v" e9 _
搜索引擎网页的搜集过程并不是在用户提交关键词后进行及时的搜索,而是预先将网页搜集好并进行相关的处理之后等待用户的查询。我们知道,在网络比较畅通的情况下,从网上下载一篇网页大约需要1秒钟,因此如果用户在查询的时候即时去网上抓来成千上万的网页,一个个分析处理后再和用户的查询匹配,这样查询的时间就会很慢也不可能满足用户的需求。有可能多个用户重复抓取同一个网页,使系统的效益降低。面对大量的用户查询,不可能每来一个查询,系统就到网上“搜索”一次。大规模的搜索引擎是将一批预先搜集好的网页进行管理和维护。那么如何维护呢?有两种基本的方法。
, ^- c6 ~+ H& v0 A1 t. A W: X
+ k" ~& \6 B8 G定期搜集法 1 `7 A+ z" ~7 q3 I
2 Y$ }- ?7 p4 O7 n y3 L$ C0 Z3 D每次搜集替换上一次的内容,我们称之为“批量搜集”。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花费几周的时间。这样做的开销比较大,通常两次搜集的间隔时间也很长(如早期天网的版本大约每3个月搜索一次,Google在一段时间曾是每隔28天搜索一次)。这种方法的好处是系统实现比较简单,缺点是时实性不高,还有重复搜集所带来的额外带宽的消耗。
% O3 }: s5 Q3 f+ c g
. X1 P1 ^5 Y- |/ u7 h" A7 d增量搜集法
2 e% b5 G: F6 i2 f( e; Z: `' {1 P1 e k. T5 G6 X
最初时搜集好一批数据,以后只是搜集新出现的网页和改变的网页并删除不再存在的网页。除了新闻网站外,许多网页的内容并不是经常变化的,这样一来每次搜集的网页量不会很大,于是可以经常进行搜集。3千万个网页,一台PC机,在一般的网络条件下,半天也就搜集完了。这样的系统表现出来的信息时实性就会比较高,主要缺点是系统实现比较复杂。 在具体搜集过程中,如何抓取一篇篇的网页,可以有不同的考虑。最常见的一种是所谓“爬取”,具体过程是,将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL的集合S(或者说“种子”)开始,沿着网页中的链接,按照先深、先宽或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S。整个过程可以形象地想象为一个蜘蛛(Spider)在蜘蛛网(web)上爬行。一个真正的系统其实是多个“蜘蛛”同时在爬。
Y. M3 P: i% l, ]2 Q& r: f9 f
1 X1 R9 W& O) ?0 K这种方法实现起来不算困难,但需要注意的是在实现过程中通过一定的策略,使搜集到的某些网页相对比较“重要”。我们知道任何搜索引擎是不可能将Web上的网页搜集完全的,通常都是在某些条件的限制下来结束搜集的过程(如磁盘满,或者搜集时间已经太长了)。因此就有了一个尽量使搜到的网页比较重要的问题,这对于那些并不追求很大的数量覆盖率的搜索引擎特别重要。一般情况下按照先宽搜索方式得到的网页集合要比先深搜索得到的集合重要。 0 n8 s; e! n. q$ L/ |
$ L" D/ P- C1 _/ j另外一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。每搜到一个网页,如果它发生变化并含有新的URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个URL对应的网页不存在了,则将它从S中删除。这种方式也可以看成是一种极端的先宽搜索,即第一层是一个很大的集合,往下最多只延伸一层。
6 O! ~: f8 V. f1 o% y+ b+ Q P) X4 }2 U, J& o3 o# x8 Q0 n
还有一种方法是让网站拥有者主动向搜索引擎提交它们的网址,系统在一定时间内向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存人数据库中。大型商业搜索引擎一般都提供这种功能。
% H+ _; B m- j% @. l0 ]* v6 P e# A3 _2 U* C) K
二、网页处理 + Z( s- Q* F9 `# j' w8 f5 N) D
" z6 a3 d0 m9 A! t
互联网上大部分信息都是以HTML格式存在,对于索引来说,只处理文本信息。因此需要把网页中文本内容提取出来,过滤掉一些脚本标示符和一些无用的广告信息,同时记录文本的版面格式信息。网页处理主要包括4个方面:关键词的提取、重复或转载网页的消除、链接分析和网页重要程度的计算。 $ Z7 K7 q7 l3 c- @6 e) Y% X
% E5 s) p, R8 K0 \
1.关键词的提取$ _8 |& t% Z }9 P# B* S
! `5 W8 t2 J H: y7 V' V7 l
由于HTML文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息(如广告,导航条,版权说明等)。为了支持查询服务,需要从网页源文件中提取出能够代表它的内容的一些特征——关键词。 网页处理阶段的一个基本任务,就是要提取出网页源文件的内容部分所包含的关键词。对于中文来说,就是要根据一个词典∑,用一个“切词软件”,从网页文字中切出∑所含的词语来。这样一篇网页就可以由一组词来近似代表了。一般来讲,可能得到很多词,同一个词可能在一篇网页中多次出现。从效果和效率考虑,不应该让所有的词都出现在网页的表示中,要去掉诸如“的”、“在”等没有内容指示意义的词,称为“停用词”(StopWord)。这样,对一篇网页来说,有效的词语数量大约为200。 " ?" O) y( q$ ]" p
/ r- V1 B, R! V* n1 `4 T d
2.重复或转载网页的消除: Q3 }- W; c. P
# i& H9 E; _' J4 R4 z/ }& f
我们知道Web上的信息存在大量的重复现象。统计分析表明,网页的重复率平均大约为4。也就是说,当通过一个URL在网上看到一篇网页的时候,平均还有另外3个不同的URL也给出相同或者基本相似的内容。这种现象对于搜索引擎来说,它在搜集网页时要消耗机器时间和网络带宽资源,而且如果在查询结果中出现,将消耗查询者计算机的资源,也会引来用户的抱怨。因此,消除内容重复或主题重复的网页是网页处理阶段的一个重要任务。 + v$ O* {. Q; a+ q
) X6 r w, x, }) V4 g" U+ k
3.链接分析 Y, u1 X/ f! w* `* ]9 Y' f) _4 g
5 R2 l1 e7 M& \从信息检索的角度讲,如果系统面对的仅仅是内容的文字,我们能依据关键词和关键词在文档集合中出现的频率来统计该词的相对重要性以及和某些内容的相关性。有了HTMI。标记后,情况还可能进一步改善,例如,在同一篇文档中,<H1>和</H1>之间的信息很可能就比在<H4>和</H4>之间的信息更重要。尤其HTML文档中所含的指向其他文档的链接信息是人们特别关注的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。* g7 c( K# {% e- R9 b
# V1 x+ F. K0 P# @5 O7 n
4.网页重要程度的计算
3 S0 K' P+ z! o9 N, t& Z% ^- [1 S. p1 h# u
搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。不同的顺序达到的结果是不一样的,因此搜索引擎实际上追求的是一种统计意义上的满意。例如,人们认为用Google查询比较好,是因为在多数情况下Google返回的内容要更符合用户的需要。
% z2 ?0 J+ d5 T# ?; s" A9 d
5 m4 H- H9 C( G0 Q: J2 Y如何对查询结果进行排序有很多因素需要考虑,如何理解一篇网页比另外一篇网页重要?人们参照科技文档重要性的评估方式,核心想法就是“被引用多的就是重要的”。“引用”这个概念恰好可以通过在网页之间的超链进行体现,作为Google创立核心技术的Pag—eRank就是这种思路的成功体现。除此以外,人们还注意到网页和文档的不同特点,即一些网页主要是大量对外的链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接。‘从某种意义上讲,这形成了一种对偶的关系,这种关系使得人们可以在网页上建立另外一种重要性指标。这些指标有的可以在网页处理阶段计算,有的则要在查询阶段计算,但都是作为在查询服务阶段最终形成结果排序的部分参数。* e" E5 ~7 |0 i" Q" a( P
W9 {$ E* S# M4 E# s& X4 \三、查询服务 R! e) J7 k' j7 g% H! K8 L
K0 H% f" q6 K* i5 J
为了完成查询服务,需要有相应的元素来进行表达,这些元素主要有:原始网页文档、URL和标题、编号、所含的重要关键词的集合以及它们在文档中出现的位置信息、其他一些指标,如重要程度、分类代码等。 用户通过搜索引擎看到的不是一个“集合”,而是一个“列表”。如何从集合生成一个列表,是服务子系统的主要工作。服务子系统是在服务进行的过程中涉及的相关软件程序,而网页处理子系统事先为这些软件程序准备了相应的数据。服务子系统的工作原理,主要有4个方面。- B) P2 C' M9 A! b
4 u0 x. C* ^4 V9 {5 {1 }1.查询方式和匹配
) E+ C5 K/ s/ M. y2 [7 }
' `6 H& i# \3 R+ P1 m6 _+ Z查询方式指的是系统允许用户提交查询的形式。对于普通用户来说,最自然的方式就是“需要查询什么就输入什么”。例如,用户输入“搜索引擎”,可能是他想了解有关搜索引擎的定义、概念和相应的知识;也可能是他想了解目前有哪些搜索引擎,如何进行搜索等内容;也有可能用户关心的是间接的信息。目前用一个词或者短语来进行查询,依然是主流的查询模式,这种模式比较简单且容易实现。词的识别是搜索引擎中非常关键的一部分,通过字典文件对网页内的词进行识别。刘于西文信息来说,需要识别词的不同形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、H文、韩文等)需要进行分词处理。识别出网页中的每个词,并分配唯一的wordlD号,用于为数据索引中的索引模块服务。例如,当用户输入“搜索引擎教程”进行搜索时,系统首先将这个短句进行分词处理,将其分为“搜索引擎教程”,然后删除那些没有查询意义或者在每篇文档中都会出现的词,最后形成一个用于参加匹配的查询词表,该词表的数据结构是一个用对应的分词作为索引的一个倒排文件,它的每一个元素都对应倒排文件中的一个倒排表。这样系统就完成了查询和文档的匹配。+ A3 @# }* S# f2 A' O9 _) \9 O& {
" W( A/ M$ I' e- r G3 A4 I
2.索引库的建立
0 K4 T: }" s) ? W% F% k3 y2 v f4 e" Z; w h& Y2 f. a; l0 e
索引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种索引:文档索引和关键词索引。文档索引分配每个网页一个唯一的doclD号,根据doclD索引出在这个网页中出现过多少个wordlD,每个wordID出现的次数、位置、大小写格式等,形成doclD对应wordlD的数据列表;关键词索引其实是对文档索引的逆索引,根据wordlD索引出这个词出现在哪些网页(用wordlD表示),出现在每个网页的次数、位置、大小写格式等,形成wordlD对应docID的列表。' a6 O( e a% B$ b' F
; x5 V; A \( ]+ [' H4 A
3.结果排序
$ d4 ?. M1 S. D6 `9 e5 J1 G: E _9 y; ^
结果就是将查询结果的集合在屏幕上以列表的方式显示出来。所谓列表,就是按照某种评价方式,确定出查询结果集合中元素的顺序,让这些元素以某种顺序呈现出来,这就是相关性。相关性是形成这种查询顺序的基本因素,有效地定义相关性本身是很困难的,从原理上讲它不仅和查询词有关,而且还和用户的背景,以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同的查询可能是针对于不同的需求的。 一般来讲,结果排序的方法是基于词汇出现的频率,也就是说在一篇文档中包含的查询词越多,则该文档就越应该排在前面。这样一种思路有一定的道理,而且在倒排文件数据结构上很容易实现。当我们通过关键词的提取过程,形成一篇文档的关键词的集合后,很容易同时得到每一个词在该文档中出现的次数,即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。然而,由于网页编写的自发性、随意性较强,仅仅针对词的出现来决定文档的顺序,在Web上做信息检索表现出明显的缺点,需要有其他技术的补充。这方面最重要的成果就是PageRank。通讨在网页处弹阶段为短篇网贾形成一个独立于查询词(也就和网页内容无关)的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。( @* m& x' n' L. }7 P* _$ ^
: d3 p' c/ ?3 `
搜索的处理过程是对用户的搜索请求进行满足的过程,通过用户输入搜索关键字,搜京服务器对应关键词字典,把搜索关键词转化为wordID,然后在索引库中得到docID列表,别doclD列表进行扫描和wordID的匹配,提取满足条件的网页,然后计算网页和关键词的桂关度,根据相关度的数值返回给用户。9 k1 p' G" K7 H* m$ D
9 T9 y" I; K; } u# Y7 o& F4.文档摘要/ ?% k8 J" @. d; W E0 p
1 [8 |% N* A3 O; d+ w* G搜索引擎给出的结果是一个有序的条目列表,每一个条目有3个基本的元素:标题、网址和摘要。其中的摘要需要从网页正文中生成。# @1 s; L* |. v/ F6 h
7 Q/ m8 j$ S8 y3 x6 i
一般来讲,搜索引擎在生成摘要时可以归纳为两种方式:一种是“静态”方式,即独立于查询,按照某种规则,事先在预处理阶段从网页内容提取出一些文字,如截取网页正文的开头512个字节(对应256个汉字),或者将每一个段落的第一个句子拼起来,等等。这样形成的摘要存放在查询子系统中,一旦相关文档被选中与查询项匹配,就读出返回给用户。这种方式的优点是实现起来比较容易,缺点是摘要可能和查询的内容无关;另一种是“动态摘要”方式,即在响应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置。. K' K0 Z) F# I6 s; ~/ z
6 |0 H. ~8 `( t, \- K& Z以上就是本人总结的关于搜索引擎的工作原理介绍,由于是介绍技术性的内容,所以读起来难免会有点枯燥无味,文中若有不足之处,还望指出。; G+ g' Q4 R7 Y$ Y
$ Q8 E0 h$ f+ W7 k2 `原文出处链接:http://blog.sina.com.cn/s/blog_5e5279f00102v8o2.html& s& ~( F$ g, [4 a5 I
搜外论坛原创作者:allenymj: S; O! m7 b# l- { h; z Y- c+ |6 q0 L$ b" m, Y+ [2 l
日期:2014-12-26
) A- n2 k( A8 y2 V7 e, m3 ^, n" Y( G4 W# M v
& R: q( |1 f1 |2 ~7 _# q技术贴子啊利用能够从互联网上自动收集网页的Spider系统程序 |
|