本发明专利技术实施例提供了一种开源项目知识图谱的建立方法和系统,该建立方法和系统具体为预先定义开源项目知识图谱的数据模式;从开源项目代码中获取程序代码本身的知识信息,从开源项目所在的开源社区和开源项目的远程仓库中获取与开源项目相关的知识信息,对所有不同来源的知识信息进行分析,抽取出多个三元组;对所有三元组统一、消歧,并基于所述数据模式,构建开源项目的知识图谱,最后对知识图谱进行可视化的分析与展示。本发明专利技术实施例建立了一种开源项目的知识图谱,用于开发者对需要学习的项目代码进行快速准确的检索,并通过相关的代码知识理解代码,满足新加入的开发者对于开源项目快速学习的需要。
【技术实现步骤摘要】
一种开源项目知识图谱的建立方法和系统
本专利技术涉及开源项目
,特别是涉及一种开源项目知识图谱的建立方法和一种开源项目知识图谱的建立系统。
技术介绍
开源项目(opensourceproject),是一种开放源码的软件项目,开发者可以通过开源社区修改开源项目的源码,定制自己的个性化产品。大型的开源项目通常会由多个开发者共同参与开发,并吸引众多的开发者来学习该开源项目的源代码,这些开发者在不断的学习和技术历练之后,也可能进入到开源项目的主要分支中,为开源项目贡献自己的力量。大多数的开源项目缺乏项目架构文档,也缺少针对项目代码知识的管理与检索功能,而当前开源社区的主要功能集中于对项目进行版本管理,面向的也只是开源项目现有的开发者与不作开发贡献的用户。因此,目前新加入的开发者在最初接触到一个开源项目的时候,往往只能通过逐步阅读源码来了解项目代码,而很难直接找到和需求相关的代码,学习效率十分低下。目前对于开源社区代码分析领域的研究,大多数都集中在分析代码本身,分析方法主要使用诸如语法树、静态分析结果之类的信息。而对开发者智慧学习的研究,则多为聚焦于如何帮助开发者智慧地编程,例如推荐代码段,推测开发人员的意图,智能编程工具等。总的来说,没有从开发者的学习需要的角度考虑,为开发者提供针对性的代码相关知识信息,从而帮助开发者快速了解并加入到开源项目中。因此,对于新加入的开发者而言,不能快速地找到需要的项目代码,也不能快速地获取项目代码的相关知识以对于代码进行理解,最终导致学习效率低下。
技术实现思路
鉴于上述问题,提出了本专利技术实施例提供一种克服上述问题或者至少部分地解决上述问题的一种开源项目知识图谱的建立方法和相应的一种开源项目知识图谱的建立系统。为了解决上述问题,本专利技术实施例提供了一种开源项目知识图谱的建立方法,所述方法包括:预先定义开源项目知识图谱的数据模式;通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息,所述程序代码本身的知识信息包括:函数、文件;从开源项目所在的开源社区和开源项目的远程仓库中获取与开源项目相关的知识信息,所述与开源项目相关的知识信息包括:项目提交记录、代码合并请求、以及问题集合;对所述程序代码本身的知识信息与所述与开源项目相关的知识信息进行分析,抽取出多个三元组,并根据所述三元组中每种数据来源的不同结构化特征,统一所有三元组中每种知识实体的数据格式,并对每个三元组进行消歧,以保证三元组集中,每种有效的知识实体有且仅有一种实体名称与之对应;基于所述数据模式,利用所述三元组集,构建开源项目的知识图谱;使用可视化工具Gephi,对所述开源项目知识图谱进行可视化的分析与展示。可选地,所述预先定义开源项目知识图谱的数据模式的方法,包括:从开源项目的多个角度抽取出组成知识图谱的知识信息,包括:基本元素关系与实体;可选地,所述实体包括:函数、文件、项目提交记录、问题集合、代码合并请求,所述基本元素关系包括:调用关系、包含关系、修改关系、涉及关系;可选地,所述从开源项目代码中获取程序代码本身的知识信息的方法,包括:通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息;其中,包括使用静态分析工具针对每个文件、每个项目模块对所述开源项目代码进行分析,分别生成局部的关系子图,所述关系子图以Dot语言进行描述与输出;可选地,所述静态分析工具包括:Doxygen,CppCheck和FindBugs;可选地,所述多个三元组,包括:sub函数对obj函数的调用关系三元组、sub文件对obj函数的包含关系三元组、sub提交记录对obj文件的修改关系三元组、sub问题集合对obj项目提交记录的涉及关系三元组、sub问题集合对obj问题集合的涉及关系三元组、sub问题集合对obj合并请求的涉及关系三元组、sub合并请求对obj项目提交记录的涉及关系三元组、sub代码合并请求对obj文件的涉及关系三元组可选地,所述基于所述数据模式,利用所述多个三元组,构建开源项目的知识图谱的方法,包括:基于所述数据模式,针对每个数据源,进行清洗、抽取三元组、消歧,单独抽取出代表某种关系的三元组集,构成一个关系三元组集子图,并发地抽取所述三元组集子图构建的过程,最后聚合所有三元组集子图,构建开源项目的知识图谱。本专利技术实施例还提供了一种开源项目知识图谱的建立系统,所述系统具体包括:定义模块,用于预先定义开源项目知识图谱的数据模式;知识获取模块,用于通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息,所述程序代码本身的知识信息包括:函数、文件以及它们之间的调用、包含关系;以及,从开源项目所在的开源社区和开源项目的远程仓库中获取与开源项目相关的知识信息,所述与开源项目相关的知识信息包括:项目提交记录、代码合并请求、以及问题集合以及它们之间的涉及关系;知识分析模块,用于对所述程序代码本身的知识信息与所述与开源项目相关的知识信息进行分析,抽取出多个三元组;并根据所述三元组中每种数据来源的不同结构化特征,统一所述三元组中每种知识实体的数据格式,并对每个三元组进行消歧,以保证三元组集中,每种有效的知识实体有且仅有一种实体名称与之对应;构建模块,用于基于所述数据模式,利用所述多个三元组,构建开源项目的知识图谱;展示模块,用于使用可视化工具Gephi,对所述开源项目知识图谱进行可视化的分析与展示。可选地,所述定义模块,从开源项目的多个角度抽取出组成知识图谱的知识信息,包括:基本元素关系与实体;其中,所述实体包括:函数、文件、项目提交记录、问题集合、代码合并请求;其中,所述基本元素关系包括:调用关系、包含关系、修改关系、涉及关系。可选地,所述预先定义开源项目知识图谱的数据模式的方法,包括:从开源项目的多个角度抽取出组成知识图谱的知识信息,包括:基本元素关系与实体;可选地,所述实体包括:函数、文件、项目提交记录、问题集合、代码合并请求,所述基本元素关系包括:调用关系、包含关系、修改关系、涉及关系;可选地,所述从开源项目代码中获取程序代码本身的知识信息的方法,包括:通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息;其中,包括使用静态分析工具针对每个文件、每个项目模块对所述开源项目代码进行分析,分别生成局部的关系子图,所述关系子图以Dot语言进行描述与输出;可选地,所述静态分析工具包括:Doxygen,CppCheck和FindBugs;可选地,所述多个三元组,包括:sub函数对obj函数的调用关系三元组、sub文件对obj函数的包含关系三元组、sub提交记录对obj文件的修改关系三元组、sub问题集合对obj项目提交记录的涉及关系三元组、sub问题集合对obj问题集合的涉及关系三元组、sub问题集合对obj合并请求的涉及关系三元组、sub合并请求对obj项目提交记录的涉及关系三元组、sub代码合并请求对obj文件的涉及关系三元组可选地,所述基于所述数据模式本文档来自技高网...
【技术保护点】
1.一种开源项目知识图谱的建立方法,其特征在于,所述方法包括:/n预先定义开源项目知识图谱的数据模式;/n通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息,所述程序代码本身的知识信息包括:函数、文件以及它们之间的调用、包含关系;/n从开源项目所在的开源社区和开源项目的远程仓库中获取与开源项目相关的知识信息,所述与开源项目相关的知识信息包括:项目提交记录、代码合并请求、问题集合以及它们之间的涉及关系;/n对所述程序代码本身的知识信息与所述与开源项目相关的知识信息进行分析,抽取出多个三元组,并根据所述三元组中每种数据来源的不同结构化特征,统一所有三元组中每种知识实体的数据格式,并对每个三元组进行消歧,以保证三元组集中,每种有效的知识实体有且仅有一种实体名称与之对应;/n基于所述数据模式,利用所述三元组集,构建开源项目的知识图谱;/n使用可视化工具Gephi,对所述开源项目知识图谱进行可视化的分析与展示。/n
【技术特征摘要】
1.一种开源项目知识图谱的建立方法,其特征在于,所述方法包括:
预先定义开源项目知识图谱的数据模式;
通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息,所述程序代码本身的知识信息包括:函数、文件以及它们之间的调用、包含关系;
从开源项目所在的开源社区和开源项目的远程仓库中获取与开源项目相关的知识信息,所述与开源项目相关的知识信息包括:项目提交记录、代码合并请求、问题集合以及它们之间的涉及关系;
对所述程序代码本身的知识信息与所述与开源项目相关的知识信息进行分析,抽取出多个三元组,并根据所述三元组中每种数据来源的不同结构化特征,统一所有三元组中每种知识实体的数据格式,并对每个三元组进行消歧,以保证三元组集中,每种有效的知识实体有且仅有一种实体名称与之对应;
基于所述数据模式,利用所述三元组集,构建开源项目的知识图谱;
使用可视化工具Gephi,对所述开源项目知识图谱进行可视化的分析与展示。
2.根据权利要求1所述的方法,其特征在于,预先定义开源项目知识图谱的数据模式,包括:
从开源项目的多个角度抽取出组成知识图谱的知识信息,所述知识信息包括:基本元素关系与实体;其中,所述实体包括:函数、文件、项目提交记录、问题集合、代码合并请求;其中,所述基本元素关系包括:调用关系、包含关系、修改关系、涉及关系。
3.根据权利要求1所述的方法,其特征在于,通过静态代码分析方法从开源项目代码中获取程序代码本身的知识信息,包括:
使用静态分析工具针对开源项目的每个文件、每个项目模块对所述开源项目代码进行分析,分别生成局部的关系子图,所述关系子图以Dot语言进行描述与输出;
所述静态分析工具,包括:Doxygen,CppCheck和FindBugs。
4.根据权利要求1所述的方法,其特征在于,所述多个三元组的类别,包括:
sub函数对obj函数的调用关系三元组、sub文件对obj函数的包含关系三元组、sub提交记录对obj文件的修改关系三元组、sub问题集合对obj项目提交记录的涉及关系三元组、sub问题集合对obj问题集合的涉及关系三元组、sub问题集合对obj合并请求的涉及关系三元组、sub合并请求对obj项目提交记录的涉及关系三元组、sub代码合并请求对obj文件的涉及关系三元组。
5.根据权利要求1所述的方法,其特征在于,构建开源项目的知识图谱的步骤,包括:
基于所述数据模式,针对每个数据源,进行清洗、抽取三元组、消歧,进而分别抽取出代表某一类关系的三元组集,构成三元组集子图,并发地抽取构建所述三元组集子图的数据流水线,最后聚合所有的三元组集子图,构建开源项目的知识图谱。
【专利技术属性】
技术研发人员:孙艳春,黄罡,孙志玉,
申请(专利权)人:北京大学,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。