一种具有高准确度的代码片段推荐方法技术

技术编号:19277451 阅读:36 留言:0更新日期:2018-10-30 18:00
本发明专利技术提供的具有高准确度的代码片段推荐方法,包括:将项目进行切割、划分,生成类文件、代码片段、代码片段方法体和代码片段注释;将代码片段方法体和代码片段注释生成代码片段方法体向量和代码片段注释向量;对每个类文件进行编译和反编译,从反编译文件中提取代码片段的指令序列;将用户输入的查询生成查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果;根据初步推荐结果中的所有代码片段之间的语义相似度,对初步推荐结果进行二次筛选和重新排序,形成最终推荐结果;本发明专利技术弥补了现存方法使用特征单一、推荐结果没有经过过滤,导致推荐准确度不高的缺陷;适用于开源代码片段推荐领域。

A code fragment recommendation method with high accuracy

The invention provides a code fragment recommendation method with high accuracy, including: cutting and partitioning the project, generating class files, code fragments, code fragment method bodies and code fragment annotations; generating code fragment method body and code fragment annotation vectors and code fragment annotation vectors by code fragment method bodies and code fragment annotations; Each class file is compiled and decompiled to extract the instruction sequence of code fragments from the decompiled file; query vectors are generated from user input queries, and a set of preliminary recommendation results with the highest text similarity is selected according to the text similarity between the query vectors and the text features of code fragments; and preliminary recommendation results are obtained according to the preliminary recommendation node. The semantic similarity between all the code segments in the result makes the preliminary recommendation result sifted and reordered twice to form the final recommendation result; the present invention remedies the defects of the existing methods, such as single feature and unfiltered recommendation result, resulting in low recommendation accuracy; it is suitable for open source fragment recommendation collar. Domain.

【技术实现步骤摘要】
一种具有高准确度的代码片段推荐方法
本专利技术属于开源代码片段推荐的
,具体涉及一种具有高准确度的代码片段推荐方法。
技术介绍
代码片段是指能够完成一定功能的一组代码的有序集合。当开发人员面对不熟悉的开发任务或需要使用不熟悉的API接口时,代码片段是一个很好的参考工具。开发人员能够从中学习功能实现方法或者API使用模式,甚至直接对已有代码片段进行修改,以完成相关开发任务。随着计算机技术和软件行业的发展,网络上的开源项目越来越多。这些开源项目被发布在一些开源软件项目的托管平台上,开发人员能够通过在这些平台上查找需要的开源项目并浏览项目中的所有文件,以找到自己真正感兴趣的部分。在软件开发过程中,使用开源项目作为参考,能够帮助开发人员尽快理解不熟悉的开发任务,掌握不熟悉的API接口,有效提高其工作效率,从而有效地节约软件开发的成本。但是,如何从数以百万计的开源项目中查找到自己需要的项目,又如何从一个项目中找到自己感兴趣的某个文件或者某个方法,是研究人员面临的难题。而着眼于研究这一问题的研究统称为代码推荐。目前较为成熟的代码推荐方法有:ROSF、SSI、Portfolio等。这些研究所使用的代码特征虽然可以细分为多个类别,如:方法完全限定名称、文档信息、兄弟方法名称等,但这些特征本质上均为代码的文本特征,仅使用文本信息进行代码片段推荐将会造成代码片段的部分语义信息的丢失,从而造成推荐结果的不准确;并且已有研究在对推荐结果进行筛选和排序时多使用代码片段与查询之间的文本相似度和启发式规则,这种方式由于没有考虑到推荐结果之间的联系,也会造成推荐结果的不准确或误排。
技术实现思路
本专利技术克服现有技术存在的不足,所要解决的技术问题为:提供一种具有高准确度的代码片段推荐方法,弥补了现存方法使用特征单一、推荐结果没有经过过滤,导致推荐准确度不高的缺陷。为了解决上述技术问题,本专利技术采用的技术方案为:一种具有高准确度的代码片段推荐方法,包括:将项目库中的所有项目进行切割、划分,生成对应的类文件、代码片段、代码片段方法体和代码片段注释;采用词向量模型,将获得的代码片段方法体和代码片段注释生成对应的代码片段方法体向量和代码片段注释向量,作为代码片段的文本特征;为获得的每个类文件进行运行环境搭建,并对每个类文件进行编译和反编译,然后从反编译文件中提取代码片段的指令序列,作为代码片段的语义特征;采用词向量模型,将用户输入的查询生成对应的查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果;根据初步推荐结果中的所有代码片段之间的语义相似度,对初步推荐结果进行二次筛选和重新排序,形成最终推荐结果,并返回给用户选择。优选地,所述将项目库中的所有项目进行切割、划分,生成对应的类文件、代码片段、代码片段方法体和代码片段注释,具体包括:提取项目库中所有项目的所有类文件,并形成类文件数据集;对每个类文件进行解析,将类文件切割为多个代码片段,形成代码片段数据集,并为每个代码片段赋予一个起唯一识别作用的代码ID;获取所有代码片段的方法体和注释,并形成方法体数据集和注释数据集;分别建立每一代码片段、代码片段方法体、代码片段注释到对应的代码ID的索引。优选地,所述采用词向量模型,将获得的代码片段方法体和代码片段注释生成对应的代码片段方法体向量和代码片段注释向量,作为代码片段的文本特征,具体包括:初始化第一词向量模型和第二词向量模型,第一词向量模型用于将方法体映射到向量,第二词向量模型用于将注释映射到向量;分别用方法体数据集、注释数据集对第一词向量模型、第二词向量模型进行训练,分别生成方法体数据集中所有方法体的向量表示、注释数据集中所有注释的向量表示,并保存训练完成的第一词向量模型和第二词向量模型;分别建立每一方法体向量、注释向量到对应的代码ID的索引。优选地,所述为获得的每个类文件进行运行环境搭建,并对每个类文件进行编译和反编译,然后从反编译文件中提取代码片段的指令序列,作为代码片段的语义特征,具体包括:为类文件数据集中的每一个类文件构建其编译所需的运行环境;对当前类文件进行编译;对编译成功且位于当前目录下的二进制文件进行反编译,该二进制文件与当前类文件同名;将反编译结果以文本形式保存在文件中,生成反编译文件;根据反编译文件的格式提取出其中的所有代码片段,并提取出每个代码片段的文本形式指令序列;将提取出来的文本形式指令序列进行格式化操作,生成可计算距离的最终的指令序列;建立最终得到的指令序列与对应的代码ID的链接。优选地,所述采用词向量模型,将用户输入的查询生成对应的查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果,具体包括:分别通过第一词向量模型、第二词向量模型,将用户输入的查询转换为用户查询方法体向量、用户查询注释向量;对于代码片段数据集中的每个代码片段,根据公式(1)分别计算出其方法体向量与用户查询方法体向量之间的第一余弦相似度、其注释向量与用户查询注释向量之间的第二余弦相似度;结合得到的第一余弦相似度、第二余弦相似度以及公式(2),计算当前代码片段与用户输入查询之间的文本相似度;选择与用户输入查询之间的文本相似度最高的N个代码片段,作为初步推荐结果,并按照文本相似度由高到低的顺序对初步推荐结果进行排序;式中:cos(θ)表示需要计算的余弦相似度,x1、x2分别表示用户查询注释向量、用户查询方法体向量,且均为200维向量,具体表示为:x1=(x11,x12,x13…x1200),x2=(x21,x22,x23…x2200),x1k表示xk的第一维向量;textSimilarity=0.6*cos(θ)a+0.4*cos(θ)c(2)式中:textSimilarity表示需要计算的文本相似度,cos(θ)a表示第二余弦相似度,cos(θ)c表示第一余弦相似度。优选地,所述根据初步推荐结果中的所有代码片段之间的语义相似度,对初步推荐结果进行二次筛选和重新排序,形成最终推荐结果,并返回给用户选择,具体包括:将得到的初步推荐结果索引到对应的指令序列;根据初步推荐结果的代码片段数量L和设定的密度值ρ,按照公式ε=L×ρ,计算出阈值ε;计算初步推荐结果中的所有代码片段与其他代码片段之间的语义距离,将得到的语义距离进行升序排列,并选择由上至下数第ε个语义距离作为当前代码片段的中心距离;将初步推荐结果中的代码片段的最小中心距离作为初步推荐结果的中心距离,选择该最小中心距离对应的代码片段作为初步推荐结果的密度中心,并将该代码片段加入二次筛选结果集中;判断初步推荐结果中除密度中心之外的所有代码片段是否在以密度中心为圆心、中心距离为半径的区域内,若是则将其加入二次筛选结果集中,否则删除;将二次筛选结果集中的结果按照与密度区域之间的距离进行排序,并将指令序列映射回代码片段,形成最终推荐结果;将最终推荐结果返回给用户,以供用户选择。优选地,所述计算初步推荐结果中的所有代码片段与其他代码片段之间的语义距离,具体包括:S101、查找IS2在IS1中的最长子序列,记作ISl,并初始化IS1和IS2之间的语义距离SLn=0,SLo=SLn,其中SLn表示当前语义距离,SLo表示上次本文档来自技高网
...

【技术保护点】
1.一种具有高准确度的代码片段推荐方法,其特征在于:包括:将项目库中的所有项目进行切割、划分,生成对应的类文件、代码片段、代码片段方法体和代码片段注释;采用词向量模型,将获得的代码片段方法体和代码片段注释生成对应的代码片段方法体向量和代码片段注释向量,作为代码片段的文本特征;为获得的每个类文件进行运行环境搭建,并对每个类文件进行编译和反编译,然后从反编译文件中提取代码片段的指令序列,作为代码片段的语义特征;采用词向量模型,将用户输入的查询生成对应的查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果;根据初步推荐结果中的所有代码片段之间的语义相似度,对初步推荐结果进行二次筛选和重新排序,形成最终推荐结果,并返回给用户选择。

【技术特征摘要】
1.一种具有高准确度的代码片段推荐方法,其特征在于:包括:将项目库中的所有项目进行切割、划分,生成对应的类文件、代码片段、代码片段方法体和代码片段注释;采用词向量模型,将获得的代码片段方法体和代码片段注释生成对应的代码片段方法体向量和代码片段注释向量,作为代码片段的文本特征;为获得的每个类文件进行运行环境搭建,并对每个类文件进行编译和反编译,然后从反编译文件中提取代码片段的指令序列,作为代码片段的语义特征;采用词向量模型,将用户输入的查询生成对应的查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果;根据初步推荐结果中的所有代码片段之间的语义相似度,对初步推荐结果进行二次筛选和重新排序,形成最终推荐结果,并返回给用户选择。2.根据权利要求1所述的一种具有高准确度的代码片段推荐方法,其特征在于:所述将项目库中的所有项目进行切割、划分,生成对应的类文件、代码片段、代码片段方法体和代码片段注释,具体包括:提取项目库中所有项目的所有类文件,并形成类文件数据集;对每个类文件进行解析,将类文件切割为多个代码片段,形成代码片段数据集,并为每个代码片段赋予一个起唯一识别作用的代码ID;获取所有代码片段的方法体和注释,并形成方法体数据集和注释数据集;分别建立每一代码片段、代码片段方法体、代码片段注释到对应的代码ID的索引。3.根据权利要求1所述的一种具有高准确度的代码片段推荐方法,其特征在于:所述采用词向量模型,将获得的代码片段方法体和代码片段注释生成对应的代码片段方法体向量和代码片段注释向量,作为代码片段的文本特征,具体包括:初始化第一词向量模型和第二词向量模型,第一词向量模型用于将方法体映射到向量,第二词向量模型用于将注释映射到向量;分别用方法体数据集、注释数据集对第一词向量模型、第二词向量模型进行训练,分别生成方法体数据集中所有方法体的向量表示、注释数据集中所有注释的向量表示,并保存训练完成的第一词向量模型和第二词向量模型;分别建立每一方法体向量、注释向量到对应的代码ID的索引。4.根据权利要求1所述的一种具有高准确度的代码片段推荐方法,其特征在于:所述为获得的每个类文件进行运行环境搭建,并对每个类文件进行编译和反编译,然后从反编译文件中提取代码片段的指令序列,作为代码片段的语义特征,具体包括:为类文件数据集中的每一个类文件构建其编译所需的运行环境;对当前类文件进行编译;对编译成功且位于当前目录下的二进制文件进行反编译,该二进制文件与当前类文件同名;将反编译结果以文本形式保存在文件中,生成反编译文件;根据反编译文件的格式提取出其中的所有代码片段,并提取出每个代码片段的文本形式指令序列;将提取出来的文本形式指令序列进行格式化操作,生成可计算距离的最终的指令序列;建立最终得到的指令序列与对应的代码ID的链接。5.根据权利要求1所述的一种具有高准确度的代码片段推荐方法,其特征在于:所述采用词向量模型,将用户输入的查询生成对应的查询向量,根据查询向量与代码片段文本特征之间的文本相似度,筛选出一组文本相似度最高的初步推荐结果,具体包括:分别通过第一词向量模型、第二词向量模型,将用户输入的查询转换为用户查询方法体向量、用户查询注释向量;对于代码片段数据集中的每个代码片段,根据公式(1)分别计算出其方法体向量与用户查询方法体向量之间的第一余弦相似度、其注释向量与用户查询注释向量之间的第二余弦相似度;结合得到的第一余弦相似度、第二余弦相似度以及公式(2),计算当前代码片段与用户输入查询之间的文本相似度;选择与用户输入查询之间的文本相似度最高的N个代码片段,作为初步推荐结果,并按照文本相似度由高到低的顺序对初步推荐结果进行排序;式中:cos(θ)表示需要计算的余弦相似度,x1、x2分别表示用户查询注释向量...

【专利技术属性】
技术研发人员:黄志球艾磊李伟湋周宇尹小花张静
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1