第一章 绪论
本系统的应用背景是实验室一个关于“孔子学院跨文化传播影响力研究”的项目。孔子学院是中国国家对外汉语教学领导小组办公室在世界各地设立的推广汉语和传播中国文化与国学的教育和文化交流机构。孔子学院的目的是为了宣传中国的文化,展示中国的方方面面,从而起到一个窗口展示的作用,让更多的外国人了解中国,认识中国。本文的设计目标是实现一个小型的、高效的采集和查询检索系统,通过采集英文站点中和中国新闻相关的英文报道,分析新闻的数据内容,当用户进行查询时,对查询词进行查询纠错,并做查询推荐,推荐相关性大的词语给用户选择,帮助用户明确查询目的,让用户得到更好的查询建议,最终对检索网页的效果有所改善。本文实现了系统中的三个模块,最后的网页排序模块没有实现,由其他人负责。本文实现的网页采集部分和之前的主题采集有所不同,对采集之后的网页进行离线的二元分类,把网页分为和中国新闻相关和不相关的两大类,只对相关的网页做进一步的分析处理。本文的重点在于查询词语推荐这一块,使用的是基于上下文向量的方法。
..........
第二章 相关理论知识
2.1 普通爬虫的抓取策略
深度优先网络爬虫采取的策略正好和宽度优先爬虫相反,采取的策略是先进后出。这个策略从树的源点出发,然后优先往树的下一层遍历,直到访问到指定的深度,当还存在未访问的节点时,返回上一层节点,继续选择一个未访问的节点,继续深度遍历访问,直到所有指定深度的节点都被访问完毕。所以,按照这种遍历的策略,深度优先遍历的网络爬虫占用的内存比较少,所占用的内存和遍历深度成线性增长。但是,深度优先网络爬虫容易陷入迷途,有可能陷入网络蜘蛛陷阱,或者造成主题漂移,通过设置一定的深度阈值,来解决这个问题。
2.2 URL 去重
当爬虫采集的时候,需要辨别出哪些 URL 已经采集过了,哪些还没有采集。使用普通的 Hash 表来存放采集过的 URL,占用内存较多,而布隆过滤器占用的内存较少。,这样就大大减少了内存的占用,因为每个元素只需要 k 个比特。布隆过滤器使用 k个独立不相关的函数把每个插入的元素映射成为 k 个比特,存放在一个二进制比特向量里面把数据插入布隆过滤器时,会把 k 个位置的比特设置成 1。所以当检查到某一个位置为 0 的时候,这个元素绝对不可能存在于这个布隆过滤器中的,所以不可能发生漏报(False Negatives,假阴性)的情况。相反,如果经过 k 个随机函数映射转换后,检查到所有的比特位置都为 1,那么这一个元素有可能存在于布隆过滤器中,也有可能不存在。因为有可能是其他元素插入布隆过滤器后,经过随机函数的转换,把这些位置上的比特设置为 1,导致元素本来不存在于布隆过滤器中,却错误地认为存在,这种情况叫做误报(False Positives,假阳性)。当插入布隆过滤器中的元素过多的时,会导致误报率上升,这是因为在有限的空间里面,尽管使用随机函数进行哈希分散,仍然会产生碰撞。
第三章 系统总体设计与架构...............................15
3.1 系统的需求分析...................................... 15
3.2 系统的总体设计.................................. 15
第四章 系统的具体设计与实现........................................20
4.1 网页采集模块.................................... 20
第五章 系统的测试与分析...................................47
5.1 测试和开发环境..................47
5.2 测试与分析............................................. 47
第五章 系统的测试与分析
5.1 测试和开发环境
整个开发环境如下表所示:前端的界面使用简单的 JSP 进行实现,这个界面主要是用来当做查询的搜索界面,具体截图见后一节,后台服务器使用 Tomcat 6.0 来搭建这个查询网站。
5.2 测试与分析
使用多线程的方式采集网页,能够加快网页的采集,减少了大量网页的等待时间。以网站 为例子来测试多线程的采集效率,把这个网址注入到初始列表中去,通过采集这个网站内的 100 个网页,分别查看线程大小为 N=1,5,10,15,20 时采集这些网页所需要的时间,从这个时间的曲线中看出多线程采集的优势所在,随着线程数目的增长,抓取时间在不断减少,但减少的趋势放缓收敛。如图 5-1 所示,横坐标是采集 100 个网页所需要的时间,这个时间随着线程数目的增多,在不断地减少,由此验证多线程提高了采集的效率。表 5-2 展示了网页的分布来源。最终剩下的相关的网页总共 100127 个,总共大小为 607M。从 100127 个文档中使用斯坦福的开源的词性标注器(stanford-postagger.jar和english-bidirectional-distsim.tagger)进行分词,去除出现次数少于 10 篇不同的文档的词语,总共生成的词表大小有 84761个词语,大量的词语只出现少数的几次,是不重要的词语,这部分词语不参与计算。(2)URL 去重效果的测试。URL 的去重算法使用的是布隆过滤器。布隆过滤器不会漏报,也就是说已经存在于布隆过滤器里面的 URL,当有重复的 URL 时,因为使用的是同样的 Hash 函数,所以不会导致漏报。但布隆过滤会导致误报,错误的把一个新的 URL 当做重复的 URL。
.........
总结和展望
为了满足实验室的项目需求,本文设计与实现一个小型的带查询推荐的检索系统。爬虫采集时,需要对 URL 进行转换、过滤、去重。抓取完网页之后,进行网页去噪,网页去重,网页存储。对于抓取的内容进行预先计算,然后当用户进行查询的时候,能够提供查询纠错、查询推荐,帮助用户检索到准确和全面的信息。本文主要工作有:(1)采用基于 HtmlUnit 的多线程的技术采集网页,能够采集部分的动态网页。(2)URL 去重部分使用的是布隆过滤器,这是一种高效的去重方式,在空间上和时间上都有巨大的优势。(3)网页去重部分使用的是 Simhash 的算法,这是一个大规模的去重算法,算法法的思想是分治法,通过一定的空间代价获取时间上的效率。(4)查询纠错部分是基于自然语言处理中的二元语言模型进行纠错,利用到隐马尔科夫原理,使用贝叶斯概率公式,动态规划的思想进行求解。(5)查询推荐部分基于词语的上下文向量,通过统计大规模的文本,利用词语的上下文构造出词语的向量,利用上下文向量的相似度计算方式能够推荐更强的相关性的词语。(6)本文针对查询纠错和查询推荐的数据部分设计和实现了一个高效的索引文件,能够快速查询和批量式的增量更新。本文还存在着一些不足之处,有待进一步的改进和完善,这也是今后的工作方向。系统的采集部分,还没有实现主题采集,爬虫的规模较小,需要扩展成分布式的采集。网页的分类、索引和排序部分是由其他人参与实现的,本文没有实现。
.........
参考文献(略)