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