论文部分内容阅读
随着开源软件项目逐渐成为可复用软件构件的主要来源,如何快速的学习一个软件项目成为基于复用的软件开发活动中的一个重要环节。然而,目前软件项目的源代码和文档集往往数量比较庞大,开发人员在学习过程中查找和阅读这些软件信息需要花费大量的时间和精力。为此,需要提供一种软件信息检索工具,帮助开发人员快速的检索并理解其需要的软件信息。同时,为使用户能够在检索过程中准确描述自己的需要,该工具还需提供支持自然语言查询的检索接口。 针对上述目标,本文对如何获取并组织软件信息、如何分析自然语言问题并构造查询、如何检索软件信息这三个问题进行分析研究,设计并实现了一个支持自然语言查询的软件信息检索工具NaLSiSe(Natural Language based Softwareinformation Search engine)。NaLSiSe的解决方案包括: (1)提出了一种基于代码解析和文档分析的软件信息获取和组织方法:利用代码静态分析技术得到代码的基本结构信息,并借助语义网的推理机制得到基本结构信息之外的其他增量信息;利用文本处理方法和自然语言处理技术分析文档,并提取文档中的描述信息三元组;利用TF-IDF与Java正则表达式相结合的方法建立代码与文档之间的关联,并以RDF图存储这些关联信息。 (2)提出了一种基于自然语言问题分析和相关词推荐的查询构造方法:本文从问题的句法分析着手,首先尝试提取问题的三元组信息,并以此构造SPARQL查询和三元组查询;同时对问题中的停用词进行过滤,并对实词进行单复数扩充和相关词推荐,以构造关键词查询实现文本检索。 (3)提出了一种SPARQL语义检索和文本检索相结合的软件信息检索方法:经过问题分析之后,本文首先尝试用SPARQL查询检索代码的结构信息RDF图,并用三元组查询匹配文档的描述信息三元组;同时以关键词查询对文本进行检索,结果排序时以SPARQL检索结果优先、三元组匹配结果次之,关键词检索结果最后。 根据上述方案,本文在Eclipse环境下实现了NaLSiSe工具,并对工具设计与实现中的关键技术、核心算法、功能模块进行了详细的介绍和分析。最后,本文以Lucene为例,展示了NaLSiSe如何自动的获取和组织软件信息,并支持用户以自然语言提问的方式检索这些信息。