毕业设计(论文)-社会图书检索系统的设计与实现.doc_第1页
毕业设计(论文)-社会图书检索系统的设计与实现.doc_第2页
毕业设计(论文)-社会图书检索系统的设计与实现.doc_第3页
毕业设计(论文)-社会图书检索系统的设计与实现.doc_第4页
毕业设计(论文)-社会图书检索系统的设计与实现.doc_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京科技大学本科生毕业设计(论文)摘要社会图书,是指包含评分、评论等社会信息在内的图书的信息。然而,当下的通用搜索引擎无法保证检索的速度以及结果中的图书信息准确性和相关信息的完整性,还包含大量的冗余信息,且不包含任何社会信息。因此,开发一个社会图书垂直搜索引擎就变得十分必要。本文首先介绍了搜索引擎的发展以及相关图书搜索引擎在国内外的发展,之后又介绍了网络爬虫、正则表达式、MySQL、中文分词、Lucene.NET以及ASP.NET的相关知识。最后,设计并实现了一个社会图书检索系统,该系统的设计与开发主要完成了以下的工作:(1) 完成了社会图书检索系统的设计。设计包含检索系统的设计、各个模块的设计和对于技术难题的分析三部分。将整个检索系统分成了5个模块:数据抓取和下载模块、数据解析与清洗模块、数据库设计与数据存储模块、分词和索引模块、检索和界面设计模块。整个技术的难点在于数据的抓取、数据库的设计和对数据库建立索引库。(2) 完成了社会图书检索系统的实现。依据对社会图书数据的结构特点的分析,设计了一个关系数据库用来存放数据。使用PHP语言通过豆瓣的sitemap对图书网页进行采集和下载,通过正则表达式对网页数据进行解析和清洗得到和关系数据库相关的数据存入MySQL数据库中。通过对Lucene.NET技术的使用对关键列进行分词和索引,得到索引库,最后通过对索引库的检索,实现了由关键词到图书的检索过程。(3) 根据豆瓣图书网页更新规则,提出了一种实现本检索系统更新的方法。每隔一个周期重新对豆瓣图书的sitemap中的网页进行读取,根据更新日期选择性下载网页,然后将新数据在数据解析与清洗模块、分词和索引模块中重新运行,即可更新整个系统的信息。经实际应用验证,该系统可以通过关键词快速检索出图书信息和社会信息。关键词:搜索引擎,Lucene.NET,社会图书The Design and Implementation of Search Engine of Social BooksAbstractSocial books are books that contain both publication information and social information like ratings, reviews, etc. However, general search engine cannot retrieve as fast as it is supposed. Moreover, the accuracy and complement of the book information and the information related to the books cannot be guaranteed which contains large amount of useless information. As a result, designing a vertical search engine of books is becoming necessary.In this paper, the development of search engine is introduced followed with the domestic and overseas situation of related search engine of books. After that, useful tools and knowledge used in the system are briefly introduced one after another like the spider, regular expressions, MySQL database, word segmentation, Lucene.NET, also ASP.NET and some technology related. Finally, a search engine of social books is designed and implemented. During the development, following work is done:First task is to finish the design of the system. The designing task concludes 3 parts, which are the overall design of system, the design of each module and the analysis of technical problems. I divide the system 5 modules: the module of data collection and downloading, data parsing and cleaning, database, indexing and retrieving. The technical problems focus on data collection, the design of database structure and the indexing.Secondly, I finish the implement of the system. According to the analysis of the data structure of books, I design a database to save data. Use PHP as a tool to download the web pages of . Use regular expressions to parse and clean data to save in the database. Index the vital column of database with Lucene.NET and implement the retrieving through visiting the index database.Thirdly, put forward the rules to updating data of the system. Read and download the sitemap each of the cycle. Download data according to updating date of the web pages. Rerun the system to update the new data.It is verified by practical application that the system can quickly retrieve the book information and social information by keyword.Key Words: Search Engine, Lucene.NET, Social Books- 4 -目录摘要IAbstractII插图或附表清单1引言11文献综述21.1 课题背景和研究意义31.1.1图书搜索引擎出现的背景31.1.2本课题建立的背景31.1.3开展研究的意义41.2 本课题国内外研究进展51.2.1搜索引擎国外研究进展51.2.2搜索引擎国内研究进展61.3 论文研究内容71.3.1目标数据的下载与清洗81.3.2图书信息数据库的设计、建立和更新91.3.3图书搜索引擎的实现91.4 论文组织结构102相关理论与工具介绍112.1 网络爬虫介绍112.1.1网络爬虫的概述112.1.2网络爬虫的结构与原理112.1.3网络爬虫开发过程中需要注意的问题122.2 正则表达式介绍132.2.1正则表达式的概述132.2.2正则表达式的语法132.3 MySQL关系数据库介绍142.3.1MySQL关系数据库的概述142.3.2MySQL关系数据库的系统特性142.3.3MySQL关系数据库的应用架构142.4 中文分词技术介绍152.4.1中文分词技术的概述152.4.2常见的查找词典算法152.4.3中文分词原理162.4.4中文分词的流程和结构162.5 Lucene.NET搜索引擎介绍172.5.1Lucene.NET搜索引擎的概述172.5.2Lucene.NET的索引原理和检索模型172.6 ASP.NET介绍182.7 小结183社会图书检索系统的设计193.1 系统总体设计193.1.1总体功能描述193.1.2检索系统的各个模块203.2 各个模块的详细设计213.2.1数据抓取与下载模块213.2.2数据解析与清洗模块213.2.3数据库设计与数据存储模块223.2.4分词与索引模块233.2.5检索与界面设计模块243.3 技术难点分析243.3.1突破豆瓣陷阱下载豆瓣网页243.3.2关系数据库设计253.3.3数据解析中网页数据格式问题253.3.4海量数据存取效率问题263.3.5全文检索问题273.4 小结274社会图书检索系统的实现284.1 网页数据的获取和下载284.1.1使用Heritrix爬虫进行抓取284.1.2豆瓣反爬虫机制的分析294.1.3sitemap的读取和网页的下载304.2 数据的解析与清洗344.2.1图书网页的结构分析344.2.2图书网页的解析与清洗364.3 数据库的设计与数据的导入存储414.3.1数据库的设计414.3.2数据的导入与解析结果的检验434.4 数据库的分词和索引454.4.1索引库的设计454.4.2索引库的创建464.4.3索引库的优化与合并484.5 检索过程的实现494.5.1最基本的检索过程494.5.2可拓展的检索功能514.6 小结515系统功能测试525.1下载功能测试525.2解析和数据库功能测试535.3索引功能测试535.4检索功能测试53结论55参 考 文 献57附 录60附录A 英文文献60附录B 英文文献译文66在 学 取 得 成 果72致谢73北京科技大学本科生毕业设计(论文)插图或附表清单图1.1 社会图书检索系统的结构示意图8图2.1 网络爬虫的处理的流程图12图2.2 MySQL数据库的架构及应用15图3.1检索系统的IPO图19图3.2 检索系统的功能流程图20图4.1 豆瓣网robots.txt的内容30图4.2 豆瓣的sitemap的内容(部分)31图4.3 生成的下载日志34图4.4 豆瓣的cookie格式34图4.5 豆瓣原网页和下载后的网页的对比35图4.6 豆瓣信息清洗工程以及文件37图4.7 经过清洗的数据的SQL(部分)40图4.8 本地图书数据库信息44图4.9 索引日志的内容49图5.1 网页HTTP报文52图5.2 存放网页的文件夹52图5.3 数据库内存放的图书信息53图5.4 索引文件53图5.5 检索功能的实现54表3.1 数据抓取与下载模块功能列表23表3.2 数据解析与清洗模块功能列表24表3.3 数据库设计与数据存储模块功能列表25表3.4 分词与索引模块功能列表26表3.5 检索与界面设计模块功能列表26表4.1 图书出版信息表43表4.2 图书网络信息表44表4.3 图书作者信息表45表4.4 图书出版信息索引47表4.5 图书网络信息索引表48表4.6 图书作者信息索引48- 72 -引言随着图书的数量以及人们对于图书信息的需求量的不断增加,图书已经以其信息量大小以及信息类型的独特,独立于其他信息源,成为一个新的信息领域。因此,为图书信息领域寻找一种简易快捷的得到信息的方式成为一个新的课题。当下的通过搜索引擎,比如百度、谷歌已无法直接满足人们对于图书信息的多种多样的需求,更无法保证检索结果中图书信息的准确性和以及相关图书信息的完整性,取而代之,专业的图书垂直搜索引擎成为获取图书信息的更好选择。当图书成为了人们讨论的话题,关于图书的一些社会信息也就随之出现。人们会给自己读过的书打分,写下自己的评论或感受,记录下书中的优美的句子或者写下读书笔记,这些与图书相关的社会信息,对后来读同一本书的人可能非常宝贵。现有的图书搜索引擎的搜索范围局限于图书以及和图书直接相关一些信息,但针对图书评分、评论、笔记一类的社会信息,现有的搜索引擎没有任何涉足,最多是在检索结果中显示出社会信息,而不包含基于社会信息进行的检索。本论文旨在设计并实现一个社会图书的搜索引擎,首先对豆瓣图书信息进行抓取和下载,然后对下载到的图书信息进行解析,并将解析出来的信息进行分类、统一数据格式等数据清洗的工作,以得到一个本地的海量图书数据库。根据数据库的内容以及实际图书检索的需求,选取书名、作者、ISBN以及内容简介这四个关键列作为可以被索引的对象,使用Lucene.NET技术对数据库中被选取的项进行中文分词和索引,对数据库的几个关键列,创建一个Lucene.NET的索引库存储其索引结构。最后通过对索引库的查询,实现对关键列的查询,从而减少在数据库搜索的时间。最终,通过实现对于图书信息的多种检索方式,实现由关键词到索引库中与检索词关联的检索结果的目标。读者只需要在搜索引擎的接口键入关键词,选择查询方式,即可得到包含图书基本信息的结果列表,结果列表中只包含关键列的信息,以区分不同的书目。用户还可以通过对结果列表任意一本图书的访问,即可得到该图书的目录、内容简介、出版社、出版日期等图书的基本信息以及网络用户评分、读者书评和读者读书笔记、相关书籍等与图书相关的网络信息。1文献综述搜索引擎一代又一代的飞速发展,已经逐渐的使人们对于信息的记忆方式发生了天翻地覆的变化。根据某个研究的结果,人们会更加关注自己无法在网络直接获取的信息,而并非自己可以在网络直接获取到的信息。也有另外一个研究表明,人们更容易记住自己在网络中获取到所需要的信息的方法,而不是这些所需要的信息本身1。这个结论告诉我们,人们开始逐渐使用搜索引擎,作为一种代替人们进行记忆的工具。当下,传统搜索引擎的综合性搜索已经逐渐走向成熟期,针对全民用户的多元化的一般检索需求,基本上能够达到用户的要求。但由于信息时代,信息量以迅猛的速度进行增长,传统搜索引擎便显得捉襟见肘,尤其在索引库方面和信息抓取等方面,导致了结果列表中存在很多无用信息,甚至缺少应有的结果2。这一问题在用户具有专业检索需求时则显得更为突出,这使得这些搜索引擎在专业搜索中显得很无力,完全无法满足用户的需求。针对专业搜索的需求,一种搜索范围相对狭窄,以便能够在某个学科、行业、领域能够有最好的检索效率的搜索引擎,成了搜索引擎的新的需求,就这样,垂直搜索引擎随之产生。垂直搜索引擎的应运而生,成为搜索引擎发展史上的一块里程碑。随着社会的发展和人们文化水平的提高,人们对于图书这一信息来源的需求也越发的增加。图书的种类也由单一的纸质书发展到纸质书和电子书。对于图书这一海量的信息,开发一个方便有效的搜索引擎就成了一个新的课题。显然图书搜索引擎将成为人们对于获取图书信息的最为重要的方式之一。同其他领域一样,传统的通用搜索引擎,在图书领域中,更加无法解决来自于读者的多元化需求。改变这种状况的根本办法,就是推出专业图书搜索引擎3。本课题意图研究和开发一套基于本地图书数据库搜索的图书的搜索引擎,用户可以通过键入关键字来搜索图书,得到图书的基本信息,网络信息,和书评、读书笔记等一系列的有关于图书的信息。通过在豆瓣网上下载图书的网页,清洗数据,信息整理入库,建立索引库,设计搜索算法,实现用户界面,完成一个简单的图书的搜索引擎,方便用户使用。1.1 课题背景和研究意义1.1.1图书搜索引擎出现的背景图书是人类用来记录一切人类文明的载体,也是人类用来交流感情、学习知识、传授经验的介质。可以说无论古今中外,图书都承载了人类前进的脚步。从刻在甲骨上的文字图画,到丝帛,到竹简,再发展到纸质版的书,最后出现了电子书。不论科技如何发达,图书作为传播文化的媒介的地位,始终不可代替,不会动摇4。到目前为止,豆瓣、当当和亚马逊等图书网站中,豆瓣的书目最为齐全,共有300多万本图书收录在豆瓣图书中。搜索引擎这一工具的出现,似乎让人们对于信息的查找变得异常的简单。我们可以通过搜索引擎查找到任何自己想要的东西5。打个比方,我们要用通用的搜索引擎搜索一本关于AVR单片机方面的书籍,我们输入关键字“AVR单片机”,会得到大量的检索结果,观察这些结果,我们不难发现,有绝大多数的结果其实并不是我们要找的图书,有的是有关于AVR单片机课程的课件习题,有的是AVR单片机的辅导班,这些可以说与书籍没有关系。通过这个例子我们可以发现一个问题,当我们要对图书的进行搜索的时候,搜索结果会有大量的和图书无关的我们所不需要的信息,那么,怎么样才能准确的找到我们想要的图书的信息呢?图书搜索引擎显然可以很好地把这个问题解决。因此,我们可以这样说,图书搜索引擎为我们提供了一个获取图书信息的途径6 。图书搜索引擎是图书领域中垂直搜索引擎,这种搜索引擎获取信息的时候,会把信息按照图书进行过滤和分类,而且最小单位也不再是网页或者网页块,而是结构化数据,然后会有将这些数据存储到数据库,以及进行数据加工、分词、索引和搜索的过程,以满足用户的需求。1.1.2本课题建立的背景目前,人们对图书的需求越来越高,带动着所需获取的图书信息的种类也越来越多,需求不再仅仅局限于图书的内容本身,而拓展一切和图书相关的信息,比如其他读者对这本书的评价、评论感悟,甚至还有其他读者的读书笔记。同样地,由于人们的生活节奏越来越快,越来越无暇去图书馆,一本一本去翻阅图书找到自己需求的资料和信息7。这时候我们需要有一个便捷的图书搜索引擎,除了能够提供图书的基本信息,还能够提供阅读过图书的读者为我们带来的评论和读书笔记的信息。不仅可以通过图书的最基本的出版信息,比如说书名、作者进行检索,还得可以通过图书的基本内容对于图书进行搜索。只有这样,才能够真正做到节省读者的时间,在读者不知道书名和作者的情况下,也能通过内容对图书检索,才真正实现了使用搜索引擎的初衷。基于以上现状,本课题意图设计和开发出一个可以实现根据关键词搜索豆瓣图书的相关信息的图书垂直搜索引擎,满足读者的检索需求。1.1.3开展研究的意义社会图书检索系统,是针对读者对于图书的需求,将图书信息的收集与下载,图书信息的解析和清洗,图书信息的统一存储,图书信息的分析索引,图书信息的检索为一体的搜索引擎:将元数据集设定为豆瓣图书的网页,使用PHP进行网页的收集和下载,建立MySQL关系数据库存储数据,通过Lucene.NET索引关系数据库,最后通过对索引库的检索来检索数据。开展对社会图书检索系统的研究的意义在于:(1)方便读者对于图书信息的检索:为读者用户提供一个方便实用的图书搜索引擎。用户可以通过输入关键词,并且可以通过图书作者、图书标题、图书的ISBN,对图书信息进行检索,与其他图书网站不同的是,用户还可以通过图书的基本内容对图书进行检索。而且,获取的内容也不仅仅局限于图书的内容,还包括,其他读者对于图书的评分、对于图书的评论以及写下的读书笔记。(2)为社会图书推荐系统准备数据:社会图书检索系统是一个垂直搜索引擎,搜索过程是基于本地的数据库的数据来完成的。因此研发检索系统的过程会准备一个本地的海量图书数据库,并且会根据搜索项对于数据库建立索引库。这个海量图书数据库和索引库可以为以图书作为数据源的其他研究工作,例如社会图书推荐系统,提供真实有效、格式统一的数据,使其他研究工作的准备工作变得简单。(3)为其他数据源提供可复用的搜索引擎:进行社会图书搜索引擎的研究过程所涉及的方法,均可以直接用于开发检索其他数据源的垂直搜索引擎中,整个数据下载、数据清洗、建立索引库、进行检索的程序均可直接用于对其他数据源的搜索引擎的开发。1.2 本课题国内外研究进展1.2.1搜索引擎国外研究进展当下,主要有以下几类搜索引擎在国际上非常流行,使用频率较高:(1)基于目录的搜索引擎:这种搜索引擎是指搜索引擎的搜索过程是基于目录的,所谓的目录就是不同类别的信息进行分类收集到不同的目录中。基于目录的搜索引擎,最典型的例子是Yahoo。基于目录的搜索引擎有两大致命缺点:目录是按开发者或者分类程序的算法进行分类的,分类的方式仁者见仁智者见智,很可能与用户的想法并不一致导致无法查找;用户查找的信息无法对应任何分类,则无法进行搜索8。(2)基于机器人的搜索引擎:这种搜集引擎的搜索起点是一组已知的文档,搜索路径是这些文档的超文本链接,也就是通过这些链接来确定新的检索点,并且用索引机器人遍历确定的新的检索点,以便这些检索点上的新文档进行索引后加入到目标的索引库。针对用户的搜索要求,搜索引擎使用这个生成的索引数据库去检索用户所需的信息。检索算法分为深度优先算法和广度优先算法两种。广度优先算法中,新服务器上的新文档是首先被索引的目标,然后才是已有服务器上的新文档,这样做的优点是可以找到尽量多的服务器并保证每个服务器上都会新文档加入索引库中,因此,它能降低服务器被访问的频度,缺点是对文档的结构进行发掘9。深度优先的算法则刚好相反,该算法更加关注文档结构,系统相对来说也会比较稳定,缺点是有可能由于文档的关联导致检索进行死循环。这种搜索引擎的缺点是安全性能差及给网络和服务器造成的负载,著名的基于机器人的搜索引擎有ALTAVISTA等。(3)基于关键字检索的搜索引擎:这是我们最为常见的一种搜索引擎。从用户提供的关键字出发,以万维网作为数据库,检索包含此关键字的文档,传送这些文档到结果集中,解析这些文档中的链接,通过链接寻找更多的文档加入结果集。结果集在被提交给客户之前,会有排序算法对所有结果集中的文档按照和关键词的相关度进行排序10。基于关键字的搜索引擎发展到下一代,会把用户的访问信息作为新的排序依据,来为用户提供个性化服务。(4)元搜索引擎:这种搜索引擎的核心搜索过程都是交给其他搜索引擎来完成的,而它的核心内容在于对用户界面的改进,以及采取多种多样的方法过滤其他搜索引擎递交给它的结果文档,包括消除重复的数据等等。这种搜索引擎的设计理念和开发相对简单,但代价是对网络造成过大的负载。典型的元搜索引擎有METACRAWLER等。(5)分布式搜索引擎:这种搜索引擎的核心是分布式索引服务器。索引服务器是按照一定的标准来创建,不同的服务器之间可以进行中间信息的互换,可以进行对其他服务器的定向。当用户的查询请求在一个检索服务器上,没有检索到合适的结果集,被请求的服务器可以转发用户的查询请求到可以检索到结果的检索服务器上。这种搜索引擎的特点是索引数据库会分成几个分布的数据库,几个分布的数据库的容量都不会很大。然而,整个搜索引擎的覆盖范围变大并且很少有冗余信息,分布式系统特的可扩充性也可以体现在分布式搜索引擎之中11。这个搜索引擎的实现依靠索引数据库的协同工作,这一点实现起来非常困难,因此目前还没有真正的分布式搜索引擎。1.2.2搜索引擎国内研究进展3B大战的爆发无时不刻提醒着我们一个事实,国内的搜索引擎界已经不再是如同前几年的老样子,那么的风平浪静。似乎不管是舶来品谷歌、必应,还是作为后起之秀的搜狗、搜搜及有道,都没有和百度一战的信念,或是心有余而力不足,觉得没有实力与百度一战,或是习惯了安逸,百度有肉吃自己有汤喝,便不再去争什么,各个搜索引擎之间过着相安无事的日子。百度搜索:无疑国内搜索引擎界公认的霸主地位。在国内,百度搜索引擎可以算的上是家喻户晓,“百度一下”一度成为网络用语的时髦词。尽管在前期似乎遇到一些困难,各个板块都停滞在一个瓶颈,无法前进,但在2011年,互联网开放了共享,百度则在第一时间为程序开发者提供了开放平台,为开发者提供福利。在最近一次的百度世界大会,百度将核心云直接开放给开发者,提供包括百度个人云存储(PCS)等七项云应用生成服务,让开发者的开发过程变得更加简单。这意味着百度已不仅仅是一个搜索引擎,还成为了一个平台提供商12。搜狗搜索:搜狗自从2004年上线,就开始摸索了一套综合性打包推广的方法,把搜狗搜索引擎搭配上搜狐门户、搜狗浏览器、搜狗输入法几个产品共同进行推广。很显然,这样的综合性推广具有很强大的优势和很显著的效果。由于搜狐门户网的信息资源很广很充足,搜索就有大量的信息源。同时搜索引擎开放了API数据接口,为程序的开发者提供大量的便利,招引大批的开发者前来,以生产更多新的应用产品。腾讯搜搜:腾讯搜搜基本上还是以传统搜索引擎的模式在进行运营,而与其他搜索引擎不同的是,与腾讯搜搜绑定在一起的QQ客户端,搜搜功能直接集成在客户端上面,每一个QQ用户都可以使用客户端来访问搜搜,能够非常方便的实现搜搜的搜索过程,完成网页与客户端的共同使用。有道搜索:在“互联网开放共享”的网络大环境下,有道始终坚持“不做平台做搜索”。同时,有道也在逐渐走向综合性网络推广的道路,也是在将有道词典有道翻译有道门户网站结合有道搜索进行推广。中搜:实行的是第三代搜索。中搜的核心技术是第三代搜索技术,领域是通用搜索引擎领域。据有关资料称,第三代搜索引擎技术在经历了第一代的桌面搜索、第二代的网页搜索、垂直搜索以及行业搜索之后,定义了第三代的CIVIA标准,能够保证将用户搜索的内容进行智能的推送给用户,并且能够与用户进行互动。360综合搜索:360搜索目前所推出的几项产品基本上和其他几个搜索引擎雷同,比如说新闻、网页、视频、图片等搜索,并没有什么新鲜的创意和自己的特色。其中新闻、网页、视频及问答为360自行开发的产品,数据来自于自己的数据库,而搜索的图片数据是取自即刻搜索与谷歌的,而所有的视频数据是取自谷歌与搜库的,整个地图数据都是取自谷歌的,音乐数据也是取自于谷歌和搜狗的,而购物的数据则是从淘宝及凡客诚品取来的。即刻搜索:也就是人民搜索,人民搜索自2011年6月底,正式改用新域名jike,人民搜索也就变成了即刻搜索。即刻搜索的产品除了其他搜索引擎同样提供的新闻、网页、视频、图片等搜索,还提供了诸如曝光台和食品安全这样的特色搜索13。即刻搜索旨在以搜索为核心,建立一套互联网生态体系,为互联网的发展营造良好的环境。1.3 论文研究内容本课题意图研究和开发出一套可以实现根据关键词搜索豆瓣图书的相关信息的简易的搜索引擎。利用此系统,可以让用户在界面上输入一个或多个关键词,搜索出和关键词相关的图书的信息。整个工具完成流程如下:先从豆瓣把所有相关的网页下载到本地,进行数据清洗,提炼需要的数据,进行格式的统一存储在数据库里;然后对数据库进行分词和索引,建立索引库,设计查询算法访问索引库,达到搜索的目的,最终实现用户界面,完成整个搜索过程。整个系统的结构如图1.1。图1.1 社会图书检索系统的结构示意图1.3.1目标数据的下载与清洗这是本课题实现的基础。数据准备是搜索引擎的基础,没有数据搜索无从提及。本课题使用的数据来自于豆瓣图书,即下的所有网页数据。有两个方法可以采用,第一种是使用豆瓣本身的sitemap找到所有的URL,写一个下载器对网页进行下载;第二种是通过对开源爬虫Heritrix的参数进行修改,直接爬取下的所有网页。无论是哪种方法,都必须解决的问题就是豆瓣的反爬虫机制,防止下载的网页全部是404 Forbidden 这样的无效数据。豆瓣图书的网页信息,由于豆瓣开发人员的批次不同,导致网页的格式标准不同,数据的内容属性都很复杂,因为会给清洗工作带来很多影响。豆瓣图书信息包括:图书基本信息、图书评价信息(用户打分)、书评和读书笔记。对于不同类别的信息,通过正则方法清洗的过程中,不断进行检查和修改正则表达式,把冗余和不需要的信息去掉,对需要的信息进行提取 14 。由于网页上直接提取出来的数据格式并不统一,还需要把提取出来的有效信息进行格式的统一。只有格式统一的数据,才能够方便的与数据库交互,增、删、改、查的数据库相应操作得到的数据才能够可靠 15 。据不完全统计,豆瓣大约有300多万本图书,其中每本热门图书有20以上的评论和20以上的读书笔记。所以数据量非常大,数据的下载工作非常耗时,所以在课题的开展中,需要考虑对所有的图书数据一边下载一边清洗。1.3.2图书信息数据库的设计、建立和更新这是本课题核心目标之一。由于豆瓣图书是我数据结构十分复杂,层次多,节点多,这就意味着数据的属性多,数据的内容复杂,对数据库的设计要注意多方面的影响:(1)分析好需求,找实体要注意全面;(2)对照需求分析实体里所需的属性;(3)对照需求分析属性的类型,长度;(4)实体间的关系,要满足需求和现实;(5)写出并优化关系模式;(6)在安全性保证的情况下创建数据库16 。对于豆瓣图书数据库结构的设计,有以下思路:把数据分为books和reviews两部分,其中books中存放的是图书基本信息,图书的网络信息,图书的作者信息,reviews里面存放图书的评价信息,评论信息,笔记信息,以及一系列和读者有关的信息 17 。豆瓣上图书的信息与日俱增,时时更新。当有了新的数据,可以重新运行一次程序,将更新的书籍信息解析清洗后更新入总库,并可以参与后续的搜索任务。1.3.3图书搜索引擎的实现一个完整的搜索引擎的开发,包含网络爬虫,文档的清洗和索引,自然语言处理,中文分词,搜索算法,搜索用户界面的实现。而最核心的部分就是搜索的算法和搜索用户界面的实现 18 。对于已经建立好的数据库,通过分词算法和索引算法进行索引,建立一个索引库,然后通过一定的搜索算法来遍历这个索引库,本次课题是通过开源程序Lucene.NET来从索引库中查询出和关键词相关的结果。在用户输入搜索词进行查询过程中,搜索引擎首先要做的就是分析查询串的文本并对文本进行分词,确定用户需要查询的字符串数组,接下来就是对比字符串数组与索引库,查找相应的目标数据,添加到结果集中。如果查询本身涉及多个词,就需要使用布尔逻辑来多次对比索引库,来确定结果集,并为结果集中的每一个条目打分,分数为条目和查询词的相关度,按照分数排名对用户推送结果 19 。为了方便用户的使用,还要完成搜索用户界面的实现。界面的实现主要分为搜索页面的设计,搜索接口的实现,实现关键字的高亮显示,实现分类统计视图,可选的相关搜索词的实现,AJAX自动完成的实现几个步骤 20 。除此之外,还可以集成一些拼写检查、黑名单等辅助功能。1.4 论文组织结构第一章,文献综述。首先,对于图书搜索引擎的课题的研究背景和研究意义进行介绍。然后,了解了在国内外,图书搜索引擎目前的现状以及研究的进展情况。最后,明确了本论文主要进行的研究工作内容。第二章,相关理论与工具介绍。对于网络爬虫、正则表达式、MySQL、中文分词、Lucene.NET以及ASP.NET等相关知识进行简单的论述。第三章,社会图书检索系统的总体模块设计。对于社会图书检索系统的设计、各个模块的划分、关系数据库表格结构的设计、索引库结构的设计、对于技术难题的分析等内容进行了简要论述。第四章,社会图书检索系统的具体实现过程。详细介绍了检索系统在数据采集和下载,数据解析和处理,数据库创建与数据导入,中文分词以及索引数据库,对索引库的检索等内容的具体实现过程,并且介绍了在实现过程中遇到的特殊问题和特别解决的方法。2相关理论与工具介绍2.1 网络爬虫介绍2.1.1网络爬虫的概述网络爬虫也叫网络蜘蛛,如果将整个互联网比作一张大的蜘蛛网,网络爬虫就是在网上爬来爬去的蜘蛛。网络爬虫实际上是指在搜索引擎中,一个不断执行某项任务的Robots程序,其作用是获取整个互联网的信息。网络爬虫主要是利用首先访问到的网页里面的超链接,读取URL并爬到另一个网页继续做重复的工作,通过这种方式来遍历整个互联网21。而爬虫收集到的信息可以用作很多方面,最重要的一个方面就是为搜索引擎提供相应的数据源。每一个网站都可能会有不希望被爬虫收集到的内容。网站可以通过两种方法来防止爬虫的访问。有一种方法是在网站添加一个纯文本文件,一般命名为robots.txt;另一种方法是直接在网页的源代码中使用robots的meta标签。在爬虫对网页进行爬取的过程中,大多数爬虫会遵循Robots.txt协议,不去爬取被禁止的内容。2.1.2网络爬虫的结构与原理网络爬虫必须要包含的模块有22:(1) 保存种子的URL以及将被抓取的URL的数据结构;(2) 保存已经抓取的URL的数据结构;(3) 用于获取页面的模块;(4) 分析抽取已获得的页面的模块。网络爬虫可能还会包含的模块有:(1) 对连接前后的问题进行处理的模块;(2) 过滤已经抓取URL的模块;(3) 进行多线程抓取时负责管理线程的模块;(4) 负责分布式抓取的模块。网络爬虫在对网页进行爬取的过程中,首先会获取URL并判断URL是否处理过,若未处理过,进行解析并下载,若已处理过,提交下个URL,整个爬虫程序的工作流程如图2.1。图2.1 网络爬虫的处理的流程图2.1.3网络爬虫开发过程中需要注意的问题(1)抓取速度与抓取策略的问题:网络爬虫除了要保证抓取网页的过程不能遗漏网页,还要保证抓取网页的速度。因此,好的抓取策略是必要的,一般来说,网络爬虫采取的策略有广度优先和深度优先两种。(2)各种不友好陷阱的类型网页23:具有注册和登陆后才能查看网页内容类型的网页不利于爬虫的爬取,因为爬虫不会自行注册和登陆;具有动态URL的网页同样会阻碍爬虫的爬取,因为爬虫无法得知URL中的参数值;强迫用户使用Cookies的网站爬虫同样很难进行访问;各种跳转的网页对爬虫非常不友好,到目前为止,只有301永久跳转对爬虫是友好的,其余跳转的使用会显得十分敏感,这样会欺骗用户和搜索引擎的搜索;最后就是网页中具有大量的Flash文件,网页的内容均在Flash中,而对于爬虫来说,就只能读到链接,无法读取内容。(3)各种网站的反爬虫机制:一些具有大规模数据的网站,为防止其数据内容被非法盗取,采取了强硬的反爬虫措施,一旦访问频度超过了默认的最大值,便会返回404 Forbidden,这个IP将不能对网站进行访问。2.2 正则表达式介绍2.2.1正则表达式的概述正则表达式是一种关于字符串的公式,它涉及到字符串的逻辑操作。用事先定义好的正则表达式语法,组成一个字符串的规则。根据这种语法规则,可以任意组合出一个规则字符串,作为字符串匹配的逻辑公式。给定一个正则表达式的组合逻辑,我们可以对任意一个字符串做以下操作:(1) 判断给定的字符串是否能够匹配给定的正则表达式,也称逻辑过滤;(2) 在一个长字符串中,截取出符合该逻辑公式的短字符串的集合,得到特定的字符串。正则表达式具有如下特点24:(1) 使用方法灵活,逻辑性强,可以完成有关字符串的一切逻辑操作;(2) 可以用极为简单的方式处理并控制字符串;(3) 正则表达式的语法晦涩难懂,如果不熟练掌握很难灵活运用。2.2.2正则表达式的语法正则表达式在需要处理字符串的程序里,有着至关重要的作用。当出现需要对某个复杂规则的字符串进行查找的时候,正则表达式就是这些复杂规则的描述工具。正则表达式一般由普通字符和元字符组成一个模板,将一个字符模式与字符串进行匹配25。普通字符显然就是指一般字符串中的字符,比如说字符a到字符z,特殊字符就是正则表达式中定义的有特殊含义的字符。比如说“$”匹配输入字符串的结尾位置,“*”则是匹配前面输入的子表达式零次或者多次,“+”则是表示匹配前面输入的表达式一次或者多次。“.”则是匹配除回车以外的任何一个单字符。仅仅这几个字符,我们就可以进行一些字符串的匹配。比如说“/.*”就可以匹配网站下任意的URL(包含其本身),而“/subject/.+”则可以匹配/subject/下面的网页的URL,但最后一个“/”必须有内容。总体来说,在解析图书网页的过程中,我们可以通过正则表达式对图书的网页按照一定的结构进行数据的解析,以获得我们需要的信息。2.3 MySQL关系数据库介绍2.3.1MySQL关系数据库的概述MySQL数据库是一个关系型数据库,开发者是瑞典的MySQL AB公司,现已经属于Oracle公司26。关系型数据库具有统一的特点是,会把大量的数据保存在不同的表中,而不是把所有数据都存在一个大表里,因此,关系型数据库具有速度快和灵活的特点。而MySQL数据库由于其体积小、速度快、成本低、源码开放的诸多优势,成为了很多中小型网站所青睐的对象,作为网站数据库的选择。2.3.2MySQL关系数据库的系统特性(1)MySQL数据库是由其开发者使用C和C+进行编写的,且通过了多种编译器的测试,源代码的可移植性很强;(2)支持包含Linux、Windows、Mac OS和FreeBSD在内的多种操作系统的环境;(3)为包含C、C+、Python、JAVA在内多种编程语言提供了API;(4)支持多线程访问、优化了SQL查询算法,充分提高了访问和查询的速度;(5)提供多种数据库管理工具,用于检查、管理、优化数据库;(6)支持大型数据库,能够存储并且处理上千万条记录的数据库;(7)支持多语言,常见的UTF-8编码,BIG5编码,GB2312编码都可以作为数据库的表名属性名和属性值进行使用;(8)能够独立作为应用程序被使用,也能够以数据库的形式嵌入到其他的软件中,可以方便开发者的使用27。2.3.3MySQL关系数据库的应用架构MySQL关系数据库的应用架构有三种:单点架构、复制架构和集成架构,分别适用于小规模数据、中小规模数据和大规模数据的使用。MySQL数据库的架构及应用如图2.228。图2.2 MySQL数据库的架构及应用2.4 中文分词技术介绍2.4.1中文分词技术的概述对一篇英文文档进行单词的拆分,远比对于一篇中文文档进行词的拆分要远远容易的多。这是因为中文的“词”这一概念与英文有着很大的不同。首先,中文文档中,词与词之间不存在空格,其次,在词的构成中,中文存在原子词和复合词,举个例子,“火车”就是原子词而“早饭”就是复合词。我们可以将早饭理解为早上吃的饭,却不能将火车理解成用火驱动的车。中文分词技术就是指将整个中文文档切分成一个中文的词的序列,以便于对文档进行分析29。2.4.2常见的查找词典算法最为常见的中文分词的方法,就是基于词典进行匹配。也就是说首先建立一个词典,然后对照文档中的指定位置向后查找,找到最大长度的词作为分词的结构。两种常见的查找词典算法就是标准Trie树和三叉Trie树。将词典中的每一个词,都保存在一个单链表中,也就是将词看成一个字符的序列,然后整个词典也就对应了无数个链表,把具有相同前缀的节点的前缀进行合并,便把这无数个链表变成了无数个树结构,这个树结构就是标准Trie树的创建过程。整个查询过程不再是从前往后一个又一个字符的匹配的过程,而变成了从根节点向下查找最远的子节点的匹配过程。在一个三叉搜索树中,每一个节点存储了一个字,而三个和结构有关的属性,分别指向左兄弟节点、子节点和右兄弟节点。它是二叉搜索树和标准Trie树结合。它和标准Trie树具有相同的时间复杂度,但却具有二叉搜索树一样,具有占用内存空间少的优点。所以,单词存储到三叉搜索树的顺序很重要,会直接影响查找时占用的内存。查找过程是:从树的根节点开始,匹配整个输入串,逐字从前往后匹配。2.4.3中文分词原理中文分词程序主要完成三个任务:分词、词性标注和语义标注。也就是说,首先要把输入的文本内容切分成词,然后给返回的词序列标上词性,例如动词、形容词等等。最后要把词标注上语义编码。现有的中文分词主要是以下两种方法:一种是使用机械匹配的方法,也就是每次在词典中进行查找,找到和需要匹配的字符串中前缀或者后缀最长的匹配(正向匹配就是前缀,逆向匹配就是后缀),找到后从输入串中切分出该词,直到输入串为空。第二种则是利用统计的方法,也就是说统计计算在输入串为C的情况下,切分方案S的条件概率最大的情况,作为切分的标准,此方法的难点在于条件概率的计算和求最值。2.4.4中文分词的流程和结构对于复杂的输入串,中文分词的切分过程大致如下:首先,对输出串进行切分,首先把这段文本一次切分出句子,然后把句子作为新的切分对象进行切分。切分句子的过程中,首先将句子按照单字或者原子(即不可切分的部分,比如说字符串“A4打印纸”中的“A4”)进行切分,把句子变成一个个单字或者原子。接着,使用词库或者词典对句子进行完整的切分,生成一个词组成的链表的集合,称为词图。以这个词图作为切分的基础,使用动态规划,生成最佳的切分路径,然后对于人名等词典没有收录的词进行识别,并重新进行最佳切分路径的生成。完成了分词后,就可以使用HMM方法对词序列的词性进行标注,然后根据词性对词序列进行调整和简单的处理,比如说时间串的合并,最终按照需要的格式将结果进行输出。2.5 Lucene.NET搜索引擎介绍2.5.1Lucene.NET搜索引擎的概述Lucene.NET是Lucene向.NET进行移植的一个版本。它是一个为开发者提供的开源的全文检索的搜索引擎。它并不是完整搜索引擎,但是提供了一个完整的搜索引擎的架构,提供了查询引擎和索引引擎30。Lucene.NET的源码分成核心功能和其他外围功能两部分。其中,核心部分主要完成搜索功能,而外围功能主要实现一些辅助功能。源码的核心部分共包含7个子包,索引管理包主要负责的是索引的建立和删除,检索管理包主要负责根据查询

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论