基于案例标记的相似代码搜索方法及系统技术方案

技术编号:28785534 阅读:75 留言:0更新日期:2021-06-09 11:20
本发明专利技术公开了一种基于案例标记的相似代码搜索方法及系统,涉及代码搜索技术领域。该方法包括:获取待搜索的代码案例;对代码案例进行词性分析,得到形式代码;根据预设的加权规则对形式代码的符号进行加权;计算加权后形式代码的每一行的哈希值,在预设的哈希索引中定位查找出具有相同行的代码块编号,加入备选代码块列表;根据预设相似度计算规则计算待搜索的代码案例与备选代码块列表中代码块的相似度,据此得到搜索结果。本发明专利技术适用于相似代码的精确搜索,对代码文本进行了不同权重的处理,保留了重要的信息,略去不重要的信息,使得搜索结果更加精准,再通过预设的哈希索引进行搜索,提高了搜索的效率。提高了搜索的效率。提高了搜索的效率。

【技术实现步骤摘要】
基于案例标记的相似代码搜索方法及系统


[0001]本专利技术涉及代码搜索
,尤其涉及基于案例标记的相似代码搜索方法及系统。

技术介绍

[0002]在软件开发和维护的过程中,程序员经常需要搜索相关代码示例。现有的开源代码库代码丰富,软件开发人员和维护人员可以通过代码搜索以达到重用代码、修改bug、提高开发效率和维护代码质量等目的。
[0003]然而,目前的代码搜索方式主要是两种,一种是输入自然语言描述搜索相关功能代码,另外一种是输入代码搜索类似代码。对于输入自然语言功能描述的代码搜索方法,如何将自然语言准确地进行转换仍然是一个较难的问题,导致目前技术难以实现精准搜索。
[0004]而对于输入代码搜索文本类似代码的方法,目前,主要是利用克隆检测功能去搜索与输入代码存在高相似度的代码,或者使用爬虫和搜索技术去收集源代码和相关的技术信息。虽然这两种方式能够搜索到的代码与输入代码在文本上相似度非常高,但是很容易遗漏那些语句上有一定差异的代码,导致遗漏搜索结果,使搜索精度不够高。

技术实现思路

[0005]本专利技术所要解决的技术问题是针对现有技术的不足,提供一种基于案例标记的相似代码搜索方法及系统。
[0006]本专利技术解决上述技术问题的技术方案如下:
[0007]一种基于案例标记的相似代码搜索方法,包括:
[0008]获取待搜索的代码案例,所述代码案例中包括被标记的代码片段;
[0009]对所述代码案例进行词性分析,将所述代码案例中的关键词转换为预设符号,得到形式代码;
[0010]根据预设的加权规则对所述形式代码的符号进行加权;
[0011]计算加权后所述形式代码的每一行的哈希值,在预设的哈希索引中定位查找出具有相同行的代码块编号,将所述代码块编号对应的代码块加入备选代码块列表;
[0012]根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,将相似度大于预设阈值的代码块作为搜索结果。
[0013]本专利技术解决上述技术问题的另一种技术方案如下:
[0014]一种基于案例标记的相似代码搜索系统,包括:
[0015]获取单元,用于获取待搜索的代码案例,所述代码案例中包括被标记的代码片段;
[0016]转换单元,用于对所述代码案例进行词性分析,将所述代码案例中的关键词转换为预设符号,得到形式代码;
[0017]加权单元,用于根据预设的加权规则对所述形式代码的符号进行加权;
[0018]查询单元,用于计算加权后所述形式代码的每一行的哈希值,在预设的哈希索引
中定位查找出具有相同行的代码块编号,将所述代码块编号对应的代码块加入备选代码块列表;
[0019]匹配单元,用于根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,将相似度大于预设阈值的代码块作为搜索结果。
[0020]本专利技术解决上述技术问题的另一种技术方案如下:
[0021]一种存储介质,所述存储介质中存储有指令,当计算机读取所述指令时,使所述计算机执行如上述技术方案所述的基于案例标记的相似代码搜索方法。
[0022]一种基于案例标记的相似代码搜索装置,包括:
[0023]存储器,用于存储计算机程序;
[0024]处理器,用于执行所述计算机程序,实现如上述技术方案所述的基于案例标记的相似代码搜索方法。
[0025]本专利技术的有益效果是:本专利技术适用于相似代码的精确搜索,通过对代码进行词性分析和统一符号转换,能够使代码便于搜索,再对代码文本进行了不同权重的处理,保留了重要的信息,略去不重要的信息,使得搜索结果更加精准,再通过预设的哈希索引进行搜索,提高了搜索的效率。
[0026]本专利技术附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术实践了解到。
附图说明
[0027]图1为本专利技术基于案例标记的相似代码搜索方法的实施例提供的流程示意图;
[0028]图2为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的源代码示意图;
[0029]图3为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的从源代码提取出的代码块示意图;
[0030]图4为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的输入的标记代码序列及词法分析后对应的符号示意图;
[0031]图5为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的权重分配示意图;
[0032]图6a为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的源代码词法分析后对应符号的示意图;
[0033]图6b为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的源代码词法分析后对应符号的权重标记的示意图;
[0034]图7a为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的输入的代码案例示意图;
[0035]图7b为本专利技术基于案例标记的相似代码搜索方法的其他实施例提供的针对输入的代码案例搜索出的相似代码示意图;
[0036]图8为本专利技术基于案例标记的相似代码搜索系统的实施例提供的结构框架示意图。
具体实施方式
[0037]以下结合附图对本专利技术的原理和特征进行描述,所举实施例只用于解释本专利技术,并非用于限定本专利技术的范围。
[0038]如图1所示,为本专利技术基于案例标记的相似代码搜索方法的实施例提供的流程示意图,该相似代码搜索方法包括:
[0039]S1,获取待搜索的代码案例,代码案例中包括被标记的代码片段;
[0040]应理解,为了提高代码搜索的准确性,被标记的代码片段通常是关键代码,关键代码可以人为设定,例如,通常的格式如括号等,可以认为不是关键代码,又例如,对于for、if等逻辑连接词,可以认为是关键代码,从而进行标记。
[0041]如图2所示,提供了一种示例性的源代码示意图。
[0042]S2,对代码案例进行词性分析,将代码案例中的关键词转换为预设符号,得到形式代码;
[0043]需要说明的是,符号的具体形式可以根据实际需求设置,例如,可以将代码中的变量名和函数名都转换成“id”,“id”就是符号。
[0044]可选地,可以使用Flex工具进行词法分析,将源代码中的关键词分别映射为相应的符号,通过词法解析器,可以将代码格式进行规范化。
[0045]通过将变量名、函数名以及代码格式进行统一化,以消除这些因素可能带来的影响。
[0046]优选地,具体解析过程中,可以删除代码块中的注释、空格和空行,以消除注释以及空格空行引起的代码差异,从而进一步提高搜索的准确度。
[0047]例如,如图4所示,提供了一种示例性的代码词性分析示意图,以“for”和“if”为例,“for”经过转换得到的符号可以为“FOR”,“if”经过转换得到的符号可以为“IF”。
[0048]按照上述示例,可以本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于案例标记的相似代码搜索方法,其特征在于,包括:获取待搜索的代码案例,所述代码案例中包括被标记的代码片段;对所述代码案例进行词性分析,将所述代码案例中的关键词转换为预设符号,得到形式代码;根据预设的加权规则对所述形式代码的符号进行加权;计算加权后所述形式代码的每一行的哈希值,在预设的哈希索引中定位查找出具有相同行的代码块编号,将所述代码块编号对应的代码块加入备选代码块列表;根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,将相似度大于预设阈值的代码块作为搜索结果。2.根据权利要求1所述的基于案例标记的相似代码搜索方法,其特征在于,获取待搜索的代码案例之前,还包括:建立哈希索引,所述哈希索引的键为单行代码关键词的符号的哈希值,所述哈希索引的值为所述单行代码对应的代码块编号。3.根据权利要求2所述的基于案例标记的相似代码搜索方法,其特征在于,建立哈希索引,具体包括:获取预设代码库内的源代码,对所述源代码进行分析和切分得到函数代码块集合;分别对所述函数代码块集合中的每个代码块进行词法分析,将全部所述代码块中的关键词映射为预设符号,得到形式代码集合;以所述形式代码集合中的单行符号的哈希值为键,对应的代码块编号为值构建哈希索引。4.根据权利要求1所述的基于案例标记的相似代码搜索方法,其特征在于,根据预设的加权规则对所述形式代码的符号进行加权,具体包括:对所述被标记的代码片段转换得到的符号赋予最高权重,对未被标记的代码转换得到的符号,按照预先规定的符号类型赋予不同的权重。5.根据权利要求1至4中任一项所述的基于案例标记的相似代码搜索方法,其特征在于,根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,具体包括:根据最长公共子序列算法对所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度进行计算,得到所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度。6.根据权利要求5所述的基于案例标记的相似代码搜索方法,其特征在于,根据最长公共子序列算法对所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度进行计算,具体包括:以行为单位,分别将所述待搜索的代码案例与所述备选代码块列表中的每...

【专利技术属性】
技术研发人员:吴鸣徐云邓子含王文杰
申请(专利权)人:中国科学技术大学
类型:发明
国别省市:

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

1