新聞信息檢索系統設計
來源:用戶上傳
作者:
摘 要:模擬百度、谷歌等搜索工具,利用爬蟲和大數據來實現一個簡單的新聞信息檢索系統。此系統大致分為5個模塊:先是利用爬蟲來爬取網頁的信息;利用2-gram分詞來將獲取到的網頁建立索引;將索引排序;利用hadoop分布式存取索引;最后搭建前后端實現界面交互。五個環節關系緊密,核心環節就是索引的建立,利用2-gram分詞提取關鍵字,再利用TF-IDF矩陣對關鍵字打分,得到矩陣之后,就可以利用K-means來講關鍵字分類了。然后再按照評分將索引排序就可以得到用戶所需要的信息。
關鍵詞:爬蟲 Hadoop 2-gram 分詞 K-means
中圖分類號:G64 文獻標識碼:A 文章編號:1672-3791(2019)03(c)-0006-02
1 系統內容
1.1 Web網頁信息抽取
以山東大學新聞網為起點進行網頁信息的循環爬取,保持蜘蛛在view.sdu.edu.cn之內。
1.2 索引構建
對上一步爬取到的網頁進行結構化預處理,包括分字段解析、分詞、構建索引等。
1.3 索引排序
對上一步構建的索引庫進行查詢,對于給定的查詢,給出檢索結果,明白排序的原理及方法。
1.4 數據庫構建
利用爬取的新聞內容以及構建的索引建立數據庫
1.5 前后端實現
基于數據庫利用Java及HTML語言實現前后端交互,提供用戶使用頁面。
2 系統設計
2.1 爬蟲部分
通過觀察分析新聞主頁可以發現我們需要的最終URL是:
http://www.view.sdu.edu.cn/info/1207/104940.htm
在信息爬取的過程中,所使用的工具為:
Python3+requests+bs4+collections。
實現過程如下:
?。?)以http://www.view.sdu.edu.cn為種子URL,獲取此網頁中所有的以“.html”結尾的URL,并且把它加入到列表中避免重復訪問。
(2)通過分析網頁的源碼可以發現有些URL省略了前綴,因此我們在處理這樣的URL之前要先將其補全。
?。?)找到每一個滿足條件的URL(保持蜘蛛在view.sdu.edu.cn之內),并將其加入到隊列中(這里采取BFS爬取策略)。
(4)之后依次從隊列中取出隊首的URL,如果是目標URL,則獲取標題及正文信息,并存到文件中。如果不是目標URL,則依次進行(2)、(3)、(4)步驟。
?。?)在爬蟲的過程中維護一個目錄文件,記錄下每篇新聞的索引、URL、標題。
2.2 詞項詞典構建
詞典構建時分詞系統采用疊詞方式,也就是將語句ABCDE分割成AB,BC,CD,DE四個單詞。
這里使用了一個假設,即“與文檔內容有關的詞語不會只出現一次”,通過這個假設,我們可以排除絕大多數噪音詞項。
比如“今天去濟南”,“今天”“濟南”這兩個詞項如果在文檔中占據重要地位,那么會出現不止一次,而“天去”“去濟”這兩個干擾詞項在絕大多數情況下只會出現一次,可以輕松除去。
基于以上假設,將所有文檔遍歷一遍之后就可以得到一個去除了大多數干擾項和部分有效實詞的有損詞典。但是考慮到最后的目的是制作一個有序搜索引擎,被損耗掉的部分實詞往往在排序中所占據的得分份額也非常小,因此這個詞典就可以被認為是有效的詞典。
2.3 倒排索引構建、TF-IDF矩陣和特征矩陣構建
有了詞典之后,就可以進行倒排索引操作了。
倒排索引操作時仍然使用疊加分詞方式,但是只有存在于上一步產生的詞典中的詞語才會進入下一步操作。倒排索引的結果會生成一個類似二維鏈表的結構,每個鏈表頭保存了詞項名稱,鏈表中間項保存了文檔ID和詞頻,鏈表尾保存了文檔頻率和詞語總頻率。
利用鏈表尾保存的信息和文檔長度信息,遍歷一遍倒排索引即可直接生成TF-IDF矩陣。
考慮到最高頻的詞語在絕大多數文檔中都出現,對特征影響小的原因,選取其中詞頻第100~400共300個詞語進行SVD分解,這樣就得到了特征矩陣。
2.4 文檔聚類
在有了特征矩陣之后,直接使用UT矩陣,直接生成對參與到分類的文檔的特征向量。
由于特征矩陣的計算和K-means迭代在大量數據的情況下單機運行十分緩慢,因此聚類被分成兩步,第一步隨機選擇了一部分向量進行完整的K-means算法,這樣就可以得√N個聚類中心;第二步對剩余的信息直接尋找和它們最近的聚類中心,直接視為這一聚類的追隨者。
因為單機環境下推薦系統使用較少數據的效果更明顯,第一步使用的部分向量在后面將用來實現推薦系統。
同時,根據聚類結果,將原始的TF-IDF矩陣分割成了數個較小的矩陣。每個聚類中最接近聚類中心的一個作為矩陣第一列的數據。
3 前后端實現
3.1 前端實現
使用JSP、JS、Java語言實現界面。
?。?)大致劃分:title檢索欄、content內容新聞塊。
?。?)基本功能:輸入檢索自然語言,查詢相關新聞,獲取相關新聞標題URL信息,進一步跳轉詳細信息。
3.2 后端實現
自然語言處理,實現2-gram分詞。
?。?)單關鍵詞查詢:檢索該關鍵詞相關文檔,利用tf值取其中前十位的文檔ID,構建NEWS數據結構,生成結果。
?。?)多關鍵字查詢:將關鍵詞拆分,利用tf*idf乘積作為每篇文檔得分,最后將所有文檔排序,取出TOP10。
4 結語
此系統不同于簡單的前端調取數據庫內容,這次數據庫更多的只作為系統實現中的一小部分,清晰地了解了一個完整的信息檢索系統的構成,從信息采集、信息處理、信息入庫到信息利用和展示,一步又一步,讓這個過程復雜又清晰。也通過對于信息檢索的學習,逐步了解了真正的搜索引擎背后實現原理以及強大的技術支持。盡管在我們的系統中僅僅使用了python爬蟲爬取、基于2-gram的分詞以及索引構建、數據庫的簡單應用、TF-IDF得分計算、前后端實現這些技術,但已經得到了良好的效果。
此系統還有很大的完善空間,但是通過自己的努力基本實現了搜索引擎系統的基本要求,完成了包括關鍵詞和復雜語言的查詢操作,并且實現了良好的效果。
參考文獻
[1] 李俊華.基于Python的數據分析[J].電子技術與軟件工程,2018(17):167.
[2] 馬明陽,郭明亮,魏留強.網絡爬蟲的專利技術綜述[J].科技世界,2018(12):12-13.
[3] 陳麗,黃晉,王銳.Hadoop大數據平臺安全問題和解決方案的綜述[J].計算機系統應用,2018(1):1-9.
[4] 邱均平,方國平.基于知識圖譜的中外自然語言處理研究的對比分析[J].現代圖書情報技術,2014,30(12):51-61.
[5] 何曉兵,容金鳳.基于層次目標分解法構建的認知信息檢索模型[J].情報理論與實踐,2014(2):14-18.
轉載注明來源:http://www.hailuomaifang.com/8/view-14874923.htm