论文部分内容阅读
近年来随着软件与互联网产业的大规模发展,各种开源软件项目托管平台应运而生。这些平台不仅为软件开发者们提供方便的源代码管理工具,同时也为社区用户提供开源项目搜索服务。然而,多数开源软件项目中存在许多非结构化描述信息,用户为了找到合适的软件资源,通常需要耗费大量精力进行筛选。其次,目前大部分的搜索引擎只考虑了搜索内容与软件项目名称或描述文本之间的相关性,缺少对软件项目实际功能、应用环境等软件特征方面的考虑。用户在利用某些隐含的软件特征进行搜索时,通常无法得到满意的结果。针对上述问题,本文提出了一种为开源软件社区项目进行标签自动化构建的方法,对多个软件社区数据进行相关性分析,并利用机器学习方法在构建的图模型上完成标签传播。标签作为对描述内容的一种概括和抽象表示,能够帮助用户快速了解软件项目的特点。以构建好的标签为基础,本文提出了一种能够支持软件特征搜索的开源软件项目智能搜索方法。本文的主要贡献和创新点包括:1)研究提出了一种针对软件工程领域的跨开源社区自动化标签构建方法。该方法通过对多个软件工程社区网站数据的异构性和相似性进行观察,分析得到异构实体间的若干种相关性特征,并对异构数据对象进行相关性量化;通过对象的相关性构建相应的实体关系图模型,并应用了一种带重启随机游走的半监督机器学习方法,完成跨社区的标签传播。2)研究提出了一种针对用户请求的语义扩展方法。该方法结合了互联网知识、软件工程领域及通用领域的知识库,分析识别出原始搜索文本中的领域关键词;利用领域知识库对关键词和概念节点进行匹配,并对语义相关的同义词和上下位词进行语义扩展,生成语义扩展后的搜索词集合。3)研究提出了一种人工模型和机器学习模型融合的开源项目搜索方法。本文以软件项目为特定搜索对象,提出了包括项目文本语料、软件特征在内的多种相关度特征,其中软件特征是通过领域标签进行表达的;利用人工定义的相关度模型完成搜索结果的筛选,再应用排序学习模型对候选集的资源进行分析和排序;在人工模型保证一定搜索质量的情况下,还结合了用户对搜索结果的实际反馈。本文从StackOverflow和GitHub收集数据并进行了实验,为GitHub中的上万个软件项目构建了语义标签。该方法的F1-Measure值平均高于次优方法约11.52%,最优时能提升28.02%,相比于现有的标签构建方法具有更高的预测准确率和丰富度。基于标签进行了项目搜索,相比于同领域搜索引擎和通用搜索引擎具有更好的搜索效果,同时也能满足性能上的要求。