搜索引擎分词和索引库.docx
《搜索引擎分词和索引库.docx》由会员分享,可在线阅读,更多相关《搜索引擎分词和索引库.docx(25页珍藏版)》请在冰豆网上搜索。
搜索引擎分词和索引库
分词是很多做SEO的人常听到的概念,为了让大家在这个方面不会有疑惑,现在要来讲一下分词以及索引库。
这也是更深入的了解搜索引擎的开始。
搜索引擎每天都是在处理一个基本的需求:
用户搜索一个关键词,搜索引擎马上找到相关的网页给用户。
这个过程要怎么实现呢?
下面就分步来了解这个过程。
首先搜索引擎要尽可能多的把互联网上的网页搜集下来,这样能提供大量的网页给用户查询。
这一部分由爬虫来解决,顺着互联网上的链接一个个往下抓取。
最后就有了一堆记录着网页各种信息的资料库。
目前的现状,最后能使这个资料库里有大概100多亿个网页。
资料库里记录了这些网页的URL,整个网页的HTML代码,网页标题等等信息。
QQ皮肤
然后,搜索引擎拿到用户输入的这个关键词后,要从这个资料库里把相关的网页找出来给用户。
这里就碰到好几个问题了:
1,要怎么快速的从上100亿个网页里找出匹配的网页的呢?
要知道这是从上百亿的网页里找符合这个关键词内容的网页,如果像用word里那种用ctrl+F轮询的查找方式的话,即使用超级计算机,也不知道要消耗多少时间。
但是现在的搜索引擎,在几分之一秒里就实现了。
所以一定是做了一些处理才实现的。
解决办法也倒简单,就是建立一份索引库。
就像我们查《新华字典》一样,我们不会翻遍《新华字典》的每一页来查那个字在哪页,而是先去索引表那里找这个字,拿到页码后,直接翻到那页就可以了。
搜索引擎也会为上百亿的网页建立一个索引库,用户查询信息的时候,是先到搜索引库里查一下要找的信息在哪些网页,然后就引导你去那些网页的。
如下图:
索引库
2,索引库里用什么样的分类方式?
我们知道,《新华字典》的索引表是用字母列表或者偏旁部首的分类方式的。
那么搜索引擎的索引库里是怎么分类的?
是不是也可以用字母列表的方式?
搜索引擎如果以字母列表的方式排列索引库,那么平均每个字母下要查询的网页数量是 100亿÷26=3.85亿,也还是一个很大的数字。
而且搜索引擎上,今天是100亿个网页,过不了多久就是300亿个网页了。
最后,终于找到一个解决办法:
索引库里用词语来分类。
因为尽管互联网上的网页是不断激增的,但是每一种语言里,词语的数量都是相对固定的。
比如英语就是一百多万个单词,100亿÷1百万= 1万;汉语是8万多个词语,100亿÷8万=12万5千。
都是计算机很容易处理得过来的。
用词语来分类还有一个好处,就是可以匹配用户查询的那个词语。
本来用户就是要查这个词语的,那我就按这个词语去分类就是。
所以,搜索引擎的索引库,最后就是这个样子的:
模拟的索引库
理论上,当用户输入关键词“mp3player”搜索时,搜索引擎就从“mp3”那行和“player”那行里拿出同时都有的、交集的url来即可。
上图也是现在英文版的上的真实排名情况,可以看到这个网站在搜索“mp3”的时候排第4位,在搜索“player”的时候也排第4位。
当搜索“mp3player”的时候,因为没有其他网站比它更匹配这个词语,所以它排在了第一位。
排在第一
当搜索引擎把一个网站抓取下来后,接着要做的事情就是把网页里的词语分开放到索引库里。
分词在这个时候就要应用到了,所谓的分词,其实很简单,就是把词语分开而已。
英语的分词好处理一点,因为英语的每个单词之间是用空格分开的,基本上就只要处理一些虚词、介词,还有一些词语的单复数,变形词等等。
但是中文的分词就复杂很多了,句子中的每个字都连在一起,有时候即使是人来判断,都还有产生歧义的时候。
中文的分词有很多方法,也很容易弄懂的,如正向切分法,逆向切分法等等,网上有很多相关的资料。
谷歌的中文分词方法是从国外一家第三方公司买的。
XX的分词方法是自己创立的,可能在词库上面比谷歌有点优势。
不过其他方面差了一些。
当爬虫找到一个网页的时候,在搜索引擎看来,这个网页就是一大堆词语的组合。
基本流程如下:
搜索引擎的处理过程
看完这个流程图,应该能给大家在做内部优化的时候有所启发的。
我建议大家再去看一下《把Web标准化进行得更彻底一点》这篇文章,还有《丰富网页摘要”,让你的网站与众不同》以及《SEO案例:
锚文本、关键字、nofollow、Web标准化
(一)》和《SEO案例:
锚文本、关键字、nofollow、Web标准化
(二)》。
那些文章和这篇文章一样,都是在讲同一个问题。
一定要站在搜索引擎的角度,把它的这些原理了解清楚了,才会让你明白哪些因素才是你应该关注的重点。
有人说:
SEO就是重在细节。
这应该是经验之谈。
但是不知道大家有没有想过的是:
是不是可能原本这些看似细节的东西,其实就是应该注意的重要的东西呢?
如果你不能控制好你的排名,有没有想过可能你以前特别在意的一些SEO因素,其实有些并不是重点?
;而只是你把影响排名的部分因素弄错了?
上面的很多知识,其实在《搜索引擎营销:
网站流量大提速》里都有提及的。
那本书要去精读的原因之一就是它讲了很多看似很普通的原理,但是都是有用的。
比如在选关键词的时候,也可以参考一下这个词语的索引量。
从上面的原理可以看出,这个索引量反应了这个词语在这种语言当中人们使用的流行程度。
所以国外有些计算关键词KEI指数的公式里,也把这个关键词的索引量加入了进来。
有兴趣再追溯下去的朋友可以看看google黑板报上的这篇文章
下篇文章谈一下google咖啡因到底更新了什么。
Google黑板报的文章内容:
数学之美系列五--简单之美:
布尔代数和搜索引擎的索引
2006年5月10日上午09:
10:
00
发表者:
吴军,Google研究员
[建立一个搜索引擎大致需要做这样几件事:
自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。
我们在介绍GooglePageRank(网页排名)时已经谈到了一些排序的问题,这里我们谈谈索引问题,以后我们还会谈如何度量网页的相关性,和进行网页自动下载。
]
世界上不可能有比二进制更简单的计数方法了,也不可能有比布尔运算更简单的运算了。
尽管今天每个搜索引擎都宣称自己如何聪明、多么智能化,其实从根本上讲都没有逃出布尔运算的框框。
布尔(GeorgeBoole)是十九世纪英国一位小学数学老师。
他生前没有人认为他是数学家。
布尔在工作之余,喜欢阅读数学论著、思考数学问题。
1854年“思维规律”(AnInvestigationoftheLawsofThought,onwhicharefoundedtheMathematicalTheoriesofLogicandProbabilities)一书,第一次向人们展示了如何用数学的方法解决逻辑问题。
布尔代数简单得不能再简单了。
运算的元素只有两个1(TRUE,真)和0
(FALSE,假)。
基本的运算只有“与”(AND)、“或”(OR)和“非”(NOT)三种(后来发现,这三种运算都可以转换成“与”“非”AND-NOT一种运算)。
全部运算只用下列几张真值表就能完全地描述清楚。
AND|10
-----------------------
1|10
0|00
这张表说明如果AND运算的两个元素有一个是0,则运算结果总是0。
如果两个元素都是1,运算结果是1。
例如,“太阳从西边升起”这个判断是假的(0),“水可以流动”这个判断是真的
(1),那么,“太阳从西边升起并且水可以流动”就是假的(0)。
OR|10
-----------------------
1|11
0|10
这张表说明如果OR运算的两个元素有一个是1,则运算结果总是1。
如果两个元素都是0,运算结果是0。
比如说,“张三是比赛第一名”这个结论是假的(0),“李四是比赛第一名”是真的
(1),那么“张三或者李四是第一名”就是真的
(1)。
NOT|
--------------
1|0
0|1
这张表说明NOT运算把1变成0,把0变成1。
比如,如果“象牙是白的”是真的
(1),那么“象牙不是白的”必定是假的(0)。
读者也许会问这么简单的理论能解决什么实际问题。
布尔同时代的数学家们也有同样的问题。
事实上在布尔代数提出后80多年里,它确实没有什么像样的应用,直到1938年香农在他的硕士论文中指出用布尔代数来实现开关电路,才使得布尔代数成为数字电路的基础。
所有的数学和逻辑运算,加、减、乘、除、乘方、开方等等,全部能转换成二值的布尔运算。
现在我们看看文献检索和布尔运算的关系。
对于一个用户输入的关键词,搜索引擎要判断每篇文献是否含有这个关键词,如果一篇文献含有它,我们相应地给这篇文献一个逻辑值--真(TRUE,或1),否则,给一个逻辑值--假(FALSE,或0)。
比如我们要找有关原子能应用的文献,但并不想知道如何造原子弹。
我们可以这样写一个查询语句“原子能AND应用AND(NOT原子弹)”,表示符合要求的文献必须同时满足三个条件:
-包含原子能
-包含应用
-不包含原子弹
一篇文献对于上面每一个条件,都有一个True或者False的答案,根据上述真值表就能算出每篇文献是否是要找的。
早期的文献检索查询系统大多基于数据库,严格要求查询语句符合布尔运算。
今天的搜索引擎相比之下要聪明的多,它自动把用户的查询语句转换成布尔运算的算式。
当然在查询时,不能将每篇文献扫描一遍,来看看它是否满足上面三个条件,因此需要建立一个索引。
最简单索引的结构是用一个很长的二进制数表示一个关键字是否出现在每篇文献中。
有多少篇文献,就有多少位数,每一位对应一篇文献,1代表相应的文献有这个关键字,0代表没有。
比如关键字“原子能”对应的二进制数是0100100001100001...,表示第二、第五、第九、第十、第十六篇文献包含着个关键字。
注意,这个二进制数非常之长。
同样,我们假定“应用”对应的二进制数是0010100110000001...。
那么要找到同时包含“原子能”和“应用”的文献时,只要将这两个二进制数进行布尔运算AND。
根据上面的真值表,我们知道运算结果是0000100000000001...。
表示第五篇,第十六篇文献满足要求。
注意,计算机作布尔运算是非常非常快的。
现在最便宜的微机都可以一次进行三十二位布尔运算,一秒钟进行十亿次以上。
当然,由于这些二进制数中绝大部分位数都是零,我们只需要记录那些等于1的位数即可。
于是,搜索引擎的索引就变成了一张大表:
表的每一行对应一个关键词,而每一个关键词后面跟着一组数字,是包含该关键词的文献序号。
对于互联网的搜索引擎来讲,每一个网页就是一个文献。
互联网的网页数量是巨大的,网络中所用的词也非常非常多。
因此这个索引是巨大的,在万亿字节这个量级。
早期的搜索引擎(比如AltaVista以前的所有搜索引擎),由于受计算机速度和容量的限制,只能对重要的关键的主题词建立索引。
至今很多学术杂志还要求作者提供3-5个关键词。
这样所有不常见的词和太常见的虚词就找不到了。
现在,为了保证对任何搜索都能提供相关的网页,所有的搜索引擎都是对所有的词进行索引。
为了网页排名方便,索引中还需存有大量附加信息,诸如每个词出现的位置、次数等等。
因此,整个索引就变得非常之大,以至于不可能用一台计算机存下。
大家普遍的做法就是根据网页的序号将索引分成很多份(Shards),分别存储在不同的服务器中。
每当接受一个查询时,这个查询就被分送到许许多多服务器中,这些服务器同时并行处理用户请求,并把结果送到主服务器进行合并处理,最后将结果返回给用户。
不管索引如何复杂,查找的基本操作仍然是布尔运算。
布尔运算把逻辑和数学联系起来了。
它的最大好处是容易实现,速度快,这对于海量的信息查找是至关重要的。
它的不足是只能给出是与否的判断,而不能给出量化的度量。
因此,所有搜索引擎在内部检索完毕后,都要对符合要求的网页根据相关性排序,然后才返回给用户。
把Web标准化进行得更彻底一点
国平发表在SEO策略于2009年,七月5th|42个回复
说起Web标准化,大家马上就想到DIV+CSS网页布局。
用DIV+CSS做网页布局的优点至少包含以下这些:
对开发人员可以减少开发和维护成本,对网站可以减少服务器带宽消耗,对用户可以提高加载速度,对搜索引擎可以有利于内容索引。
DIV+CSS是Web标准化的一种体现。
但是不要认为只要把网站做成DIV+CSS的表现形式就可以了。
关于Web标准化在SEO上的应用,还可以走得更远的。
一个网页应用了DIV+CSS排版,就有了以下的一个网页模型。
这个网页模型体现在网页代码里面是这样的:
内容层,就是一些纯文字信息,还有一些非背景的图片。
结构层,就是一些html标签,如
、
、
等。
内容层和结构层的内容是搜索引擎能看到的。
表现层,就是CSS文件。
为了让搜索引擎看不到这些代码,一般是作为一个CSS文件外调的,如:
//www.****.com/style.css”type=”text/css”/>
这个CSS文件里的代码差不多是以下这样的,也可以有图片,做背景用:
html,body{
padding:
0px;
background-image:
url(../images/bg.gif);
}
#logo{
width:
258px;
float:
left;
}
在这三层之上的,就是一些负责交互的Javascript文件。
也为了让搜索引擎看不到那些代码,是外调的。
转换一下角色,站在搜索引擎的角度想象一下,当搜索引擎分析一个网页的时候,怎么来理解这个网页讲了什么内容呢?
有些所谓的搜索引擎爬虫模拟程序(
要做到理解上下文还有理解重点,就必须借助结构层里的html标签。
因为这些标签表达了信息的层次。
比如
~表达了是一个标题。
中的title表达了一个链接的替代描述文字。
和表达了内容中应该重视的部分。
table布局的网页也有这些标签,但在表达信息的时候,它的嵌套结构,还有大量对搜索引擎无效的代码防止了信息层次的表达。
即使DIV+CSS排版的页面,有时候一段内容后的一个
没有关闭,搜索引擎都不能很好的理解网页内容。
div+css排版的页面采用嵌套结构也不友好。
还有,很多人可能一味的追求关键字密度而不太重视这些标签。
其实与关键字密度相比,搜索引擎更关注关键字所处的位置。
搜索引擎的对于站内因素的重要性排列充分模仿了报纸的排版。
所以,你加了大量的关键词发现排名上升了,可能并不是关键词密度上升的缘故,而是因为碰巧把关键词加在了比较重要的位置。
还有一些人这几个标签应该是注意到了的,但是因为没有从根本的角度去考虑过问题,所以还有很多其他事情没有去做。
比如:
Web标准里化有很多可以利用的东西,文字标签就有、、、等,这些标签分别表达的意思是搜索引擎完全能识别的;还有,title这个属性不光是可以加到标签里的,还可以加到、等标签里的,你要是弄个关键字密度什么的,这些标签里完全可以利用起来;加粗文字还可以用标签……甚至标签都还有一个summary属性可以加内容的。还有很多SEO人一直没有关注的“微格式”。
(“微格式”维基百科的解释。
)
通俗的讲,微格式就是一种类似XML的结构化的语义标记。
它试图让机器更加容易的理解网页上的内容。
现在这种微格式搜索引擎是可以读取的。
我这个博客用的是wordpress程序,你现在查看源代码的话就可以看到微格式的一个具体应用。
如:
(这是wordpress系统自带就有的。
)
你只要遵照这些标准,开始去应用,慢慢进化,就会发掘很多技巧类的东西。
有些技巧我或许以后会在各个章节中体现出来。
把Web标准化进行得更彻底一点,一定让你受益匪浅。
“丰富网页摘要”,让你的网站与众不同。
国平发表在SEO策略于2009年,七月31st|43个回复
在6月15的《谷歌中文网站管理员博客》中,出现了一篇介绍“丰富网页摘要”的文章。
看到这篇博客,我就知道3年前对google的预测,现在终于变成现实了。
不过没想到在众多网站还没普及这些新技术的情况下,google这么快就开始应用了。
关于“丰富网页摘要”的详细介绍,大家可以点上面的链接去了解。
“丰富网页摘要”,用一句话说明一下就是:
你给你的网站的某些内容,用特定的格式标注一下,就可以让你的网页在google的搜索结果中,显示更多的结构化的信息。
比如那个博客上的截图:
丰富网页摘要
当用户搜索“droolingdog”,用户能在搜索结果页直接看到网页上的产品有多少人评论以及价格范围。
这些信息是在原网页中本来就有的:
如果你的网站也能这样呈现搜索结果给用户,有什么好处自然是不用说的。
接下来要讲的是google为什么会采用“丰富网页摘要”。
下面给大家呈现一下以前我的分析过程。
这样你也能预测搜索引擎以后会做些什么了。
我们如果站在搜索引擎的角度去看,就发现作为一个通用搜索引擎,其实是非常不容易的。
搜索引擎面对的是上百亿的网页,先不说分词、索引、以及抓取和排序等等的技术。
先来看搜索引擎如何判断网页上有什么内容,就发现是件很复杂的事情。
互联网上可以说什么样的网站都有,体现在网页的代码里,什么样的HTML写法都有的。
在具体的网页设计上,有些网站用模版做网站,可能仅仅只有一个区域内的内容是有效的;而有些不用模版,网页上从头到尾都是有价值的内容;每个网站的代码都是如此不相同而且混乱,但是搜索引擎还要通过这些HTML代码来判断你的重点内容。
搜素引擎要从这么多繁杂的网页里提炼有价值的内容给用户,那个过程非常的痛苦。
我曾经和前yahoo中国的工程师一起做过一些事情,发现这样的互联网现状太考验一个公司的技术水平了。
到如今,像google这样的公司,在处理网页噪音的时候都还遇到很多困难的。
所以,如果有一种统一的格式和标准,让大家来遵守,大家把网站里的内容都用这个标准把信息结构化的话,那对搜索引擎来说是一件非常幸福的事情。
现在博客搜索里,google已经开始应用一些现成的标准了。
如:
在google的博客搜索里搜索“SEM一家之言”,出现这样的搜索结果:
google博客搜索
大家看这个搜索结果,已经把博客发布的时间和作者给列出来了的。
但是可以看到,这两个页面的排版和页面代码都是不一样的。
那搜索引擎是怎么准确的知道这两个信息的呢?
特别是第二个结果,google列出的那个时间的格式和我博客上的格式是不一样的。
原因倒非常简单。
因为这两个博客都提供了RSS供稿,在RSS文件里,都用一个标准的格式写明了时间和作者这些信息的。
RRS文件
google通过读取这个标准化的RSS文件准确的抓取到了这些信息。
除了应用RSS这个通用的标准,google还试图创立一个自己的标准来规范化很多信息。
像googlebase就是其中的一个实验的项目。
googlebase这个项目以后会有专门的介绍。
它试图把很多的信息都规范化,如你卖的东西的价格和产地,是否提供运输等等;你的房屋租售价格和位置;甚至一个学校的课程表,都可以用特定的格式标准化。
googlebase还在不断的发展和完善中,在目前的应用中,凡是googlebase里的信息,都有可能在相关的搜索结果中排在靠前的位置。
比起自己去创立和推广一个标准来,应用现成的标准无疑是最省事的。
“微格式”和“RDFa”就是一个这样的现成的标准。
具体的应用在《谷歌中文网站管理员博客》的那篇文章中已经说明了。
这些标准的应用起来效果是非常好的。
还是同一个词语“droolingdog”, 用美国IP,在英文版的google上搜索,在第2个搜索结果中,还是出现那那家“BarBQ”,而且有个地图标明了地址,地图旁边还有地址和电话。
单独的地图和地址电话信息
这个搜索结果不是那个“本地商家”的搜索结果。
因为这个结果只显示这一家店的地址,而且特别标注了这家店的地址和电话。
这幅地图和地址信息在那个网页上本来就有的,只是这个网站把它们用特定的标准标注了才有了这种效果。
我的这个分析方式,就是站在搜索引擎的角度,来考虑如何提供更好的搜索结果给用户。
这是一种很好的SEO方法。
以后大家也可以从这个角度来考虑SEO。
顺便说一下的是,上面那个博客搜索里的时间都比RSS文件里的时间慢一天的,这是因为google服务器所在的时区比中国时间慢的缘故。
当然谷歌是不会处理这些小细节的,包括最近谷歌的首页上找不到登陆的地方也是。
SEO案例:
锚文本、关键字、nofollow、Web标准化
(一)
国平发表在SEO案例于2009年,七月22nd|76个回复
前面谈到了做SEO需要注意的好几个因素。
但是因为工作上的原因,好多因素没有讲透的。
(不过其实有些东西我给我们团队的人都没有讲过的。
)我看到一些人的回复,对有些SEO因素有误解。
还有,我看到很多人都没怎么关注“Web标准化”这一篇文章。
其实这篇文章不是在解释为什么要web标准化,而是这样的:
几乎所有的SEO站内优化,最终都要体现在网页代码里,而在网页代码里,“结构层”和“内容层”里的东西如何写是很重要的。
所以接下来讲一个具体的案例,让大家了解一下一个SEO同行是怎么应用这些基本的因素的。
这个案例就是Globalsources,是一个非常重视SEO的网站。
它在细节上的考虑,帮助它获得了很不错的SEO流量。
先看它的页面:
Globalsources
首先,它很重视锚文本,因为锚文本描述了被链接的页面的内容。
所以全站内所有指向首页(首页统一用顶级域名)的链接,锚文本都是两个选好的关键字。
但是一般从网站设计的角度考虑,有很多指向首页的链接,是不能都用文字的。
可以看看它网页的上部分,至少就有2个:
1,链接指向首页的logo就不是文字。
遇到这样的情况,它就退而求其次,给这个链接的title属性和logo图片的alt文本都用和锚文本一样的文字。
代码如下:
//…../SITE/I/GS2.
展开阅读全文
相关搜索