在一些搜索引擎優化材料中,“預處理”也被簡稱為“索引”,因為索引是預處理最主要的內容。
搜索引擎蜘蛛抓取的原始頁面,并不能直接用于查詢排名處理。搜索引擎數據庫中的頁面數量都在數萬億級別以上,用戶輸入搜索詞后,若靠排名程序實時分析這么多頁面的相關性,計算量太大,不可能在一秒內返回排名結果。因此抓取來的頁面必須先經過預處理,為最后的查詢排名做好準備。
和爬行抓取一樣,預處理也是在后臺提前完成的,用戶在搜索時察覺不到這個過程。
1.提取文字
現在的搜索引擎還是以文字內容為基礎的。蜘蛛抓取到的頁面HTML代碼,除了用戶在瀏覽器上可以看到的可見文字,還包含了大量的HTML格式標簽、JavaScript程序等無法用于排名的內容。搜索引擎在預處理時,首先要做的就是從HTML代碼中去除標簽、程序,并提取出可以用于排名處理的頁面文字內容。
比如下面這段HTML代碼:
<div id=”post-1100” class=”post-1100 post hentry category-seo”>
<diV class=”posttitle”>
<h2><a href=”https://www.seozac.com/seo/fools-day/”
rel=”bookmark” title=”permanent link to 今天愚人節哈“>今天愚人節哈<a></h2>
除去HTML代碼后,用于排名的文字只剩下這一行:今天愚人節哈
除了可見的文字內容,搜索引擎也會提取出一些包含文字信息的特殊代碼,如Meta標簽中的文字、圖片替代文字、鏈接錨文字等。
2.中文分詞
分詞是中文搜索特有的步驟。搜索引擎存儲和處理頁面內容及用戶查詢都是以詞為基礎的。英文等語言在單詞與單詞之間有空格作為天然分隔,搜索引擎索引程序可以直接把句子劃分為單詞的集合。而中文在詞與詞之間沒有任何分隔符,一個句子中所有的字和詞都是連在一起的。搜索引擎必須首先分辨哪幾個字組成一個詞,哪些字本身就是一個詞。比如“減肥方法”就將被分詞為“減肥”和“方法”兩個詞。
中文分詞方法基本上有兩種:一種是基于詞典匹配,另一種是基于統計。
基于詞典匹配的方法是指將待分析的一段漢字串與一個事先造好的詞典中的詞條進行匹配,在待分析漢字串中掃描到詞典中已有的詞條則匹配成功,或者說切分出一個單詞。
按照掃描方向,基于詞典的匹配法可以分為正向匹配和逆向匹配。按照匹配長度優先級的不同,又可以分為最大匹配和最小匹配。將掃描方向和長度優先混合,又可以產生正向最大匹配、逆向最大匹配等不同方法。
詞典匹配方法計算簡單,其準確度在很大程度上取決于詞典的完整性和更新情況。
基于統計的分詞方法指的是通過分析大量文字樣本,計算出字與字相鄰出現的統計概率,幾個字相鄰出現的次數越多,就越可能被確定為一個單詞。基于統計的方法的優勢是對新出現的詞反應更快速,也有利于消除歧義。
基于詞典匹配和基于統計的分詞方法各有優劣,實際使用中的分詞系統都是混合使用兩種方法的,既快速高效,又能識別生詞、新詞,消除歧義。
中文分詞的準確性往往會影響搜索引擎排名的相關性。搜索引擎對頁面的分詞情況取決于詞庫的規模、準確性和分詞算法的好壞,而不是取決于頁面本身如何,所以搜索引擎優化人員對分詞所能做的工作很少。唯一能做的是在頁面上用某種形式提示搜索引擎,某幾個字應該被當作一個詞來處理,尤其是可能產生歧義的時候,比如在頁面標題、H1標簽及黑體中出現關鍵詞。如果頁面是關于“和服”的內容,那么可以把“和服”這兩個字特意標為黑體。如果頁面是關于“化妝和服裝”,可以把“服裝”兩個字標為黑體。這樣,搜索引擎對頁面進行分析時就知道標為黑體的幾個相鄰字應該是一個詞。
3.去停止詞
無論是英文還是中文,頁面內容中都會有一些出現頻率很高,卻對內容沒有實質影響的詞,如“的”“地”“得”之類的助詞,“啊”“哈”“呀”之類的感嘆詞,“從而”“以‘“卻”之類的副詞或介詞。這些詞被稱為停止詞,因為它們對頁面的主要意思沒什么影響。英文中的常見停止詞有the、a、an、to、of等。
搜索引擎在索引頁面內容之前會去掉這些停止詞,使索引數據主題更為突出,減少無謂的計算量。
4.消除噪聲
絕大部分頁面上還有一部分對頁面主題沒有什么貢獻的內容,比如版權聲明文字、導航內容、廣告等。以常見的博客導航為例,幾乎每個博客頁面上都會出現文章分類、歷史存檔等導航內容,但是這些頁面本身與“分類”“歷史”這些詞沒有任何關系。用戶搜索“歷史”“分類”這些關鍵詞時,僅因為頁面上有這些詞出現,就返回博客帖子,這種行為是毫無意義的,因為這些詞與頁面主題完全不相關。這些內容都屬于噪聲,對頁面主題只能起到分散作用。
搜索引擎需要識別并消除這些噪聲,排名時不使用噪聲內容。消噪的基本方法是根據HTML標簽對頁面分塊,區分出頁頭、導航、正文、頁腳、廣告等區域,在網站上大量重復出現的區塊往往屬于噪聲。對頁面進行消噪后,剩下的才是頁面主體內容。
5.去重
搜索引擎還需要對頁面進行去重處理。
同一篇文章經常會重復出現在不同網站或同一網站的不同網址上,搜索引擎并不喜歡這種重復性的內容。用戶在搜索時,如果在前兩頁看到的都是來自不同網站的同一篇文章,那么用戶體驗就太差了。搜索引擎希望相同的文章只出現一篇,所以在進行索引前還需要識別和刪除重復內容,這個過程稱為“去重”。
去重的基本方法是對頁面特征關鍵詞計算指紋。典型的指紋計算方法如MD5算法。這類指紋算法的特點是,輸入有任何微小的變化,都會導致計算出的指紋有很大差距。
6.正向索引
正向索引也可以簡稱為索引。
經過文字提取、分詞、消噪、去重后,搜索引擎得到的就是獨特的、能反映頁面主體內容的、以詞為單位的字符串。接下來搜索引擎索引程序就可以提取關鍵詞,把頁面轉換為一個由關鍵詞組成的集合,同時記錄每一個關鍵詞在頁面上出現的頻率、次數、格式(如出現在標題標簽、黑體、H標簽、錨文字等)、位置等信息。這樣,每一個頁面都可以記錄為一串關鍵詞集合,其中每個關鍵詞的詞頻、格式、位置等權重信息也都被記錄在案。
搜索引擎索引程序將頁面和關鍵詞形成的詞表結構存儲進索引庫。簡化的索引詞表結構如表2-1所示。
表2-1 簡化的索引詞表結構

每個文件都對應一個文件ID,文件內容被表示為一串關鍵詞的集合。實際上,在搜索引擎索引庫中,關鍵詞也已經轉換為關鍵詞ID。這樣的數據結構就稱為正向索引。
7.倒排索引
正向索引還不能直接用于排名。假設用戶搜索關鍵詞2,如果只存在正向索引,那么排名程序就需要掃描所有索引庫中的文件,找出包含關鍵詞2的文件,再進行相關性計算。這樣的計算量無法滿足實時返回排名結果的要求,所以搜索引擎會將正向索引數據庫重新構造為倒排索引,把文件對應到關鍵詞的映射轉換為關鍵詞到文件的映射,倒排索引結構如表2-2所示。
表2-2 倒排索引結構

在倒排索引中,關鍵詞是主鍵,每個關鍵詞都對應著一系列文件,這些文件中都出現了這個關鍵詞。這樣當用戶搜索某個關鍵詞時,排序程序就可以在倒排索引中定位到這個關鍵詞,馬上找出所有包含這個關鍵詞的文件。
8.鏈接關系計算
鏈接關系計算也是預處理中很重要的一部分。現在所有的主流搜索引擎排名因素中都包含網頁之間的鏈接流動信息。搜索引擎在抓取頁面內容后,必須事前計算出頁面上有哪些鏈接指向哪些其他頁面,每個頁面有哪些導入鏈接,鏈接使用了什么錨文字。這些復雜的鏈接指向關系形成了網站和頁面的鏈接權重。
Google PR值就是這種鏈接關系最主要的體現之一。其他搜索引擎也都進行類似計算,雖然它們并不稱為PR值。
由于頁面和鏈接數量巨大,網上的鏈接關系又時時處在更新狀態,因此鏈接關系及PR值的計算要耗費很長時間。
9.特殊文件處理
除了HTML文件,搜索引擎通常還能抓取和索引以文字為基礎的多種文件類型,如PDF、Word、WPS、XLS、PPT、TXT文件等。我們在搜索結果中也經常會看到這些文件類型。但目前的搜索引擎對圖片、視頻、腳本和程序等非文字內容只能進行有限的處理。
雖然搜索引擎在識別圖片內容方面有些進步,不過距離直接靠讀取圖片、視頻內容返回結果的目標還很遠。對圖片、視頻內容的排名往往還是依據與之相關的文字內容來進行的。
曾經很熱門的Flash已經被Adobe停止支持,百度、Google也都不再讀取Flash文件了。
10.質量判斷
在預處理階段,搜索引擎會對頁面內容質量、鏈接質量等做出判斷。近兩年的百度的綠蘿算法、石榴算法,Google的熊貓算法、企鵝算法等都是預先計算,然后上線,而不是查詢時實時計算。
這里所說的質量判斷包含很多因素,并不局限于針對關鍵詞的提取和計算,或者針對鏈接進行數值計算。比如對頁面內容的判斷,很可能包括了用戶體驗、頁面排版、廣告布局、語法、頁面打開速度等,也可能會涉及模式識別、機器學習、人工智能等方法。