1 系統介紹
1.1 系統需求
新聞檢索系統:定向采集不少於 4 個中文社會新聞網站或頻道,實現這些網站新聞信息及評論信息的自動爬取、抽取、索引和檢索。本項目未使用 lucene,Goose 等成熟開源框架。
1.2 系統思路與框架
本系統總體的實現思路如圖 1 所示:
壹個完整的搜索系統主要的步驟是:
對新聞網頁進行爬蟲得到語料庫
抽取新聞的主體內容,得到結構化的 xml 數據
內存式單遍掃描索引構建方法構建倒排索引,供檢索模塊使用
用戶輸入查詢,得到相關文檔返回給用戶
2 設計方案
2.1 新聞爬取
2.1.1 算法簡述
該模塊針對搜狐,網易,騰訊三大主流新聞網站及官方的參考消息網站進行了新聞獲取。並基於其網站結構,設計了不同的爬取模式。由於網站架構兩兩相似,以下選取兩種類型的典型代表進行介紹:
(1)搜狐新聞
搜狐新聞除正常主頁外,存在隱藏的列表式新聞頁 , 如 /1/0903/62/subject212846206.shtml 。
(2)網易新聞
可以將網易新聞及騰訊新聞歸結為壹般類型的新聞主頁,我們采用了自新聞主頁開始的廣度優先的遞歸爬取策略。註意到新聞的正文頁往往是靜態網頁.html,因此,我們將網頁中出現的所有以.html 結尾的網頁的 URL 均記錄下來,在爬取到壹定量時,進行壹次去重。
對於壹些不是新聞的錯分網頁,容錯處理即通過檢查新聞正文標簽
時會被剔除。
新聞正文頁中我們重點關註內容,時間,評論獲取。
2.1.2 創新點
實現了對新聞網頁動態加載的評論進行爬取,如搜狐新聞評論爬取
未借助開源新聞爬取工具,自己實現了對新聞標題,正文,時間,評論內容,評論數目的高效爬取
2.2 索引構建
分詞,我們借助開源的 jieba 中文分詞組件來完成,jieba 分詞能夠將壹個中文句子切成壹個個詞項,這樣就可以統計 tf, df 了
去停用詞,去停詞的步驟在 jieba 分詞之後完成
倒排記錄表存儲,詞典用 B-樹或 hash 存儲,倒排記錄表用鄰接鏈表存儲方式,這樣能大大減少存儲空間
倒排索引構建算法使用內存式單遍掃描索引構建方法(SPIMI),就是依次對每篇新聞進行分詞,如果出現新的詞項則插入到詞典中,否則將該文檔的信息追加到詞項對應的倒排記錄表中。
2.3 檢索模塊
2.3.1 檢索模式
(1)關鍵詞檢索
查詢即根據用戶輸入的關鍵字,返回其相應的新聞。首先根據用戶的查詢進行 jieba 分詞,記錄分詞後詞項的數量以字典形式進行存儲。
完整的源碼和詳細的文檔,上傳到了 WRITE-BUG技術***享平臺 上,需要的請自取:
/article/3122.html