01布爾模型&倒排索引

原文連接: http://www.cnblogs.com/jacklu/p/8379726.htmlhtml

博士一年級選了這門課 SEEM 5680 Text Mining Models and Applications,記下來以便之後查閱。算法

1. 信息檢索的布爾模型

用0和1表示某個詞是否出如今文檔中。以下圖例子,要回答「Brutus AND Caesar but NOT Calpurnia」,咱們須要對詞的向量作布爾運算,即110100 AND 110111 AND 101111=100100 對應的文檔是Antony and Cleopatra和Hamletspa

然而這種方法隨着數據的增大是很是耗費空間的。好比咱們有100萬個文檔,每一個文檔平均有1000字,總共有50萬個不一樣的詞語,那麼矩陣將是500 000 x 1 000 000。這個矩陣是稀疏的,1的個數通常不會超過1億個。3d

2. 倒排索引

倒排索引是爲了解決上述布爾模型的問題。具體來講,每一個詞用鏈表順序存儲文檔編號。以下圖所示:指針

創建索引的核心是將詞按字母順序排列,合併重複詞,可是要記錄詞頻。code

3. 倒排索引模型中對查詢語句(AND)的處理

一、求Brutus AND Calpurnia,即求兩個鏈表的交集。htm

算法思路是若是文檔號不一樣就移動較小的指針,僞代碼 INTERSECTION(p1, p2):blog

answer<-()
while p1 != NIL and p2 != NIL
do if docID(p1) = docID(p2)
     then ADD(answer, docID(p1))
         p1 <-next(p1)
         p2 <-next(p2)
     else if docID(p1) < docID(p2)
         p1 <-next(p1)
     else p2<-next(p2)
return answer

思考題,有兩個詞項A,B,其文檔編號鏈表長度分別爲3和5,那麼對A,B求交集,最少的訪問次數和最多的訪問次數分別是多少?各舉一個例子索引

最少訪問次數是4,好比A:1-2-3,B:3-4-5-6-7;最多訪問次數是8,好比A:1-7-8, B:3-4-5-7-9文檔

二、思考題:求Brutus OR Calpurnia,即求兩個鏈表的並集。僞代碼 UNION(p1,p2):

answer<-()
while p1 != NIL and p2 != NIL
do if docID(p1) = docID(p2)
    then ADD(answer, docID(p1))
        p1 <-next(p1)
        p2 <-next(p2)
    else if docID(p1) < docID(p2)
    then ADD(answer, docID(p1))
        p1<-next(p1)
    else ADD(answer, docID(p2))
        p2<-next(p2)
return answer

三、思考題:求Brutus AND NOT Calpurnia。僞代碼 INTERSECTION(p1,p2, AND NOT):

answer<-()
while p1 != NIL and p2 != NIL
do if docID(p1) = docID(p2)
        p1 <-next(p1)
        p2 <-next(p2)
    else if docID(p1) < docID(p2)
    then ADD(answer, docID(p1))
        p1<-next(p1)
    else p2<-next(p2)
    
    if p1 != NIL and P2 = NIL
    then ADD(answer, docID(p1))
        p1<-next(p1)
return answer

 

參考資料:http://www1.se.cuhk.edu.hk/~seem5680/

相關文章
相關標籤/搜索