軍事教育主題爬蟲設計與實現(xiàn)
發(fā)布時間:2020-10-23 來源: 演講稿 點擊:
軍事教育主題爬蟲的設計與實現(xiàn)
論文導讀:網絡信息資源也爆炸般的增長。如果沒有一個好的搜索引擎。試驗結果表明軍事教育主題爬蟲抓取網頁的準確度及準確率都比普通爬蟲的高。本文通過設計一個軍事教育主題爬蟲從網絡上收集有關理財網頁(代替軍隊的教育網頁),以解決本實驗室面向軍事教育主題的個性化搜索引擎的資源問題。關鍵詞:網絡,主題爬蟲,搜索引擎,軍事教育主題爬蟲
l1 引言 當今,隨著 Intemet 在國內的迅猛發(fā)展,軍隊正在向現(xiàn)代化建軍目標發(fā)展,為了使軍隊更快的向信息化,數(shù)字化方向發(fā)展,軍隊都在著手建設自己的信息網,網絡信息資源也爆炸般的增長,在軍隊內的信息服務器上,同樣能夠獲取許多有用的資源。如果沒有一個好的搜索引擎,查詢起來困難就可想而知,F(xiàn)在 www 網上基本都是一些商業(yè)性的探索引擎,這些引擎深度和廣度都很大,有些甚至是整個環(huán)球網進行檢索。論文發(fā)表,搜索引擎。而軍隊只需要搜索其內部網絡即可。因此在軍隊網中安置一個針對軍隊信息資源進行搜索的爬蟲十分必要。
l2 軍事教育主題爬蟲的爬行策略 搜索引擎中最關鍵的部分是網絡爬蟲,它的性能好壞直接影響著搜索引擎的整體性能和處理速度。傳統(tǒng)的網絡爬蟲是按照預先設定的廣度優(yōu)先策略、深度優(yōu)先策略或這兩種策略相結合的方式爬行網頁[ 1 ] 。網絡爬蟲的搜索策略與搜索引擎的性質和任務密切相關。決定網絡爬
蟲搜索策略的關鍵是如何將不相關的網頁快速地過濾并刪除掉,因為網頁過濾的速度和準確性將會直接影響網絡爬蟲的性能。以何種策略訪問 Web,成為近年來主題搜索引擎網絡爬蟲研究的焦點之一。軍事教育主題爬蟲是按照最佳優(yōu)先的爬行策略爬行網頁即軍事教育主題爬行時按照主題相關度優(yōu)先的爬行策略爬行網頁。爬蟲從網絡上抓取到的新網頁在爬行之前都要進行主題相關度分析,與初始種子網頁相關度最高的網頁被優(yōu)先爬行,而與初始種子網頁不相關或相關度不大的網頁則被拋棄。因此與傳統(tǒng)網絡爬蟲相比,軍事教育主題爬蟲的工作量大大減少、爬行的準確度大大提高。
l3 軍事教育主題爬蟲的系統(tǒng)實現(xiàn) 3.1 設計思路與總體柜架 從設計思路上,構造Spider有兩種比較常用的方法。第一種是把Spider設計成一個遞歸的程序,第二種是編寫一個非遞歸的 Spider 程序,程序維護一個要訪問的網頁列表,考慮到 Java 對數(shù)組、隊列的包支持較為豐富,實現(xiàn)相對容易,本程序使用了第二種設計思路。
程序中總共維護了四個不同的隊列,它們的總結如下。每一個這樣的隊列保存著同一處理狀態(tài)的 URL。
等待隊列 當 Spider 程序開始處理 URL 時,它們被傳送到這一隊列。重要的是同一個 URL 不能被多次處理,因為這樣是浪費的。當一個URL 被處理過后,它被移送到或者是錯誤隊列或者是完成隊列。論文發(fā)表,搜索引擎。論文發(fā)表,搜索引擎。
運行隊列 當前正在處理的 URL 隊列。
錯誤隊列 如果在下載當前網頁時發(fā)生錯誤,它的 URL 將被加入到錯誤隊列。該 URL 到達這一隊列后將不再移入其它隊列。論文發(fā)表,搜索引擎。一旦網頁移入錯誤隊列,Spider 程序將不會再對它作進一步處理。
完成隊列 如果在下載網頁時沒有發(fā)生錯誤,該 URL 將被加入到完成隊列。該 URL 到達這一隊列后將不再移入其他隊列。
明顯,每個得到的 URL 都只能存在于一個隊列中。其狀態(tài)流程圖如下(圖 1):
評定分數(shù)計算公式采用信息檢索中常用的詞條權值計算方法為 TF-IDF 函數(shù) Wi,j=Avg(TFi)*(1/(log(nDoc/ni)+1/log(nDoc-1))) Avg(TFi):對詞 i 取其在各文檔中的TF值進行平均; nDoc:文檔數(shù)目; ni:出現(xiàn)詞 i 的文檔個數(shù); 3.2 程序結構及具體實現(xiàn) 網絡爬蟲種類很多,如有基于全文搜索的網絡爬蟲[2],聚類網絡爬蟲,主題網絡爬蟲,基于本體的網絡爬蟲等。在引入 BOT 包的基礎上,實現(xiàn)了以并發(fā)進程方式對指定站點內部網頁數(shù)據的訪問和基于隊列的處理,將抓取到的網頁數(shù)據存儲在本地數(shù)據庫中。程序由四個文件組成:CheckLinks.java; HTMLParse.java; ISpiderReportable.java;Spider.java,程序工程報告如圖 2:
圖 2
用 TF-IDF 函數(shù)算出各個詞語的權值,最終得到全部詞的權值wordWeightOfAllDocument public class segmenter { public TreeMap zhwords;//用 Treemap 形式定義,帶標簽,方便對應查找 //下面定義的是一些統(tǒng)計詞項與詞頻的鏈表 public ArrayList wordSum; public ArrayList wordCount; public ArrayList wordAll; public ArrayList wordCountAll; //根據選取網頁的編碼類型,選擇不同的詞庫文件。
String newword = null; try { InputStream worddata = null; if(charform == SIMP) { worddata= getClass().getResourceAsStream("simplexu8.txt"); } else if(charform == TRAD) { worddata= getClass().getResourceAsStream("tradlexu8.txt"); } else if(charform == BOTH) { worddata= getClass().getResourceAsStream("bothlexu8.txt"); } //wordSum ; wordCount; wordAll; wordCountAll;wordCountMax;這些鏈
表都是為了分詞后統(tǒng)計出每個詞的 tf 值和 IDF 值,最后根據公式算出每個詞語的權值!
//這個是 tf 值的計算并記錄文件 public ArrayList getTfValue(String args){ int tmpIndex; BufferedWriter fileOut; ArrayList tmpArrayList = newArrayList(3); File tmpTfFilePath=newFile("tf"); tmpTfFilePath.mkdir(); try{ fileOut=newBufferedWriter ( new FileWriter (args+".tf")); for(int k =0;k<wordSum.size();k++){ tmpIndex=k; double tmp =(double)(Integer)wordCount.get(tmpIndex)).intValue()/(double) wordCountMax; Double dTmp = newDouble(tmp); tmpArrayList.add(dTmp/*(Object)tmp*/); //這個是 IDF 值的計算 for(int idfi=0;idfi<wordOfAllDocument.size();idfi++) { int ni=0;//how many document contains a word
String tmpString=(String)wordOfAllDocument.get(idfi); for(int idfj=0; idfj<nDoc; idfj++) { if(((ArrayList)wordOfOneDocument.get(idfj)).contains(tmpString)) ni++; } Double dTmpdouble = newDouble(1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1))); wordIdfValueOfAllDocument.add(/*1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1))*/dTmpdouble); //IDF 采用倒數(shù),表明在專題訓練文檔中在越多文檔中出現(xiàn),其越重要。
//最后利用公式算出該詞在訓練主題中的權重 W=Avg(tf)*IDF for(int tfi=0;tfi<wordOfAllDocument.size();tfi++){ inttmpIndex=-1; inttni=0; doubletfall=0.0; StringtmpString=(String)wordOfAllDocument.get(tfi); for(inttfj=0; tfj<nDoc; tfj++){ if((tmpIndex=((ArrayList)wordOfOneDocument.get(tfj)).indexOf(tmpString))!=-1){ tni++;
tfall=tfall+((Double)(((ArrayList)wordTfValueOfOneDocument.get(tfj)).get(tmpIndex))).doubleValue(); } } Double dTmpdouble = newDouble(tfall/tni); Double dTmpdoubleElse = newDouble((tfall/tni)*(((Double)wordIdfValueOfAlDocument -.get(tfi)).doubleValue())); wordTfValueOfAllDocument.add(dTmpdouble); wordWeightOfAllDocument.add(dTmpdoubleElse); } 實現(xiàn)的流程如下,首先,CheckLinks 得到一個起始的 URL,在CheckLinks.run()中,新建Spider實例,把起始URL加入到等待隊列中,并通過 setKeyWord()方法設置關鍵詞,setCheckRobots()、setCheckMetaTag()配置選項,程序進入正常工作。
Spider 通過 getWorkloadWaiting()方法得到等待隊列中的 URL,調用 processURL()方法對取出的 URL 進行處理,對此,processURL()方法內以 URL 為地址建立鏈接,取回對象通過 parse.parse()方法對HTML 進行解釋,主要是從得到的 HTML 中獲取新的 URL 并添加到等待隊列中,及對主題字的匹配。經過 parse 返回,則從等待隊列中移走處理的 URL,如果沒有錯誤,把它添加到完成隊列中,否則添加到錯誤隊列中,程序又去等待隊列中取出 URL,進行同樣的處理流程,
循環(huán)一直到等待隊列為空。
3.3 開發(fā)環(huán)境 實驗條件:搜索深度= 2 (設的較小,為了防止搜索規(guī)模過大) ,線程數(shù)= 100 (要求在網絡環(huán)境較好的情況下) ,起始種子= 10 (都是經過人工選擇的較好的種子) ,閾值 r = 0. 6 ,中文分詞主要以中科院計算所免費版的分詞工具(C 語言開發(fā)) 為基礎。機器配置: Intel(R)Core™2 CPU T5500 @1.66Ghz,內存 2048 MB。試驗結果表明軍事教育主題爬蟲抓取網頁的準確度及準確率都比普通爬蟲的高。論文發(fā)表,搜索引擎。
3.4 實驗總結及系統(tǒng)存在的問題 爬行速度太慢,特別是對超鏈接較多的頁面;頁面內容的多少對評分有一定影響,雖然不大,但仍需考慮;若能在網頁架構分析上添加一定的過濾,抓取核心內容,相信對抓取質量會有更大的提高,這方面也待改善。
l4 結束語 本文通過設計一個軍事教育主題爬蟲從網絡上收集有關理財網頁(代替軍隊的教育網頁),以解決本實驗室面向軍事教育主題的個性化搜索引擎的資源問題。論文發(fā)表,搜索引擎。從實驗結果來看爬蟲達到了我們初步的預定目標,下一步我們將不斷對其進行完善以進一步提高其搜索精度及搜索速度。
參考文獻[1]周立柱,林玲 1 聚焦爬蟲技術研究綜述 1 計算機應用 1 第25 卷第 9 期 2005 年 9 月:1966[2]徐遠超,劉江華,劉麗珍等.基于 Web 的 網 絡 爬 蟲 的 設 計 與 實 現(xiàn) . 微 計 算 機 信
息 .2007,23(7):119-121[2[Programming a Spider in Java,Jeff HeatonBiography:JinPeng(1982-),male, qingdao,China University Of Petroleum, research interests are in areas of computernetwork and. Search Engine
熱點文章閱讀