[发明专利]基于案例标记的相似代码搜索方法及系统有效
申请号: | 202110214970.1 | 申请日: | 2021-02-25 |
公开(公告)号: | CN112925874B | 公开(公告)日: | 2022-09-06 |
发明(设计)人: | 吴鸣;徐云;邓子含;王文杰 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F16/31 | 分类号: | G06F16/31;G06F16/33;G06F40/151;G06F8/41;G06K9/62 |
代理公司: | 北京轻创知识产权代理有限公司 11212 | 代理人: | 冯瑛琪 |
地址: | 230026*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 案例 标记 相似 代码 搜索 方法 系统 | ||
1.一种基于案例标记的相似代码搜索方法,其特征在于,包括:
获取待搜索的代码案例,所述代码案例中包括被标记的代码片段;
对所述代码案例进行词性分析,将所述代码案例中的关键词转换为预设符号,得到形式代码;
根据预设的加权规则对所述形式代码的符号进行加权;
计算加权后所述形式代码的每一行的哈希值,在预设的哈希索引中定位查找出具有相同行的代码块编号,将所述代码块编号对应的代码块加入备选代码块列表;
根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,将相似度大于预设阈值的代码块作为搜索结果;
所述根据预设相似度计算规则计算所述待搜索的代码案例与所述备选代码块列表中代码块的相似度,具体包括:
根据最长公共子序列算法对所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度进行计算,得到所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度;
所述根据最长公共子序列算法对所述备选代码块列表中的每个代码块与所述待搜索的代码案例的相似度进行计算,具体包括:
以行为单位,分别将所述待搜索的代码案例与所述备选代码块列表中的每个代码块逐一比较,将所述代码块中与所述待搜索的代码案例的相似代码行作为最长公共子序列算法中的等同元素,使用最长公共子序列算法进行相似度计算;
所述相似代码行由预设比较规则确定;
根据以下方式确定所述相似代码行:
条件一:计算两行代码的符号数目的比值,将符号数目相对较小的一方作为分子,另一方作为分母,要求比值大于或等于第一阈值;
条件二:计算两行代码的符号的最长公共子序列,并分别得到所述最长公共子序列的符号的权重之和w1,以及所述待搜索的代码案例的对应的代码行的符号的权重之和w2,要求w1/w2大于或等于第二阈值;
条件三:若待比较的代码案例包含被标记的关键词,则计算关键词在所述符号的最长公共子序列中出现的个数n1,得到所述符号的最长公共子序列中的关键词的数量n1与对应行代码包含的全部关键符号的总数量n2之比,要求n1/n2大于或等于第三阈值;
若所述代码块中的目标代码行与所述待搜索的代码案例中对应的代码行同时满足所述条件一、所述条件二和所述条件三,则所述目标代码行为相似代码行。
2.根据权利要求1所述的基于案例标记的相似代码搜索方法,其特征在于,获取待搜索的代码案例之前,还包括:
建立哈希索引,所述哈希索引的键为单行代码关键词的符号的哈希值,所述哈希索引的值为所述单行代码对应的代码块编号。
3.根据权利要求2所述的基于案例标记的相似代码搜索方法,其特征在于,建立哈希索引,具体包括:
获取预设代码库内的源代码,对所述源代码进行分析和切分得到函数代码块集合;
分别对所述函数代码块集合中的每个代码块进行词法分析,将全部所述代码块中的关键词映射为预设符号,得到形式代码集合;
以所述形式代码集合中的单行符号的哈希值为键,对应的代码块编号为值构建哈希索引。
4.根据权利要求1所述的基于案例标记的相似代码搜索方法,其特征在于,根据预设的加权规则对所述形式代码的符号进行加权,具体包括:
对所述被标记的代码片段转换得到的符号赋予最高权重,对未被标记的代码转换得到的符号,按照预先规定的符号类型赋予不同的权重。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110214970.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:空调系统的控制方法及空调系统
- 下一篇:空调冷却水系统的控制方法