开源软件获取与搜索系统的实现方法

文档序号:6367600阅读:304来源:国知局

专利名称::开源软件获取与搜索系统的实现方法
技术领域
:本发明涉及一种开源软件获取与搜索系统的实现方法,特别是在跨多个开源社区的环境下,一种基于定向网络爬虫、信息抽取的开源软件搜索系统的构造方法。
背景技术
:近年来,国内外开源软件运动取得了蓬勃发展,已经形成众多拥有大量开发人员、开源项目和开源社区的软件开发和应用的开源软件生态系统。目前开源软件业界有如下发展趋势I.开源项目和开发人员数量庞大并逐年稳定增长;2.少数优秀的开源项目发展迅速并且得到广泛应用;3.多数开源项目处于较低的发展水平且处于缓慢发展状态;这些特征使得从海量开源软件项目中发现和选择高质量且满足特定需求的开源软件成为急需解决问题。传统搜索引擎由于其缺乏针对性,搜索结果中有效信息含量不高,因此难以应对这样的需求。开源软件社区作为开源软件的托管平台,其页面有着丰富的开源项目描述信息,对于开源软件的共享、评价和选择具有重要价值。开源社区大多集成了针对社区内开源软件的搜索引擎和条件选择服务,然而要在全球范围内选择和查找开源软件,综合跨社区的软件信息,构建跨社区的开源软件搜索引擎势在必行。近年来,国内外针对跨社区的开源软件页面数据收集开展了大量的研究和实践。美国Syracuse大学的FLOSSmole项目在该领域做出了突出成绩。通过使用275个网络爬虫,该项目从20多个社区中爬取了近500,000个开源项目的页面数据。但由于该工作只进行了数据的搜集,对外仅提供sql查询接口和sql数据包的下载,而并没有提供数据的综合、展现、搜索等功能,因此并不能帮助人们搜索与获取软件。国内面向开源软件的搜索引擎研究还处于起步阶段,其中比较有影响力的包括开源中国社区、CSDN开源社区、中国Linux社区等。开源中国社区中的开源软件信息主要来自用户人工编辑,数目和质量上都有明显的局限性;CSDN社区中的开源资源主要是用户自行共享上传的工具包或代码库;来源混杂,格式不统一,描述不完备;而Linux社区的开源软件主要局限在Linux系统相关的包和工具。总的来说,当前这些社区缺乏一个涵盖面广,数据全面,格式统一的开源软件信息库,以及基于该信息库的一种为用户查询和选择开源软件提供推荐和帮助的搜索引擎技术。
发明内容本发明要解决的问题是针对现有技术在跨社区信息获取和信息综合展现方面的不足,提出一种开源软件搜索系统的实现方法,使得能够广泛搜集多个社区的开源软件信息,为预期用户提供软件查找和推荐服务。本发明的技术方案包括以下步骤步骤I、搭建数据服务。在企业级服务器上配置关系数据库管理软件,搭建关系与对象映射框架,使得上层应用程序对关系数据库进行调用时能使业务层代码能够以对象的方式访问和更新数据库里的信息。步骤2、网页获取。接收用户的输入定义,确定一定数目的已知URL地址的开源社区集合,通过爬虫抓取开源社区中的开源软件主页,将开源项目的爬取分为开源项目列表页爬取和开源项目主页爬取两个阶段。步骤3、开源属性抽取。从爬取到的页面中抽取开源软件领域的信息即开源属性,如项目编程语言、证书、运行环境、开发状态、注册时间、最新发布时间、下载次数、主页链接坐寸o步骤4、对跨社区项目信息进行整合,当来自不同社区的项目具有不同的属性时,取属性并集;同时保存不同项目之间的依赖关系;步骤5、对获取的开源属性建立倒排索引,其中的每一项都包括一个属性值和具有该属性值的各记录的地址,由属性值来确定记录的位置,而非由记录来确定属性值。步骤6、响应于用户搜索输入或预定义的排名机制,对需要展现的开源项目进行排序并显示。进一步地,步骤2可以下列方式实现步骤21、根据社区的项目主页URL模板进行匹配,抽取出项目主页URL存放到数据库,对不断变化的社区开源项目主页构成情况进行快照。步骤22、是爬取开源项目主页。网页爬虫不断从数据库中取出项目主页URL进行定向爬取,将爬取到的完整HTML页面文本保存到数据库。更为具体地,步骤3通过下列步骤进行。步骤31、模板探测。发现每个开源社区用于显示开源属性的网页模板,可以是HTML树中的标签路径,也可以是HTML文本中的正则表达式,作为抽取开源属性的规则。具体来说有两种获取方式。步骤311、基于人工观察的方法。通过观察来自开源社区的少量网页样本,发现各个开源属性所在的页面位置或其出现的正则表达式模式。步骤312、基于种子集合的方法。获取开源属性的可列属性值,使用字符串相似度匹配算法,自动的在网页集合中发现开源属性值所在标签路径,采用最大支持度方法(即在某位置具有最高匹配次数则认为在此具有最大支持度)筛选出唯一的网页模板。其中,所述字符串的相似度匹配可以通过两字符串对应q-gram集合的雅加达(Jaccard)系数作为两字符串匹配度数值,当该数值若高于预定义的某阈值则认为匹配。步骤32、标签定位。通过已获取的模板定位到开源属性值的HTML标签。如果确定的模版是通过人工观察并确定的正则表达式,则进行步骤321基于正则表达式的定位方法。使用正则表达式定位规则在目标网页中发现属性值标签节点;如果确定的模版是通过种子集合方法确定出的标签路径,则进行步骤322基于标签路径的定位方法,根据html页面的文档对象模型(DOM)树形结构,将每个标签位置表示为从页面根节点html到属性值所在节点的标签路径,借助支持该路径的网页解析工具(如D0M4J)进行标签定位与获取,从而获取属性值对应的文本标签。进一步地,所述步骤6中,如果接收到用户的搜索输入,则通过计算用户输入的关键字与倒排索引数据集合之间的字符串匹配情况,计算关键字与数据集合中软件项目的结果的相关度进行排序;如果没有接收到用户搜索输入,则依据项目的开源参与程度和信息完备程度定义的项目排名机制,项目进行排序与展示。进一步地,所述项目的开源参与程度由一个项目所用于托管的社区数,其所关联的其他开源项目数来量化;所述信息完备程度由项目的开源属性个数来量化。最终开发相应的用户交互界面,负责接收来自用户输入,同时负责接收来自搜索引擎的排序结果,对开源社区中的软件项目进行组织和展示。图I为本发明跨社区开源软件搜索系统实现方法的流程图;图2为根据本发明的实施例的获取不同社区开源软件项目的流程图。图3为根据本发明的实施例的对获取后的开源软件项目进行管理和组织的流程图。具体实施例方式如图I所示,为开源软件获取与搜索系统及方法实现的流程图,具体实施以下步骤步骤I、搭建数据服务。开源软件信息库具有数据量大(>100GB),更新频繁,并发查询处理能力强,例如在互联网上提供面向海量用户的访问服务等方面的要求。因此需要采用企业级的高效的数据库管理软件来搭建数据服务,在本发明中将数据服务部署在企业级刀片服务器上,具有8核CPU,内存32GB,硬盘2TB。可以使用关系数据库或面向对象数据库,当使用关系数据库时,还需要搭建关系与对象映射框架,以方便上层应用程序对关系数据库进行调用,使业务层代码能够以对象的方式访问和更新数据库里的信息。步骤2、网页获取。通过爬虫抓取开源社区中的开源软件主页,由于目标页面URL集合是已知的,因此可以对传统通用爬虫的爬取方式进行修改,去除其中如URL合法性判断,新URL发现等不适用的常规部件,而使用由人工事先对每个开源社区预定义,进而确定需要爬取的URL的生成方法。基于开源社区中项目不断增加的特征,将开源项目的爬取严格划分为开源项目列表页爬取和开源项目主页爬取两个阶段。步骤21、第一阶段的目标是分析社区中的所有项目列表页,对于同一社区,其项目列表页在命名上是具有一定规律和相对固定的,例如对于sourceforge社区来说,其项目列表页的格式为www.sourceforge.net/search/I.html,可能发生变化的可能仅仅是html文本的数字编号。根据社区的项目主页URL模板进行匹配,抽取出项目主页URL存放到数据库,起到对不断变化的社区开源项目主页构成情况进行快照的作用。步骤22、第二阶段的目标是爬取开源项目主页。网页爬虫不断从数据库中取出项目主页URL进行定向爬取,将爬取到的完整HTML页面文本保存到数据库。爬取时采用多线程爬取技术,以提高爬取效率。步骤3、开源属性抽取。从爬取到的页面中抽取开源软件领域的信息即开源属性,如项目编程语言、证书、界面、运行环境、本地化、数据库、开发状态、注册时间、最新发布时间、下载次数、主页链接等。更为具体地,通过下列步骤进行。步骤31、模板探测。发现每个开源社区用于显示开源属性的网页模板,可以是HTML树中的标签路径,也可以是HTML文本中的正则表达式,作为抽取开源属性的规则。具体来说有两种获取方式。步骤311、基于人工观察的方法。通过观察来自开源社区的少量网页样本,发现各个开源属性所在的页面位置或其出现的正则表达式模式。该方法较为简易,但可靠性不高,适用于网页结构简单,模板明晰的社区模板探测。步骤312、基于种子集合的方法。获取开源属性的可列属性值,使用字符串相似度匹配算法,自动的在网页集合中发现开源属性值所在标签路径,采用最大支持度方法(即在某位置具有最高匹配次数则认为在此具有最大支持度)筛选出唯一的网页模板。字符串的相似度匹配可以通过两字符串对应q-gram集合的雅加达(Jaccard)系数作为两字符串匹配度数值,当该数值若高于预定义的某阈值则认为匹配。例如,设种子属性值为“GPLLicense",该方法则负责发现“GPLLicense”在目标社区中所有出现及各个出现的标签路径,选择出现次数最多的路径,如“/html/body/table/tr/td/text()”,作为该属性的抽取规则和抽取位置。步骤32、标签定位。通过已获取的模板定位到开源属性值的HTML标签。如果确定的模版是通过人工观察并确定的正则表达式,则进行步骤321基于正则表达式的定位方法。使用正则表达式定位规则在目标网页中发现属性值标签节点。如有html片段“<li>License<ahref=“/categories/license/gpl,,>GPLLicense〈/a>,,,其对应的“License”属性值正则表达式定位规则可能为“<Li>License<ahref=\“/categories/license/[a-zA-Z|0-9]+\”>[a_zA-Z10-9]+〈/a>”,该表达式将定位到所有的“License”属性所在标签。如果确定的模版是通过种子集合方法确定出的标签路径,则进行步骤322基于标签路径的定位方法。根据html页面的文档对象模型(DOM)树形结构,将每个标签位置表示为从页面根节点(<html>)到属性值所在节点的标签路径,借助支持该路径的网页解析工具(如D0M4J)进行标签定位与获取,从而获取属性值对应的文本标签。步骤4、信息综合与挖掘。步骤401、跨社区项目信息整合。即对抽取得到的信息进行整合处理。实施例中,设开源项目xwiki在社区sourceforge.net中抽取的主题为“Database,DynamicContent,SiteManagement”,在ow2.org中其主题为“DynamicContent”,通过取并集获取项目xwiki跨此两个社区的主题集合为(“Database,DynamicContent,SiteManagement”)。步骤402、挖掘项目协同关系。跨社区地发现项目描述提到其他项目的情形,发现各个开源项目之间的协同关系。在实施例中,设项目xwikimantis在其描述中有陈述“XwikiMantispluginintegratesmantisintoxwiki,,,将保存xwikimantis至丨Jxwiki的依赖关系,在用户搜索结果中进行呈现。步骤5、建立倒排索引。对步骤3获取的开源属性建立倒排索弓丨,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由属性值来确定记录、的位置,而不是由记录来确定属性值。对项目xwiki来说,其在sourceforge.net,ow2.org,freshmeat.net获取的属性有(project-real-nameinsourceforge,“xwiki,,),(user-interfaceinsourceforge,“web-based,,),(licenseinow2,“gpl,,),(programming-language-in-freshmeat,“java,,),(description-in-sourceforge,“XWikiisthenextgenerationenterprisewiki,”)。在此对这些属性建立倒排索引。当搜索系统用户输入查询关键词“enterprisewiki”时,系统将根据索引中含有该关键词的项目信息按一定的排序算法有序返回。本实施例中xwiki的描述信息索引中含有“enterprisewiki”关键词,因此xwiki将会被作为结果之一返回给用户。步骤6、实现排序。步骤601、基于关键字匹配的搜索结果排序方法。该方法即通过计算用户输入的关键字与倒排索引数据集合之间的字符串匹配情况,计算关键字与数据集合中软件项目的结果的相关度进行排序。步骤602、无关键字的项目排名算法。可以综合考虑一个项目的开源参与程度和信息完备程度定义项目排名机制,根据项目不同的相关信息分配相应的权重,加权计算得分,用于在用户不输入关键字的情况下,对项目进行排序与展示。其中,项目的开源参与程度由一个项目所用于托管的社区数,其所关联的其他开源项目数来量化;而信息完备程度由项目的开源属性个数来量化。根据本发明的实施例,可以实现专门针对开源软件的搜索和获取,从而使得开发人员对于开源软件的查找和利用更为便利。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。权利要求1.一种开源软件获取与搜索系统的实现方法,包括下列步骤步骤I、搭建数据服务,在企业级服务器上配置关系数据库管理软件,搭建关系与对象映射框架,使得上层应用程序对关系数据库进行调用时能使业务层代码能够以对象的方式访问和更新数据库里的信息;步骤2、网页获取,接收用户的输入定义,确定一定数目的已知URL地址的开源社区集合,通过爬虫抓取开源社区中的开源软件主页,将开源项目的爬取分为开源项目列表页爬取和开源项目主页爬取两个阶段。步骤3、开源属性抽取,从爬取到的页面中抽取开源软件领域的信息即开源属性;步骤4、对跨社区项目信息进行整合,当来自不同社区的项目具有不同的属性时,取属性并集;同时保存不同项目之间的依赖关系;步骤5、对获取的开源属性建立倒排索引,其中的每一项都包括一个属性值和具有该属性值的各记录的地址,由属性值来确定记录的位置,而非由记录来确定属性值。步骤6、响应于用户搜索输入或预定义的排名机制,对需要展现的开源项目进行排序并显不。2.如权利要求I所述的方法,其中所述开源属性包括项目编程语言、证书、运行环境、开发状态、注册时间、最新发布时间、下载次数、主页链接等。3.如权利要求I所述的方法,其中步骤2进一步包括爬取开源项目列表页,根据社区的项目主页URL模板进行匹配,抽取项目主页URL存放到数据库,对不断变化的社区开源项目主页构成情况进行快照;爬取开源项目主页,从数据库中取出项目主页URL进行定向爬取,将爬取到的完整HTML页面文本保存到数据库。4.如权利要求I所述的方法,其中所述步骤3进一步包括步骤31、模板探测,发现每个开源社区用于显示开源属性的网页模板,可以是HTML树中的标签路径,也可以是HTML文本中的正则表达式,作为抽取开源属性的规则。步骤32、通过已获取的模板定位到开源属性值的HTML标签以进行标签定位。5.如权利要求4所述的方法,其中所述正则表达式通过人工观察确定。6.如权利要求4所述的方法,其中所述标签路径通过种子集合确定,。获取开源属性的可列属性值,使用字符串相似度匹配算法,自动的在网页集合中发现开源属性值所在标签路径,当在某位置具有最高匹配次数时确定该位置从而筛选出唯一的网页模板。7.如权利要求6所述的方法,其中所述字符串的相似度匹配通过两字符串对应q-gram集合的雅加达(Jaccard)系数作为两字符串匹配度数值,当该数值若高于预定义的某阈值则认为匹配。8.如权利要求4所述的方法,其中所述标签定位通过正则表达式定位规则在目标网页中发现属性值标签节点;或者,所述标签定位根据html页面的文档对象模型树形结构,将每个标签位置表示为从页面根节点到属性值所在节点的标签路径,借助支持该路径的网页解析工具进行标签定位与获取。9.如权利要求I所述的方法,其中所述步骤6进一步包括,如果接收到用户的搜索输入,则通过计算用户输入的关键字与倒排索引数据集合之间的字符串匹配确定的相关度进行排序;如果没有接收到用户搜索输入,则依据项目的开源参与程度和信息完备程度定义的项目排名机制,进行排序与展示。10.如权利要求9所述的方法,其中所述项目的开源参与程度由一个项目所用于托管的社区数,其所关联的其他开源项目数来量化;所述信息完备程度由项目的开源属性个数来量化。全文摘要一种开源软件获取与搜索系统的实现方法,包括在企业级服务器上配置关系数据库管理软件,使得上层应用程序对关系数据库进行调用时能使业务层代码能够以对象的方式访问和更新数据库里的信息;接收用户的输入定义,确定一定数目的已知URL地址的开源社区集合,通过爬虫抓取开源社区中的开源软件主页;从爬取到的页面中抽取开源软件领域的信息即开源属性;对跨社区项目信息进行整合,当来自不同社区的项目具有不同的属性时,取属性并集,同时保存不同项目之间的依赖关系;对获取的开源属性建立倒排索引;响应于用户搜索输入或预定义的排名机制,对需要展现的开源项目进行排序并显示,从而实现对开源软件项目的获取与搜索。文档编号G06F17/30GK102760151SQ201210097169公开日2012年10月31日申请日期2012年4月5日优先权日2012年4月5日发明者余跃,刘惠,史殿习,尹刚,朱沿旭,李翔,滕猛,王怀民,王涛,袁霖申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1