习题课 proj1+hw3

25
习习习 Proj1+hw3 LiYing Dec 2, 2009

Upload: gisela

Post on 20-Jan-2016

131 views

Category:

Documents


0 download

DESCRIPTION

习题课 Proj1+hw3. LiYing Dec 2, 2009. heritrix 系统使用. 要求:配置、安装 Heritrix ,抓取指定的网站 : http://www.ccer.pku.edu.cn 限制抓取范围:修改 Modules 、 Submodules 和 Settings : Select Crawl Scope 选择 DecidingScope ; 用正则表达式完成对抓取的网页的 url 的匹配; 限定只抓取文本类型的内容, 缩短爬取时间: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 习题课 Proj1+hw3

习题课Proj1+hw3

LiYingDec 2, 2009

Page 2: 习题课 Proj1+hw3

heritrix系统使用

要求:配置、安装 Heritrix,抓取指定的网站 : http://www.ccer.pku.edu.cn 限制抓取范围:修改Modules、 Submodules 和

Settings : Select Crawl Scope选择 DecidingScope; 用正则表达式完成对抓取的网页的 url的匹配; 限定只抓取文本类型的内容,

缩短爬取时间: Profiles中 setting修改 ” max-delay-

ms”、” min-delay-ms”、” max-retries”、” retry-delay-seconds”的数值,提高抓取效率

设置 -Xmx运行参数增加 JVM内存( 256M-1024M)

Page 3: 习题课 Proj1+hw3

heritrix系统使用

只有一个线程在工作: 原因: Heritrix的 url队列以 hostname为 key,所有相同 key的 url放置在同一个队列里面,也就是说同一个 host下面的所有 url都放在一个队列里面,当线程获取 url时候,会将该队列放置到同步池中,拒绝其他线程访问。

思路:将 url平均分配到 Queue里面,实现更好的多线程同步,

实现方法:采用 ELF hash算法平均分配 url。

Page 4: 习题课 Proj1+hw3

heritrix系统代码分析

要求 :按Week2的web crawler系统结构 , 寻找Heritrix系统里面的crawler的下面四个部分 :

page fetching

isPageKnown

isUrlVisited Politeness分析它们的主要数据结构和算法 . 写一个简短的报告文档 .

Page 5: 习题课 Proj1+hw3

Page fetching

从 Frontier获取到一个 URI之后,处理链对 URI进行处理,包括Prefetch,Fetch,Extract,Write,PostPrecess。其中Fetch主要是完成从web中获取网页。 Heritrix提供了 3 种 Fetch方法:FetchHTTP,FetchFTP,FetchDNS。 FetchDNS 的功能主要是为当前 URI 解析域名, FetchHTTP 和FetchFTP 的功能是来抓取数据。

数据结构: CrawlURI 存储一个 URI的相关信息 HttpRecorder存储一次 http交互过程的获取到的页面信息或文件信息。 HttpRecorder 作为一个 ToeThread 参数将贯穿整个 Processor Chain

Page 6: 习题课 Proj1+hw3

Page fetching

算法:以 FetchHTTP为例 判断能否抓取网页 预处理过程。将在抓取过程中获得的网页信息写到

HttpRecorder 根据URI创建HttpMethod,区分为 POST和

GET 经过抓取网页得到的抓取内容,从中提取内容并根据选定算法计算摘要值,一般是 SHA1和MD5算法,默认为 SHA1。

Page 7: 习题课 Proj1+hw3

isPageKnown Heritrix提供了三种网页去重的策略 策略一:

先抓取一次网页,把 URI和网页的摘要值保存到 Hash表中。在第二次抓取相同 URI的网页的时候,根据 URI索引并比较与之前存在 Hash表中的摘要值是不是相同。

策略二: 是先抓取一次网页,把 URI和网页的摘要值保存到 Hash表中。在第二次抓取相同 URI的网页的时候,根据 HTTP请求返回的 content-length来比较第一次记录的 content-length是否有变化,如果有变化则抓取并存储网页,如果没有变化则放弃该网页。

Page 8: 习题课 Proj1+hw3

策略三在一个抓取过程中,把当前网页的摘要值放到 Hash表里作为KEY值,如果当前网页链接到了一个相同摘要值的网页( KEY值相同)并且 URI不同,就不再抓取和存储这个网页。

数据结构: currentDigest:当前 uri的摘要 A_VIA_DIGEST:前一个 uri的属性

算法: org.archive.crawl.extractor.Tr

apSuppressExtractor通过注意一个网页的内容摘要是否与它的‘ A_VIA_DIGEST‘内容摘要相等来判断。

开始

页面是否下载成功? 否

终止查看是否已经标记页面为重复页面?

取得页面的摘要

取得之前的页面摘要

新旧摘要是否均为空? 是

新旧摘要是否相同?

标记页面为重复页面

忽略剩下的处理链,直接跳到PostProcessor

处理链

其他标记工作

将新摘要保存备用

标记为新页面

Page 9: 习题课 Proj1+hw3

isUrlVisited

作用:在将链接加入队列之前需要查看链接是否已经被处理过了。

Heritrix中 isUrlVisited 的实现有如下需求: 支持多线程读写,大容量。

BerkeleyDB: 实质是一个按照” key/value”方式保存数据的 HashTable。它支持两段锁技术和先写日志策略来保证数据的正确性和一致性,远比简单的 HashTable 的 Synchronize 强大。

数据库和应用程序在相同的地址空间中运行,所以不需要和应用程序进行进程间通信,节省了大量的开销,不会在isUrlVisited的阶段形成性能瓶颈。

Heritrix 的 BdbFrontier 采用了 Berkeley DB 来解决问题,具体做法是将 isUrlVisited 部分实现为BdbUriUniqueFilter 类。

Page 10: 习题课 Proj1+hw3

isUrlVisited

数据结构: BdbUriUniqFilter alreadySeen数据库: (key,value) 组合, heritrix采用了将 url的主机名和整个 url分别计算 fingerprint,以免破坏 url的局部性。

算法: 当使用 BdbFrontier的时候,默认使用

BdbUriUniqFilter作为 alreadyIncluded存储 url信息,可选的存储方式还有 BloomUriUniqFilter等

Heritrix 调用 frontier的 schedule方法将任何一个url 添加到 alreadyIncluded中。当 url 添加进alreadySeen的时候,判断数据库中是否已经有相应的 key存在

Page 11: 习题课 Proj1+hw3

Politeness——线程资源的约束

通过对 politeness 设置阈值, Heritrix 可以使用以实现抓取对被访问服务器造成的压力的控制。

delay-factor 再次访问服务器应当间隔上次访问服务器时间的倍数

min-delay-ms 两次访问同一个服务器最小的时间间隔 max-delay-ms 等待服务器响应的最大时间 respect-crawl-delay-up-to-secs 当读取 robot.txt 时推

迟抓取的时间 retry-delay-seconds 两次尝试抓取页面的时间间隔 max-retries 链接尝试最大数

上述有关 politeness 参数的使用集中在AbstractFrontier 中,用以判断抓取现状,从而采取相应的动作。

Page 12: 习题课 Proj1+hw3

Politeness——robots.txt robots.txt 声明了网站不想被 robot 访问的部分。根据抓取得到的 robot.txt进行文档解析,然后把文档中的内容解析并且传入的 crawler的设定当中,把允许和不允许的内容和对应的 agent进行比较,并且最后得到本身agent所限定或者不限定的内容。

数据结构: Robotstxt:

从 robots.txt中解析出 user agent、 robots指示 (即disallow, crawl-delay, allow)并用 list和一个对应的map结构存储

RobotsHonoringPolicy:crawler对 robots 尊重的 5 个程度 Classic:完全尊重 robot.txt的限定 Ignore:直接跳过 robot.txt的限制进行抓取 custom:用户来定于限制的情况 most-favored:每一个爬虫有多个 user-agent,当全部

agent都得到权限时才抓取 most-favored-set:对于多个 user-agent,有一个能够抓取就允许 crawler去抓取。

Page 13: 习题课 Proj1+hw3

Politeness——robots.txt( 2 ) RobotsDirectives:

为每个 user-agent需要维护一个允许和不允许访问的数据结构, disallows & allows记录robot.txt中对应的指令

RobotsExclusionPolicy: 将这些抓取内容的禁止范围的进一步设定到每一个

user-agent中,在 RobotsHonoringPolicy的基础上,实现最终的 policy,提供一些接口函数

由于并不是每个网站都会存放 robots.txt 这样的文件,在这种情况下 Heritrix 会花上大量时间试图去访问这样一个文件,大大降低了抓取效率。因此,为了提高抓取效率,可以考虑将对robots.txt 的访问部分去除。

Page 14: 习题课 Proj1+hw3

搜集web数据的 graph link analysis

要求:回答以下问题,并给出方法的说明这个网站有多少网页?入度、出度分布情况如何? top 10的最重要页面是哪些?

方法: Pagerank方法(关于 PR值收敛的判断) 网页数量: 17600 左右 入度、出度以及 top10页面情况:基本满足

power law分布的特点。

Page 15: 习题课 Proj1+hw3

获得链接之间的链出关系的方法

方法一:分析 crawl.log:通过观察 crawl.log,可以看到 url与 url之间的关系。 从原始的 log 文件取出链接的目的地址和源地址 从相对的链接地址得到绝对地址 转换 utf-8 编码

当连接可能存在多个来源,即多个页面中都存在该链接时, crawler.log不能提供足够的信息来提供链接之间的关系。

Page 16: 习题课 Proj1+hw3

获得链接之间的链出关系的方法

方法二:分析抓取得到的网页,从网页中找到链接关系。 一种是以网站镜像的方式存储,抓取的页面存储在

jobs/mirror文件夹下,可以对抓取到的页面源码直接进行分析,解析出每一个页面的链出关系。

将文件名映射为链接地址。 一种是以 arc文件的方式存储。由于 arc文件中包含页面内容,可以从 arc文件中提取出页面内容,再在页面内容中把它包含的链接提取出来。

从页面中提取链接不易实现 读取 arc文件不易实现,虽然 heritrix提供了

arcreader方法,但是该方法只能读出 arc文件中每个网页的元数据。

Page 17: 习题课 Proj1+hw3

获得链接之间的链出关系的方法

方法三:修改 Heritrix 源码,在抓取过程中存储链接关系 ExtractorHTML是在 HTML页面中抽取链接,在抽取链接之后添加代码,从而将当前页面以及当前页面包含的链接以一定格式输出到文件。

利用 heritrix 抽出链接关系 能够控制链接关系的输出格式,从而减少后期处理工作。

Page 18: 习题课 Proj1+hw3

文件预处理的实现

在出链中去掉不在站点内部的链接。在对没有处理的文件分析时发现很多错误网页都连接到:http://go.microsoft.com/fwlink/?LinkID= 62293&IIS70Error= 404,将这样的 url进行删除。

若 url1指向 url2多次,为只指向一次。 一些入度非常高,出度却为零的 url,例如

http://www.ccer.pku.edu.cn/cn/event.returnValue= false,其页面是无法访问的,删除。

Page 19: 习题课 Proj1+hw3

问题分析

在入度与出度的分布图中点之间分布比较分散,并没有如讲义中那样基本在一条直线上。 网站架构、内容的单一使得 CCER在某些方面不符合

web的一般特性,而且 CCER站点与web的规模有很大差距。

邻接表 & 邻接矩阵 Boolean的邻接矩阵

ccer.pku.edu.cn与www.ccer.pku.edu.cn

Page 20: 习题课 Proj1+hw3

HW-week3-1

1 PPT23页的例子,矩阵 C经过 SVD和降维近似映射到了 2 维平面。请把这个过程做一遍 (按PPT 上的说明,使用MATLAB 很方便,画图也很方便 )。把 5 个词映射到 LSI 空间中,把它们的向量画出来。把查询 query=(boat voyage) 映射到 LSI 空间中去,把它的向量画出来。查询结果是什么?最后请尝试说明一下 LSI 空间的这两个维度 dim1,dim2大概的含义。

答案要点: 把矩阵变换的过程写

出来,并且画出图来

Page 21: 习题课 Proj1+hw3

HW-week3-1(2)

通过将五个 Term 映射到 LSI 空间的公式

可以求出这五个词在 LSI 空间中的映射。 查询 query=(boat voyage)对应的矩阵为

{0, 1 , 0 , 1 , 0}通过将Query 映射到 LSI 空间的公式

可以求出这Query在 LSI 空间中的映射。

1 kkT

k Uqq

1ˆ kktVt

Page 22: 习题课 Proj1+hw3

HW-week3-1(3)

查询结果根据向量之间的点乘来计算,点乘值越大则两个向量代表的文档越相关: d1和 d5 应该排在前面

dim1和 dim2 是比 term 层次更高的两个特征,可能包含了词的同义、近义等综合因素。如果Query 映射的向量与某一个 dim 很相关(靠得很近),则表示 Query与该维度聚集的那些 term相关度高

Page 23: 习题课 Proj1+hw3

2 Bob(上次那个 Bob)跑来感谢你,上一次建 ccer网页库的 inverted index,查询效果很好。谈话间, Bob问:听说现在 Language Model很 popular,你建的 inverted index可以用来支持 LM吗?你觉得呢?

答案要点: 可以用来支持 LM。但只能支持 Unigram Language

Model,因为无法计算 term之间的条件概率。 可以给出语言模型的公式,对于公式中的参数,说明如何得到,或者如何计算。

P(w|d) = Pmle(w|Md) + (1 – )Pmle(w|Mc)例如,查询词的 DF, CF信息 ; 每篇文档中查询

词的个数 ;查询词在文档中的 TF一个 term在对应 Document ID的文档中

的出现概率 Probability,只要用 Frequency/ 词的总数=Probability 即可,词的总数可以在切词时获得

HW-week3-2

Page 24: 习题课 Proj1+hw3

3 举例说明multinomial distribution和binomial distribution的关系和区别。

答案要点: 二项分布是多项分布的特例。可以给出公式,并加以描述。

举例如:抛硬币,掷骰子等等

HW-week3-3

Page 25: 习题课 Proj1+hw3

Q&A