//这个是IDF值的计算
for(int idfi=0; idfi
{
int ni=0;//how many document contains a word
String tmpString=(String)wordOfAllDocument.get(idfi);
for(int idfj=0; idfj
{
if(((ArrayList)wordOfOneDocument.get(idfj)).contains(tmpString))
ni++;
}
Double dTmpdouble = new Double(1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1)));
wordIdfValueOfAllDocument.add(/*1/(Math.log(nDoc/ni)+1/Math.log(nDoc-1))*/dTmpdouble);
//IDF 采用倒数,表明在专题训练文档中在越多文档中出现,其越重要。
//最后利用公式算出该词在训练主题中的权重 W=Avg(tf)*IDF
for(int tfi=0; tfi
int tmpIndex=-1;
int tni=0;
double tfall=0.0;
String tmpString=(String)wordOfAllDocument.get(tfi);
for(int tfj=0; tfj
if((tmpIndex=((ArrayList)wordOfOneDocument.get(tfj)).indexOf(tmpString))!=-1){
tni++; tfall=tfall+((Double)(((ArrayList)wordTfValueOfOneDocument.get(tfj)).get(tmpIndex))).doubleValue();
}
}
Double dTmpdouble = new Double(tfall/tni);
Double dTmpdoubleElse = new Double((tfall/tni)*(((Double)wordIdfValueOfAlDocument
-.get(tfi)).doubleValue()));
wordTfValueOfAllDocument.add(dTmpdouble); wordWeightOfAllDocument.add(dTmpdoubleElse);
}
实现的流程如下,首先,CheckLinks得到一个起始的URL,在CheckLinks.run()中,新建Spider实例,把起始URL加入到等待队列中,并通过setKeyWord()方法设置主题词,setCheckRobots()、setCheckMetaTag()配置选项,程序进入正常工作。
Spider通过getWorkloadWaiting()方法得到等待队列中的URL,调用processURL()方法对取出的URL进行处理,对此,processURL()方法内以URL为地址建立链接,取回对象通过parse.parse()方法对HTML进行解释,主要是从得到的HTML中获取新的URL并添加到等待队列中,及对主题字的匹配。经过parse返回,则从等待队列中移走处理的URL,如果没有错误,把它添加到完成队列中,否则添加到错误队列中,程序又去等待队列中取出URL,进行同样的处理流程,循环一直到等待队列为空。 3.3开发环境实验条件:搜索深度= 2 (设的较小,为了防止搜索规模过大) ,线程数= 100 (要求在网络环境较好的情况下) ,起始种子= 10 (都是经过人工选择的较好的种子) ,阈值r = 0. 6 ,中文分词主要以中科院计算所免费版的分词工具(C 语言开发) 为基础。机器配置: Intel(R)Core™2CPU T5500@1.66Ghz,内存2048MB。试验结果表明机械主题爬虫抓取网页的准确度及准确率都比普通爬虫的高。 3.4 实验结果分析实验结果分析:在实验过程中,以新浪军事网页做爬行,抓取的相关网页得分为86分,爬行效果比较理想。 3.4 实验总结及系统存在的问题爬行速度太慢,特别是对超链接较多的页面;页面内容的多少对评分有一定影响,虽然不大,但仍需考虑;若能在网页架构分析上添加一定的过滤,抓取核心内容,相信对抓取质量会有更大的提高,这方面也待改善。 l4 结束语本文通过设计一个军事教育主题爬虫从网络上收集有关理财网页(代替军队的教育网页),以解决本实验室面向军事教育主题的个性化搜索引擎的资源问题。从实验结果来看爬虫达到了我们初步的预定目标,下一步我们将不断对其进行完善以进一步提高其搜索精度及搜索速度。
参 考 文 献
[1]周立柱,林玲1 聚焦爬虫技术研究综述1 计算机应用1 第25 卷第9 期2005 年9 月:1966
[2]徐远超,刘江华,刘丽珍等.基于Web 的网络爬虫的设计与实现.微计算机信息.2007,23(7):119-121
[3[Programming a Spider in Java ,Jeff Heaton