倒排索引C 實現

2021-10-07 02:54:57 字數 1653 閱讀 1135

以字或者詞為關鍵字進行索引

正排索引是從文件到關鍵字的對映,已知文件求關鍵字。倒排索引是從關鍵字到文件的對映,已知關鍵字求文件。

使用了倒排,當然具體的實現會更加複雜,這裡只是簡單實現倒排索引(inverted index)。

具體主要做了,把多個文件中的單詞切出來(為了簡單起見直接空格分開單詞),然後建立如上圖所示的資料結構,每個單詞後面掛上一串文件。

這樣使用者輸入乙個單詞,我們就能找到這個有哪些文件**現過這個單詞(為了簡單起見,沒有存單詞在文件中具體的位置)

如何查詢使用者輸入的單詞,即單詞庫用什麼儲存,這裡用了字典樹。

#include #include #include #include #include const std::string _chars = "abcdefghijklmnopqrstuvwxyz0123456789.:-_/";

const size_t max_nodes = 41;

class node

node(char z)

~node()

}void clear()

}bool isword; // 是否是乙個單詞

std::vectorfiles; // 檔案列表

node *next[max_nodes]; // 字典樹

};class index

}if (h.length())

}void findword(std::string s)

std::cout << s << " found in:\n";

for (std::vector::iterator i = v.begin(); i != v.end(); i++)

std::cout << "\n";

}private:

node root;

/*對輸入的字串s,遍歷root下的字典樹,並將該單詞最後乙個字元的位置設定isword。

返回最後乙個字元的指標。

*/node *addword(std::string s)

n = new node(*i);

rt->next[idx] = n;

rt = n;}}

rt->isword = true;

return rt;}/*

在單詞的字典樹末尾節點下插入文件的名字。

*/void pushfilename(node *n, std::string fn)

const std::vector&find(std::string s)

}if (rt->isword)

return rt->files;

return std::vector();

}};int main(int argc, char *ar**)

; for (int x = 0; x < 3; x++)

f.close();}}

while (true)

return 0;

}

本文由部落格**一文多發等運營工具平台 openwrite 發布

倒排索引C 實現

file3 單詞1,單詞a,單詞3,單詞d.那麼建立的倒排索引就是這個樣子 單詞1 file1,file3 單詞2 file1 單詞3 file1,file3 單詞a file2,file3 下面是我對於倒排索引的乙個簡單的實現。該程式實現了某目錄下的檔案單詞統計,並建立了倒排索引。標頭檔案 inv...

實現倒排索引

倒排索引就是反向索引,一般索引指的是根據記錄位置來查詢值,而倒排索引的原理是 根據屬性的值來查詢記錄位置。比如說,現在有這些文章以及文章中含有的單詞。以英文為例,下面是要被索引的文字 文字0 it is what it is 文字1 what is it 文字2 it is a banana 我們就...

MapReduce倒排索引簡單實現

倒排索引 倒排索引是文件檢索系統中最常用的資料結構,被廣泛的應用於全文搜尋引擎。它主要用來儲存某個單詞 或片語 在乙個文件或一組文件中的儲存位置的對映,即提供了一種根據內容來查詢文件的方式,由於不是根據文件來確定文件所包含的內容,而是進行了相反的操作,因而被稱為倒排索引。例如 input 輸入有三個...