2.4.2 预处理
在一些SEO材料中,“预处理”也被简称为“索引”,因为索引是预处理最主要的内容。
搜索引擎蜘蛛抓取的原始页面,并不能直接用于查询排名处理。搜索引擎数据库中的页面数量都在数万亿级别以上,用户输入搜索词后,若靠排名程序实时分析这么多页面的相关性,计算量太大,不可能在一秒内返回排名结果。因此抓取来的页面必须先经过预处理,为最后的查询排名做好准备。
和爬行抓取一样,预处理也是在后台提前完成的,用户在搜索时察觉不到这个过程。
1.提取文字
现在的搜索引擎还是以文字内容为基础的。蜘蛛抓取到的页面HTML代码,除了用户在浏览器上可以看到的可见文字,还包含了大量的HTML格式标签、JavaScript程序等无法用于排名的内容。搜索引擎在预处理时,首先要做的就是从HTML代码中去除标签、程序,并提取出可以用于排名处理的页面文字内容。
比如下面这段HTML代码:
除去HTML代码后,用于排名的文字只剩下这一行:
除了可见的文字内容,搜索引擎也会提取出一些包含文字信息的特殊代码,如Meta标签中的文字、图片替代文字、链接锚文字等。
2.中文分词
分词是中文搜索特有的步骤。搜索引擎存储和处理页面内容及用户查询都是以词为基础的。英文等语言在单词与单词之间有空格作为天然分隔,搜索引擎索引程序可以直接把句子划分为单词的集合。而中文在词与词之间没有任何分隔符,一个句子中所有的字和词都是连在一起的。搜索引擎必须首先分辨哪几个字组成一个词,哪些字本身就是一个词。比如“减肥方法”就将被分词为“减肥”和“方法”两个词。
中文分词方法基本上有两种:一种是基于词典匹配,另一种是基于统计。
基于词典匹配的方法是指将待分析的一段汉字串与一个事先造好的词典中的词条进行匹配,在待分析汉字串中扫描到词典中已有的词条则匹配成功,或者说切分出一个单词。
按照扫描方向,基于词典的匹配法可以分为正向匹配和逆向匹配。按照匹配长度优先级的不同,又可以分为最大匹配和最小匹配。将扫描方向和长度优先混合,又可以产生正向最大匹配、逆向最大匹配等不同方法。
词典匹配方法计算简单,其准确度在很大程度上取决于词典的完整性和更新情况。
基于统计的分词方法指的是通过分析大量文字样本,计算出字与字相邻出现的统计概率,几个字相邻出现的次数越多,就越可能被确定为一个单词。基于统计的方法的优势是对新出现的词反应更快速,也有利于消除歧义。
基于词典匹配和基于统计的分词方法各有优劣,实际使用中的分词系统都是混合使用两种方法的,既快速高效,又能识别生词、新词,消除歧义。
中文分词的准确性往往会影响搜索引擎排名的相关性。搜索引擎对页面的分词情况取决于词库的规模、准确性和分词算法的好坏,而不是取决于页面本身如何,所以SEO人员对分词所能做的工作很少。唯一能做的是在页面上用某种形式提示搜索引擎,某几个字应该被当作一个词来处理,尤其是可能产生歧义的时候,比如在页面标题、H1标签及黑体中出现关键词。如果页面是关于“和服”的内容,那么可以把“和服”这两个字特意标为黑体。如果页面是关于“化妆和服装”,可以把“服装”两个字标为黑体。这样,搜索引擎对页面进行分析时就知道标为黑体的几个相邻字应该是一个词。
3.去停止词
无论是英文还是中文,页面内容中都会有一些出现频率很高,却对内容没有实质影响的词,如“的”“地”“得”之类的助词,“啊”“哈”“呀”之类的感叹词,“从而”“以”“却”之类的副词或介词。这些词被称为停止词,因为它们对页面的主要意思没什么影响。英文中的常见停止词有the、a、an、to、of等。
搜索引擎在索引页面内容之前会去掉这些停止词,使索引数据主题更为突出,减少无谓的计算量。
4.消除噪声
绝大部分页面上还有一部分对页面主题没有什么贡献的内容,比如版权声明文字、导航内容、广告等。以常见的博客导航为例,几乎每个博客页面上都会出现文章分类、历史存档等导航内容,但是这些页面本身与“分类”“历史”这些词没有任何关系。用户搜索“历史”“分类”这些关键词时,仅因为页面上有这些词出现,就返回博客帖子,这种行为是毫无意义的,因为这些词与页面主题完全不相关。这些内容都属于噪声,对页面主题只能起到分散作用。
搜索引擎需要识别并消除这些噪声,排名时不使用噪声内容。消噪的基本方法是根据HTML标签对页面分块,区分出页头、导航、正文、页脚、广告等区域,在网站上大量重复出现的区块往往属于噪声。对页面进行消噪后,剩下的才是页面主体内容。
5.去重
搜索引擎还需要对页面进行去重处理。
同一篇文章经常会重复出现在不同网站或同一网站的不同网址上,搜索引擎并不喜欢这种重复性的内容。用户在搜索时,如果在前两页看到的都是来自不同网站的同一篇文章,那么用户体验就太差了。搜索引擎希望相同的文章只出现一篇,所以在进行索引前还需要识别和删除重复内容,这个过程称为“去重”。
去重的基本方法是对页面特征关键词计算指纹。典型的指纹计算方法如MD5算法(信息摘要算法第5版)。这类指纹算法的特点是,输入有任何微小的变化,都会导致计算出的指纹有很大差距。
6.正向索引
正向索引也可以简称为索引。
经过文字提取、分词、消噪、去重后,搜索引擎得到的就是独特的、能反映页面主体内容的、以词为单位的字符串。接下来搜索引擎索引程序就可以提取关键词,把页面转换为一个由关键词组成的集合,同时记录每一个关键词在页面上出现的频率、次数、格式(如出现在标题标签、黑体、H标签、锚文字等)、位置等信息。这样,每一个页面都可以记录为一串关键词集合,其中每个关键词的词频、格式、位置等权重信息也都被记录在案。
搜索引擎索引程序将页面和关键词形成的词表结构存储进索引库。简化的索引词表结构如表2-1所示。
表2-1 简化的索引词表结构
每个文件都对应一个文件ID,文件内容被表示为一串关键词的集合。实际上,在搜索引擎索引库中,关键词也已经转换为关键词ID。这样的数据结构就称为正向索引。
7.倒排索引
正向索引还不能直接用于排名。假设用户搜索关键词2,如果只存在正向索引,那么排名程序就需要扫描所有索引库中的文件,找出包含关键词2的文件,再进行相关性计算。这样的计算量无法满足实时返回排名结果的要求,所以搜索引擎会将正向索引数据库重新构造为倒排索引,把文件对应到关键词的映射转换为关键词到文件的映射,倒排索引结构如表2-2所示。
表2-2 倒排索引结构
在倒排索引中,关键词是主键,每个关键词都对应着一系列文件,这些文件中都出现了这个关键词。这样当用户搜索某个关键词时,排序程序就可以在倒排索引中定位到这个关键词,马上找出所有包含这个关键词的文件。
8.链接关系计算
链接关系计算也是预处理中很重要的一部分。现在所有的主流搜索引擎排名因素中都包含网页之间的链接流动信息。搜索引擎在抓取页面内容后,必须事前计算出页面上有哪些链接指向哪些其他页面,每个页面有哪些导入链接,链接使用了什么锚文字。这些复杂的链接指向关系形成了网站和页面的链接权重。
Google PR值就是这种链接关系最主要的体现之一。其他搜索引擎也都进行类似计算,虽然它们并不称为PR值。
由于页面和链接数量巨大,网上的链接关系又时时处在更新状态,因此链接关系及PR值的计算要耗费很长时间。关于PR值和链接分析,后面将有专门的章节进行介绍。
9.特殊文件处理
除了HTML文件,搜索引擎通常还能抓取和索引以文字为基础的多种文件类型,如PDF、Word、WPS、XLS、PPT、TXT文件等。我们在搜索结果中也经常会看到这些文件类型。但目前的搜索引擎对图片、视频、脚本和程序等非文字内容只能进行有限的处理。
虽然搜索引擎在识别图片内容方面有些进步,不过距离直接靠读取图片、视频内容返回结果的目标还很远。对图片、视频内容的排名往往还是依据与之相关的文字内容来进行的,详细情况可以参考第2.6节中关于整合搜索的描述。
曾经很热门的Flash已经被Adobe停止支持,百度、Google也都不再读取Flash文件了。
10.质量判断
在预处理阶段,搜索引擎会对页面内容质量、链接质量等做出判断。近两年的百度的绿萝算法、石榴算法,Google的熊猫算法、企鹅算法等都是预先计算,然后上线,而不是查询时实时计算。
这里所说的质量判断包含很多因素,并不局限于针对关键词的提取和计算,或者针对链接进行数值计算。比如对页面内容的判断,很可能包括了用户体验、页面排版、广告布局、语法、页面打开速度等,也可能会涉及模式识别、机器学习、人工智能等方法。