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