基於boost庫的搜尋引擎專案

2021-09-25 11:00:40 字數 1520 閱讀 2396

功能

模組化介紹

一:資料處理模組詳解

拿到boost 文件後,我們發現這些文件中,包含了 html 檔案、檔案還有一些目錄。而我們要做的是保留 html 文件,去掉其他的所有檔案。

拿到這些文件路徑後,開啟檔案,讀取檔案內容,對html 文件進行解析,分別解析出標題、正文、url。

正文:除了標籤之外的東西,都是正文。

url:boost 官網url 前面部分+我的檔案路徑的一部分即可。

將解析好的標題、正文、url 輸出到乙個行文字檔案中,這個檔案每一行對應乙個html 文件,中間使用特殊字元當做分隔符進行分割。分隔符必須是正文標題url 不會出現的字元,於是我選擇了ascii 中的已經被棄用的字元 『\3』 。

至此,資料處理模組結束

二:索引模組詳解

構造乙個結構體 docinfo,這個結構體中有 文件編號、文件的標題、正文、url。

構造乙個機構體 weight,這個結構體中有 給定詞、文件編號、詞的權重。

構建正排索引的容器是vector,vector裡面是 docinfo 結構體,使用下標作為文件的i編號id。

構建倒排索引的容器是 unordered_map,其中 k 是給定詞(string),v是vector 中套乙個weight結構體;因為乙個詞可能會出現在多個文件中。

拿到行文字中的每一行,進行切分,放到我正排索引的容器 vector 中。在切分的字串時,用到boost庫中split 函式。

將每一行切分出來的標題和正文進行分詞,(使用 jieba 分詞第三方庫),將分詞結果儲存在 vector< string> 中。

對docinfo 中的標題和正文進行詞頻統計,當前詞在標題**現幾次,在正文**現幾次,定義乙個 unordered_map ,k 是給定詞,v 是wordcnt 結構體,結構體裡面有標題的詞頻和正文的詞頻。

將分詞結果放到我構建的倒排索引的容器 unordered_map 中。

搜尋模組詳解介紹

對查詢詞進行分詞

針對每個分詞結果查詢倒排索引,找出那些文件具有相關性。

按照詞出現的頻率進行降序排序

構建返回結果:根據得到的id 列表,查詢正排索引得到搜尋結果。

至此,搜尋引擎所有的功能已完成,現在需要搭載在http 伺服器上,進行服務端和客戶端的互動。

http 模組

整個專案到這裡就完了,後期還會更新。

搜尋引擎專案

server端 linux centos6.0 g version 4.4 client端 p hpsrc 存放系統的原始檔 cpp include 存放系統的標頭檔案 h bin 存放系統的可執行程式。conf 存放系統程式中所需的相關配置資訊。lib 存放系統程式中所使用的庫檔案。data 存放...

搜尋引擎專案

1.基本思路 2.模組劃分 整體分為4個模組 3.核心流程 http伺服器獲取使用者的請求並處理,將資料傳給cgi程式。cgi程式提取資料獲取有用的資訊 query 提交到搜尋伺服器端 搜尋伺服器端處理資訊進行檢索操作,把結果反饋給cgi程式 cgi程式將檢索結果進行html格式化後,傳送給http...

基於Flask的搜尋引擎

由於需要課設,所以臨時做了乙個搜尋引擎的小demo,很簡陋的乙個程式。原理呼叫其他搜尋引擎的api 完成索引,網頁爬去,跳轉。flask 爬蟲 即可 索引模組 from flask import flask from flask import render template from flask i...