李秋錦 山東科技大學(xué) 山東省 濟(jì)南市 250000
在大量的非結(jié)構(gòu)化文檔集合當(dāng)中搜集與期望內(nèi)容相關(guān)的信息的過(guò)程就是信息檢索。與數(shù)據(jù)庫(kù)等軟件的查詢(xún)不同,數(shù)據(jù)庫(kù)中的表格等是結(jié)構(gòu)化的數(shù)據(jù),根據(jù)列名,關(guān)鍵字等等即可編寫(xiě)查詢(xún)語(yǔ)句,實(shí)現(xiàn)搜索的過(guò)程。而所謂的信息檢索則是主要針對(duì)于非結(jié)構(gòu)化的數(shù)據(jù),一般指形如文章,歌詞等的自由文本。沒(méi)有特定的結(jié)構(gòu)化模式,而是由各種字符自由組合而形成的信息文本。我們所使用的搜索引擎一般都是基于信息檢索開(kāi)發(fā)實(shí)現(xiàn)的。與傳統(tǒng)信息檢索不同的是,現(xiàn)代的信息檢索技術(shù)也能夠處理結(jié)構(gòu)化信息。
在信息檢索之前首要工作是建立索引文件,建立索引前還需將單詞標(biāo)準(zhǔn)化,如英文單詞中的大寫(xiě)字母統(tǒng)一為小寫(xiě),在進(jìn)行檢索時(shí),針對(duì)大小寫(xiě)處理方法相同。在索引文件的基礎(chǔ)上再采取不同的方式對(duì)索引加以處理,完成檢索過(guò)程。
給出搜索詞及多個(gè)文檔,以傳統(tǒng)思想進(jìn)行思考,要得到索引文件,最直接的方即為枚舉法,對(duì)每個(gè)文檔進(jìn)行遍歷只對(duì)文檔中是否存在某一詞項(xiàng)進(jìn)行判斷,建立矩陣,以詞項(xiàng)為行,以文檔為列,記錄結(jié)果。若存在記為“1”,不存在記為“0”。
但詞項(xiàng)——文檔矩陣的不足之處也是顯而易見(jiàn)的,當(dāng)遍歷文檔集規(guī)模過(guò)于龐大時(shí),建立的矩陣可能已經(jīng)超過(guò)所能承載的極限,這種方式顯然已經(jīng)不合適再進(jìn)行下一步的檢索。
那么當(dāng)解決大容量文檔集時(shí),需要用到的是倒排索引。提取文檔集中的所有詞項(xiàng),以可變長(zhǎng)順序表存儲(chǔ)每個(gè)詞項(xiàng)的倒排記錄,其中依次存儲(chǔ)詞項(xiàng)出項(xiàng)的文檔數(shù)和包含該詞項(xiàng)的文檔標(biāo)號(hào)。以四個(gè)文檔為例,利用python語(yǔ)言編寫(xiě)程序生成倒排索引,具體代碼如下:
該例的運(yùn)行結(jié)果如下圖1,詞項(xiàng)的倒排記錄存儲(chǔ)在字典當(dāng)中。
圖1
在倒排索引的基礎(chǔ)上,進(jìn)一步改進(jìn)。倒排索引只能描述包含詞項(xiàng)的文檔,但忽略一個(gè)文檔中該詞的出現(xiàn)次數(shù),這樣檢索出的結(jié)果容易出現(xiàn)誤差。為解決這一問(wèn)題,可使用位置索引,在指出文檔標(biāo)號(hào)的基礎(chǔ)上,更進(jìn)一步的定位到該文檔內(nèi)詞項(xiàng)所處的位置。仍以上述例子,編寫(xiě)程序生成位置索引,具體代碼如下:
該例運(yùn)行結(jié)果如圖2所示,以字典嵌套的方式表示索引。
圖2
建立索引后,對(duì)索引記錄進(jìn)行處理。布爾檢索就是根據(jù)查詢(xún)條件對(duì)詞項(xiàng)的索引表求其交集,并集,或補(bǔ)集的過(guò)程。這里以AND查詢(xún)和倒排索引為例,展示python語(yǔ)言中兩個(gè)索引記錄的合并過(guò)程。指針?lè)謩e指向兩個(gè)索引記錄的第一個(gè)位置,比較其數(shù)值,若相等則記錄下來(lái),兩個(gè)指針同時(shí)指向下一位置;若不相等,數(shù)值小的一行,指針向后移動(dòng)一個(gè)位置,再進(jìn)行比較,直至有一個(gè)指針到達(dá)記錄尾部,停止比較。得出合并結(jié)果。調(diào)用query()方法,參數(shù)為需要合并的兩個(gè)詞項(xiàng)。其結(jié)果顯示為同時(shí)包含這兩個(gè)詞項(xiàng)的文檔。
布爾檢索的結(jié)果集是所有含有查詢(xún)語(yǔ)句的文檔的集合,但搜索時(shí),有許多文檔與查詢(xún)的語(yǔ)句的實(shí)際關(guān)聯(lián)度并不。所以需要對(duì)查詢(xún)的結(jié)果集進(jìn)行排序,而排序的標(biāo)準(zhǔn)則通過(guò)對(duì)文檔評(píng)分實(shí)現(xiàn)。評(píng)分的方法也有很多,可以對(duì)文檔詞項(xiàng)進(jìn)行權(quán)重計(jì)算,其權(quán)重值與某個(gè)詞項(xiàng)出現(xiàn)的頻率有關(guān)。權(quán)重的計(jì)算需要兩個(gè)值,tf為某一詞項(xiàng)在某一文檔中出現(xiàn)的次數(shù),這個(gè)參數(shù)對(duì)于任一詞項(xiàng)在不同文檔中的值不同。df為在文檔集合中包含有該詞項(xiàng)的文檔數(shù)量,不考慮其出現(xiàn)頻率,對(duì)于依次權(quán)重的計(jì)算,d某一詞項(xiàng)的df值不會(huì)發(fā)生改變。當(dāng)文檔集或頻率數(shù)值過(guò)大時(shí),不易進(jìn)行計(jì)算,故將兩個(gè)參數(shù)都進(jìn)行標(biāo)準(zhǔn)化處理。tf取其以10為低的對(duì)數(shù)值加1,df則取其逆文檔頻率,即取倒數(shù),并乘上一固定數(shù)值后取對(duì)數(shù)值。對(duì)于一個(gè)文檔的權(quán)重計(jì)算,查詢(xún)語(yǔ)句中的各個(gè)詞項(xiàng)在該文檔的tf值與對(duì)應(yīng)詞項(xiàng)在整個(gè)文檔集中的df取值的乘積之和即為一個(gè)文檔的權(quán)重值。得出所有文檔的權(quán)重值后便可以進(jìn)行排序。搜索引擎中的搜索結(jié)果一般只顯示權(quán)重值排序中的前若干位。所得結(jié)果為各個(gè)文檔的權(quán)重矩陣
信息檢索在實(shí)際生活中應(yīng)用廣泛,現(xiàn)代信息檢索技術(shù)也在飛速發(fā)展當(dāng)中。從構(gòu)建索引,詞項(xiàng)查詢(xún),結(jié)果排序都有對(duì)應(yīng)的方法實(shí)現(xiàn),本文主要以python語(yǔ)言為例,編寫(xiě)程序,描述信息檢索的過(guò)程。各種方法的應(yīng)用都可以推廣至更深層次的應(yīng)用當(dāng)中。