人工智能大作业主题爬虫浙工大交换生姜楠.docx
- 文档编号:1616449
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:14
- 大小:118.29KB
人工智能大作业主题爬虫浙工大交换生姜楠.docx
《人工智能大作业主题爬虫浙工大交换生姜楠.docx》由会员分享,可在线阅读,更多相关《人工智能大作业主题爬虫浙工大交换生姜楠.docx(14页珍藏版)》请在冰豆网上搜索。
人工智能大作业主题爬虫浙工大交换生姜楠
成绩
北京航空航天大学
人工智能实验报告
主题爬虫设计与实现
学院浙江工业大学交换生
专业方向计算机科学与技术
学生姓名姜楠
指导教师巢老师
北京航空航天大学计算机学院
2014年6月
主题爬虫的设计与实现
引言
互联网是一个庞大的非结构化的数据库,将数据有效的检索并组织呈现出来有着巨大的应用前景。
搜索引擎作为一个辅助人们检索信息的工具,但是这些通用性搜索引擎存在着一定的局限性。
不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果,包含大量用户不关心的网页。
所以需要一个能基于主题搜索的,满足特定需求的网络爬虫。
为了解决上述问题,参照成功的网络爬虫模式,对网络爬虫进行研究,提供满足特定搜索需求的网络爬虫。
实验设计
1.实验要求
1)可以进行多线程进行抓取;
2)可以进行面向主题进行抓取;
3)可以分辨重复的的网页内容;
4)可以计算主题相关性;
5)可以处理网络延时等待的处理;
2.实验环境配置
1)系统硬件环境:
LENOVO-G470IntelCore(TM)i3-2330M@2.20GHz
2)操作系统环境:
Windows8.1专业版
3)实验配置环境:
JavaSEDevelopmentKit7Update45;
EclipseKepler;
MySQLServer5.6;
3.实验方案设计
1)广度优先搜索策略
广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。
该算法的设计和实现相对简单。
在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。
也有很多研究将广度优先搜索策略应用于主题爬虫中,基本思想是认为与初
始URL在一定链接距离内的网页具有主题相关性的概率很大。
另外一种方法是将广度优先搜索与网页过滤技术结合使用,先用广度优先策略抓取网页,再将其中无关的网页过滤掉。
这些方法的缺点在于,随着抓取网页的增多,大量的无关网页将被下载并过滤,算法的效率将变低。
2)深度优先搜索策略
深度优先搜索策略是一种在开发网络爬虫早期使用得较多的方法,是指网络蜘蛛会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。
当不再有其他超链可选择时,说明搜索已经结束。
3)最佳优先搜索策略
最佳优先搜索策略按照一定的网页分析算法,预测候选URL与目标网页的相似度,或与主题的相关性,并选取评价最好的一个或几个URL进行抓取。
它只访问经过网页分析算法预测为“有用”的网页。
存在的一个问题是,在爬虫抓取路径上的很多相关网页可能被忽略,因为最佳优先策略是一种局部最优搜索算法。
因此需要将最佳优先结合具体的应用进行改进,以跳出局部最优点。
研究表明,这样的闭环调整可以将无关网页数量降低30%~90%。
4)主题相关度建模-向量空间模型
向量空间模型是由Salton等人于20世纪60年代末提出,是一种简便、高效
的文本表示模型,其理论基础是代数学[1]。
向量空间模型把用户的查询要求和数据库文档信息表示成由检索项构成的向量空间中的点,通过计算向量之间的距离来判定文档和查询之间的相似程度。
然后,根据相似程度排列查询结果。
向量空间模型的关键在于特征向量的选取和特征向量的权值计算两个部分。
对于任一文档djD,我们可以把它表示为如下t维向量的形式:
dj(Wj,W2j,L,w』
其中,向量分量wtj代表第i个标引词ki在文档dj中所具有的权重,t为系统
中标引词的总数。
在布尔模型中,wtj的取值范围是0,1;在向量空间模型中,
由于采用部分匹配”策略,wtj的取值范围是一个连续的实数区间[0,1]。
在检索的前处理中,一篇文档中会标引出多个不同的标引词,而这些标引词对表达该篇文档主题的能力往往是不同的。
也就是说,每个标引词应该具有不同
的权值。
如何计算文档向量中每个标引词的权值,不仅关系到文档向量的形成,也关系到后续的检索匹配结果。
标引词权重的大小主要依赖其在不同环境中的出现频率统计信息,相应的权
重就分成局部权重和全局权重。
局部权重(LocalWeight)|打是按第i个标引词在第j篇文档中的出现频率计算的权重。
它以提高查全率为目的,对在文档中频繁出现的标引项给予较大的权重。
全局权重(GlobalWeight)gtj则是按第i个标引词在整个系统文档集合中的分布确定的权重。
它以提高查准率为目的,对在许多文档中都出现的标引项给予较低的权重,而对仅在特定文档中出现频次较高的标引项给予较大的权重。
计算全局权重的典型方法就是逆文档频率IDF(InverseDocumentFrequency)
加权法:
gilogN/n
其中,N为系统文档总数,ni为系统中含有标引词k的文档数。
向量间相似程度的度量方法有内积法(InnerProduct)Dice法(DiceCoefficient)、
Jaccard法(JaccardCoefficient)和余弦法(CosineCoefficient)。
较常用的度量方法是提问向量和文档向量间的内积法,其计算公式如下:
N
QTiDTi
其中,QTi是检索提问中检索项i的权值,DTi是文档中标引项i的权值,N为总的项数。
当每个向量都通过余弦法进行加权后,则内积法转换为余弦法。
余弦法采用的相似度计算指标是两个向量夹角的余弦函数。
5)主题爬虫模型建立
图1-1主题爬虫模型结构
1)种子以及关键词的选取
在初始化阶段,我们需要给爬虫提供初始的网址和一组与主题相关的关键词。
关键词的提取,我采用的是凭经验手动给出。
同时,每个关键词都需要指定不同的权值,权值的设置方法有两种:
手工设置和特征提取。
特征提取是指给定一个跟主题有关的网页集合,由程序自动提取这些网页里面共同的特征,并根据频率确定权值。
遵循简洁有效的原则,我选取几组特定的网页,提取词频较高的前20个关
键词,所有词的权值均相同。
2)URL队列的运行与维护
对于单线程爬虫,可以使用简单的优先队列实现最佳有限算法,每次线程从队列中提取相关度最高的URL链接,运行结束后,将有效的链接插入队列中。
对于多线程爬虫,由于线程之间的耦合度很低,属于并行计算模型。
假若多个线程同时访问URL队列,就会发生异常情况,可能多个线程取到的URL均相同,这样就会间接浪费线程资源。
因为我们希望相同的URL只需要被处理一次就可以了。
同时,在多个线程将有效URL插入队列时,URL队列在同一时间只能为一个线程服务,其余线程送入的URL将会被抛弃。
基于上述考量,我们需要采用给URL队列分配互斥锁,一旦某个线程获得URL队列的使用权,其余线程就忙等待,直到该互斥锁被撤销。
在设计过程中,我只采用一个等待队列,在这个队列中,URL等待被处理,新发现的URL被加入到该队列中。
不相关的URL均被抛弃,完成抓取的URL均存入数据库,不再建立完成队列记录访问的链接。
在JavaVirtualMachine中,我们可以使用关键字synchronized,对需要访问的资源加锁。
当两个并发线程访问同一个对象object中的这个synchronized同步代码块时,一个时间内只能有一个线程得到执行。
另一个线程必须等待当前线程
执行完这个代码块以后才能执行该代码块。
//提取的URL入队
publicsynchronizedvoidpushUrl(){}
//线程从队列中读取一个URL
publicsynchronizedStringpopUrl(){}
为了实现最佳优先策略,我们需要扩展URL,集成系统提供的接口
Comparable,为其添加优先级的属性,自定义比较大小方法。
如果不采用该策略,系统默认的比较方法是,比较两个URL(String)的字典序大小,这显违背我们的最佳优先策略。
/**
*具有优先比较的URL类
*/
publicclassPriorityURLimplementsComparable
publicdoublepriority;
@Override
/**
*实现两个URL之间大小的比较方法
*/
publicintcompareTo(PriorityURLp){
if(priority>p.priority)return1;
elseif(priority
elsereturn0;
3)主题相关度计算模块
为了保证爬取的网页与我们的主题有高度相关性,我们需要过滤相关度
较低的网页链接。
前面我们已经讨论至向量空间模型”,在这里我们采用余
弦度量法。
具体做法是,统计网页中关键词出现的频率,然后与我们初始的关键词
n
WiWi
按照公式:
cos1,求解得余弦值,即可得到该网页的相
nn
22
“wiwi
.i1i1
关度。
指定一个阈值threshold,当costhreshold,可以认为该页面和
主题是比较相关的,r的取值需要根据经验和实际要求确定,如果想获得较多的页面,可以把r设小一点,要获得较少的页面可以把r设的大一点。
在我们的程序中,默认将阈值r设置为0.9。
4)网页下载与链接提取模块
Java提供了一组类用于网络通信.URL,但是需要繁复的设置来维护一个socket通信。
本次实验只需要下载html纯文本文件,如果能尽量简单的设置网络通信规范,屏蔽基层类的复杂性,能有效减少程序编制时间,提高程序鲁棒性。
因此,我们采用开源Jsoup.jar插件,这个类库提供一组便捷的下载并解析HTML的API。
只要预先给出URL链接,Jsoup库能下载该HTML文件。
事实上,我们还需要注意HTTPStatuscode只有当链接返回的状态值为
200,才表明网页响应正常;若是返回的状态值为404NotFound,表示无法找
到指定位置的资源,这时候Jsoup类库就会显示Exception,程序会异常终止。
HTTP常用状态表
返回值
含义
200
一切正常,响应报文跟在后面
400
BadRequest请求出现语法错误
403
Forbidden,资源不可用
404
NotFound无法找到指定位置的资源
502
BadGateway,服务器收到无效响应
为了维持一个正常HTTP的链接,响应正确的链接,我们必须做必要的设置,可以参考:
//忽略链接中出现的任何异常,保持程序能持续运行
Jsoup.connect(url).ignoreHttpErrors(true);
若是通过代理服务器上网的需要设置系统代理,而且必须在软件中用代码定义,否则仅仅是在Windows操作系统网络设置修改代理,仍会出现ava.net.UnknownHostException这个错误,至于设置方法可以参考:
//设置代理网络地址
System.setProperty("http.proxyHost","127.0.0.1");
//设置代理端口号
System.setProperty("http.proxyPort","8182");
由于网络的异构性,与实验环境网络不稳定型,导致一个socket极易因为
连接超时,导致.So
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 作业 主题 爬虫 浙工大 交换 生姜