上一篇我們簡單了解了索引是啥,為什么要創建索引以及索引里面存些什么,現在我們來看看如何去創建一個索引。
全文檢索庫的索引創建過程一般都是分為以下幾個步驟:
First:一些要索引的原文檔
我們使用以下兩個文件來創建一個簡單地索引,讓大家可以清晰、直觀地了解索引的創建過程;
文件①:Students should be allowed to go out with their friends, but not allowed to drink beer.
文件②:My friend Jerry wen to school to see his students but found them drunk which is not allowed.
Second:將原文檔傳遞給分詞組件(Tokenizer)
分詞組件會對原文檔進行以下幾個操作,這些操作合稱為Tokenize:
將文檔分解為一個個獨立的單詞;
去掉標點符號;
去掉停詞;
其中“停詞”,也就是Stop Word,指代最常用、最普通的一些單詞,因為出現的頻次太多,并且沒有什么特別的含義,所以一般情況下不會成為搜索的關鍵詞,因此在創建索引的過程中需要過濾剔除掉這些詞,以此來精簡索引的存儲空間。
比如英文中的停詞為:“the”,“a”,“this”等。
一般情況下分詞組件都會有針對不同語言的停詞集合。
經過分詞之后,文檔會成為詞元,即Token。
文件①和文件②經過分詞之后,得到以下詞元:
"Students","allowed","go","their","friends","allowed","drink","beer","My","firend","Jerry","went","school","see","his","students","found","them","drunk","allowed"。
Third:將分詞處理后得到的詞元傳遞給語言處理組件
相信大家看到上面得到詞元之后一定會發現,這些詞元中有許多單詞是同一個詞的不同狀態,語言處理組件(Linguistic PRocessor)主要就是對得到的詞元進行一些語言上的處理,使得詞元中一些重復與無用的詞進一步減少。
變為小寫;
將單詞縮減為詞根,如將“students”轉為“student”,這個操作被稱為:Stemming;
將單詞轉變為詞根,如將“drunk”換變為“drink”,這個操作被稱為:Lemmatization。
其中,Stemming和Lemmatization有一些相同與不同之處:
相同:Stemming和Lemmatization都要詞匯變為詞根形式;
不同:
Stemming采用的是“縮減”方式,它有一套固定的算法來做縮減,如去掉“s”,去掉“ing”變為“e”;
Lemmatization采用的是轉變方式,它是主要采用保存某種詞典的方式來進行轉變的,比如字典中有“drunk”到“drink”的映射,則在做轉變是,只要對照詞典就可以了。
Stemming和Lemmatization不是互斥的關系,它們之間也有交集,有些詞可以通過兩種方式都能實現轉換的目的。
上文的詞元經過語言處理之后得到以下的詞:
"student","allow","go","their","friend","allow","drink","beer","my","friend","jerry","go","school","see","his","student","find","them","drink","allow"。
由于有了語言處理組件,我們在搜drunk時,drink也能被搜索到。
Fourth:將處理后的詞傳遞給索引組件
索引組件(Indexer)使用得到的詞進行創建詞典,排序與合并,最終生成一個文檔倒排鏈表。
1. 利用語言處理組件傳遞過來的詞創建詞典:
詞典
2. 對詞典按字母進行排序:
排序后詞典
3. 合并相同的詞成為文檔倒排鏈表。
文檔倒排鏈表
在此倒排鏈表中,有這樣幾個定義:
Document Frequency 即文檔頻次,表示總共有多少文檔包含詞A。
Frequency 即詞頻率,表示文件B中包含了幾個詞A。
所以對詞"allow"來說,總共有兩篇文檔包含了它,從而詞"allow"后面的文檔鏈接一共有兩項,第一項表示包含"allow"的第一篇文檔,即①號文檔,此文檔中,"allow"出現了2次,第二項表示包含"allow"的第二個文檔,是②號文檔,此文檔中"allow"出現了1次。
到這里,索引已經創建好了,我們可以通過它很快地找到我們想要的文檔。
而且在此過程中,我們驚喜地發現,我們搜索“driven”,“driving”,"drove"都可以找到,因為在我們輸入這些詞進入系統之后,這些關鍵詞也會經過語言處理組件的處理,最終成為“dirve”,從而可以搜索到我們想要的文檔。
現在我們已經了解了索引的創建過程,下一篇我們將進一步了解搜索引擎是如何利用我們創建好的索引來進行搜索的。
新聞熱點
疑難解答