軍事教育主題爬蟲(chóng)設(shè)計(jì)與實(shí)現(xiàn)
發(fā)布時(shí)間:2020-10-23 來(lái)源: 演講稿 點(diǎn)擊:
軍事教育主題爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)
論文導(dǎo)讀:網(wǎng)絡(luò)信息資源也爆炸般的增長(zhǎng)。如果沒(méi)有一個(gè)好的搜索引擎。試驗(yàn)結(jié)果表明軍事教育主題爬蟲(chóng)抓取網(wǎng)頁(yè)的準(zhǔn)確度及準(zhǔn)確率都比普通爬蟲(chóng)的高。本文通過(guò)設(shè)計(jì)一個(gè)軍事教育主題爬蟲(chóng)從網(wǎng)絡(luò)上收集有關(guān)理財(cái)網(wǎng)頁(yè)(代替軍隊(duì)的教育網(wǎng)頁(yè)),以解決本實(shí)驗(yàn)室面向軍事教育主題的個(gè)性化搜索引擎的資源問(wèn)題。關(guān)鍵詞:網(wǎng)絡(luò),主題爬蟲(chóng),搜索引擎,軍事教育主題爬蟲(chóng)
l1 引言 當(dāng)今,隨著 Intemet 在國(guó)內(nèi)的迅猛發(fā)展,軍隊(duì)正在向現(xiàn)代化建軍目標(biāo)發(fā)展,為了使軍隊(duì)更快的向信息化,數(shù)字化方向發(fā)展,軍隊(duì)都在著手建設(shè)自己的信息網(wǎng),網(wǎng)絡(luò)信息資源也爆炸般的增長(zhǎng),在軍隊(duì)內(nèi)的信息服務(wù)器上,同樣能夠獲取許多有用的資源。如果沒(méi)有一個(gè)好的搜索引擎,查詢起來(lái)困難就可想而知,F(xiàn)在 www 網(wǎng)上基本都是一些商業(yè)性的探索引擎,這些引擎深度和廣度都很大,有些甚至是整個(gè)環(huán)球網(wǎng)進(jìn)行檢索。論文發(fā)表,搜索引擎。而軍隊(duì)只需要搜索其內(nèi)部網(wǎng)絡(luò)即可。因此在軍隊(duì)網(wǎng)中安置一個(gè)針對(duì)軍隊(duì)信息資源進(jìn)行搜索的爬蟲(chóng)十分必要。
l2 軍事教育主題爬蟲(chóng)的爬行策略 搜索引擎中最關(guān)鍵的部分是網(wǎng)絡(luò)爬蟲(chóng),它的性能好壞直接影響著搜索引擎的整體性能和處理速度。傳統(tǒng)的網(wǎng)絡(luò)爬蟲(chóng)是按照預(yù)先設(shè)定的廣度優(yōu)先策略、深度優(yōu)先策略或這兩種策略相結(jié)合的方式爬行網(wǎng)頁(yè)[ 1 ] 。網(wǎng)絡(luò)爬蟲(chóng)的搜索策略與搜索引擎的性質(zhì)和任務(wù)密切相關(guān)。決定網(wǎng)絡(luò)爬
蟲(chóng)搜索策略的關(guān)鍵是如何將不相關(guān)的網(wǎng)頁(yè)快速地過(guò)濾并刪除掉,因?yàn)榫W(wǎng)頁(yè)過(guò)濾的速度和準(zhǔn)確性將會(huì)直接影響網(wǎng)絡(luò)爬蟲(chóng)的性能。以何種策略訪問(wèn) Web,成為近年來(lái)主題搜索引擎網(wǎng)絡(luò)爬蟲(chóng)研究的焦點(diǎn)之一。軍事教育主題爬蟲(chóng)是按照最佳優(yōu)先的爬行策略爬行網(wǎng)頁(yè)即軍事教育主題爬行時(shí)按照主題相關(guān)度優(yōu)先的爬行策略爬行網(wǎng)頁(yè)。爬蟲(chóng)從網(wǎng)絡(luò)上抓取到的新網(wǎng)頁(yè)在爬行之前都要進(jìn)行主題相關(guān)度分析,與初始種子網(wǎng)頁(yè)相關(guān)度最高的網(wǎng)頁(yè)被優(yōu)先爬行,而與初始種子網(wǎng)頁(yè)不相關(guān)或相關(guān)度不大的網(wǎng)頁(yè)則被拋棄。因此與傳統(tǒng)網(wǎng)絡(luò)爬蟲(chóng)相比,軍事教育主題爬蟲(chóng)的工作量大大減少、爬行的準(zhǔn)確度大大提高。
l3 軍事教育主題爬蟲(chóng)的系統(tǒng)實(shí)現(xiàn) 3.1 設(shè)計(jì)思路與總體柜架 從設(shè)計(jì)思路上,構(gòu)造Spider有兩種比較常用的方法。第一種是把Spider設(shè)計(jì)成一個(gè)遞歸的程序,第二種是編寫(xiě)一個(gè)非遞歸的 Spider 程序,程序維護(hù)一個(gè)要訪問(wèn)的網(wǎng)頁(yè)列表,考慮到 Java 對(duì)數(shù)組、隊(duì)列的包支持較為豐富,實(shí)現(xiàn)相對(duì)容易,本程序使用了第二種設(shè)計(jì)思路。
程序中總共維護(hù)了四個(gè)不同的隊(duì)列,它們的總結(jié)如下。每一個(gè)這樣的隊(duì)列保存著同一處理狀態(tài)的 URL。
等待隊(duì)列 當(dāng) Spider 程序開(kāi)始處理 URL 時(shí),它們被傳送到這一隊(duì)列。重要的是同一個(gè) URL 不能被多次處理,因?yàn)檫@樣是浪費(fèi)的。當(dāng)一個(gè)URL 被處理過(guò)后,它被移送到或者是錯(cuò)誤隊(duì)列或者是完成隊(duì)列。論文發(fā)表,搜索引擎。論文發(fā)表,搜索引擎。
運(yùn)行隊(duì)列 當(dāng)前正在處理的 URL 隊(duì)列。
錯(cuò)誤隊(duì)列 如果在下載當(dāng)前網(wǎng)頁(yè)時(shí)發(fā)生錯(cuò)誤,它的 URL 將被加入到錯(cuò)誤隊(duì)列。該 URL 到達(dá)這一隊(duì)列后將不再移入其它隊(duì)列。論文發(fā)表,搜索引擎。一旦網(wǎng)頁(yè)移入錯(cuò)誤隊(duì)列,Spider 程序?qū)⒉粫?huì)再對(duì)它作進(jìn)一步處理。
完成隊(duì)列 如果在下載網(wǎng)頁(yè)時(shí)沒(méi)有發(fā)生錯(cuò)誤,該 URL 將被加入到完成隊(duì)列。該 URL 到達(dá)這一隊(duì)列后將不再移入其他隊(duì)列。
明顯,每個(gè)得到的 URL 都只能存在于一個(gè)隊(duì)列中。其狀態(tài)流程圖如下(圖 1):
評(píng)定分?jǐn)?shù)計(jì)算公式采用信息檢索中常用的詞條權(quán)值計(jì)算方法為 TF-IDF 函數(shù) Wi,j=Avg(TFi)*(1/(log(nDoc/ni)+1/log(nDoc-1))) Avg(TFi):對(duì)詞 i 取其在各文檔中的TF值進(jìn)行平均; nDoc:文檔數(shù)目; ni:出現(xiàn)詞 i 的文檔個(gè)數(shù); 3.2 程序結(jié)構(gòu)及具體實(shí)現(xiàn) 網(wǎng)絡(luò)爬蟲(chóng)種類很多,如有基于全文搜索的網(wǎng)絡(luò)爬蟲(chóng)[2],聚類網(wǎng)絡(luò)爬蟲(chóng),主題網(wǎng)絡(luò)爬蟲(chóng),基于本體的網(wǎng)絡(luò)爬蟲(chóng)等。在引入 BOT 包的基礎(chǔ)上,實(shí)現(xiàn)了以并發(fā)進(jìn)程方式對(duì)指定站點(diǎn)內(nèi)部網(wǎng)頁(yè)數(shù)據(jù)的訪問(wèn)和基于隊(duì)列的處理,將抓取到的網(wǎng)頁(yè)數(shù)據(jù)存儲(chǔ)在本地?cái)?shù)據(jù)庫(kù)中。程序由四個(gè)文件組成:CheckLinks.java; HTMLParse.java; ISpiderReportable.java;Spider.java,程序工程報(bào)告如圖 2:
圖 2
用 TF-IDF 函數(shù)算出各個(gè)詞語(yǔ)的權(quán)值,最終得到全部詞的權(quán)值wordWeightOfAllDocument public class segmenter { public TreeMap zhwords;//用 Treemap 形式定義,帶標(biāo)簽,方便對(duì)應(yīng)查找 //下面定義的是一些統(tǒng)計(jì)詞項(xiàng)與詞頻的鏈表 public ArrayList wordSum; public ArrayList wordCount; public ArrayList wordAll; public ArrayList wordCountAll; //根據(jù)選取網(wǎng)頁(yè)的編碼類型,選擇不同的詞庫(kù)文件。
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)計(jì)出每個(gè)詞的 tf 值和 IDF 值,最后根據(jù)公式算出每個(gè)詞語(yǔ)的權(quán)值!
//這個(gè)是 tf 值的計(jì)算并記錄文件 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*/); //這個(gè)是 IDF 值的計(jì)算 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ù),表明在專題訓(xùn)練文檔中在越多文檔中出現(xiàn),其越重要。
//最后利用公式算出該詞在訓(xùn)練主題中的權(quá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); } 實(shí)現(xiàn)的流程如下,首先,CheckLinks 得到一個(gè)起始的 URL,在CheckLinks.run()中,新建Spider實(shí)例,把起始URL加入到等待隊(duì)列中,并通過(guò) setKeyWord()方法設(shè)置關(guān)鍵詞,setCheckRobots()、setCheckMetaTag()配置選項(xiàng),程序進(jìn)入正常工作。
Spider 通過(guò) getWorkloadWaiting()方法得到等待隊(duì)列中的 URL,調(diào)用 processURL()方法對(duì)取出的 URL 進(jìn)行處理,對(duì)此,processURL()方法內(nèi)以 URL 為地址建立鏈接,取回對(duì)象通過(guò) parse.parse()方法對(duì)HTML 進(jìn)行解釋,主要是從得到的 HTML 中獲取新的 URL 并添加到等待隊(duì)列中,及對(duì)主題字的匹配。經(jīng)過(guò) parse 返回,則從等待隊(duì)列中移走處理的 URL,如果沒(méi)有錯(cuò)誤,把它添加到完成隊(duì)列中,否則添加到錯(cuò)誤隊(duì)列中,程序又去等待隊(duì)列中取出 URL,進(jìn)行同樣的處理流程,
循環(huán)一直到等待隊(duì)列為空。
3.3 開(kāi)發(fā)環(huán)境 實(shí)驗(yàn)條件:搜索深度= 2 (設(shè)的較小,為了防止搜索規(guī)模過(guò)大) ,線程數(shù)= 100 (要求在網(wǎng)絡(luò)環(huán)境較好的情況下) ,起始種子= 10 (都是經(jīng)過(guò)人工選擇的較好的種子) ,閾值 r = 0. 6 ,中文分詞主要以中科院計(jì)算所免費(fèi)版的分詞工具(C 語(yǔ)言開(kāi)發(fā)) 為基礎(chǔ)。機(jī)器配置: Intel(R)Core™2 CPU T5500 @1.66Ghz,內(nèi)存 2048 MB。試驗(yàn)結(jié)果表明軍事教育主題爬蟲(chóng)抓取網(wǎng)頁(yè)的準(zhǔn)確度及準(zhǔn)確率都比普通爬蟲(chóng)的高。論文發(fā)表,搜索引擎。
3.4 實(shí)驗(yàn)總結(jié)及系統(tǒng)存在的問(wèn)題 爬行速度太慢,特別是對(duì)超鏈接較多的頁(yè)面;頁(yè)面內(nèi)容的多少對(duì)評(píng)分有一定影響,雖然不大,但仍需考慮;若能在網(wǎng)頁(yè)架構(gòu)分析上添加一定的過(guò)濾,抓取核心內(nèi)容,相信對(duì)抓取質(zhì)量會(huì)有更大的提高,這方面也待改善。
l4 結(jié)束語(yǔ) 本文通過(guò)設(shè)計(jì)一個(gè)軍事教育主題爬蟲(chóng)從網(wǎng)絡(luò)上收集有關(guān)理財(cái)網(wǎng)頁(yè)(代替軍隊(duì)的教育網(wǎng)頁(yè)),以解決本實(shí)驗(yàn)室面向軍事教育主題的個(gè)性化搜索引擎的資源問(wèn)題。論文發(fā)表,搜索引擎。從實(shí)驗(yàn)結(jié)果來(lái)看爬蟲(chóng)達(dá)到了我們初步的預(yù)定目標(biāo),下一步我們將不斷對(duì)其進(jìn)行完善以進(jìn)一步提高其搜索精度及搜索速度。
參考文獻(xiàn)[1]周立柱,林玲 1 聚焦爬蟲(chóng)技術(shù)研究綜述 1 計(jì)算機(jī)應(yīng)用 1 第25 卷第 9 期 2005 年 9 月:1966[2]徐遠(yuǎn)超,劉江華,劉麗珍等.基于 Web 的 網(wǎng) 絡(luò) 爬 蟲(chóng) 的 設(shè) 計(jì) 與 實(shí) 現(xiàn) . 微 計(jì) 算 機(jī) 信
息 .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
熱點(diǎn)文章閱讀