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