小程序代码相似度确定方法、装置、服务器及存储介质制造方法及图纸

技术编号:25345675 阅读:20 留言:0更新日期:2020-08-21 17:04
本申请公开了一种小程序代码相似度确定方法、装置、服务器及存储介质,涉及计算机领域。该方法包括:获取第一小程序对应小程序代码的抽象语法树;基于抽象语法树中节点之间的父子关系,对抽象语法树进行特征提取,得到第一小程序的代码特征;根据代码特征生成第一小程序的第一小程序指纹;根据第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定第一小程序与所述第二小程序的代码相似度。采用本申请实施例提供的方法,预先基于抽象语法树为已有小程序生成小程序指纹,后续即可利用小程序指纹库中存储的小程序指纹进行相似度检测,而无需对两两小程序的源代码进行分析比较,提高小程序代码相似度的检测效率。

【技术实现步骤摘要】
小程序代码相似度确定方法、装置、服务器及存储介质
本申请涉及计算机领域,特别涉及一种小程序代码相似度确定方法、装置、服务器及存储介质。
技术介绍
小程序是一种依赖于宿主程序运行的程序。用户只需要安装宿主程序,即可在宿主程序中随时添加和使用各种各样的小程序。宿主程序的开发商提供开放平台,小程序开发者可以通过开放平台上传小程序,由宿主程序的开发商对小程序进行内容审核,并在通过审核后,进行小程序上线。此外,为了保证小程序同质化,在进行内容审核的同时,会对小程序代码进行相似度检测,从而发现小程序代码的抄袭行为。相关技术中,通常使用代码相似度检测工具进行代码相似度检测,其中,代码相似度检测工具包括斯坦福莫斯(StandfordMoss)、戴克(DecKard)等等。然而,相关技术中使用的代码相似度检测工具,仅能够通过比较两两代码确定程序之间的相似度,应用于小程序代码检测时,由于小程序数量庞大,导致小程序代码相似度检测的效率较低,进而影响小程序的上线速度。
技术实现思路
本申请实施例提供了一种小程序代码相似度确定方法、装置、服务器及存储介质,可以提高小程序代码相似度的检测效率。所述技术方案如下:一方面,本申请实施例提供了一种小程序代码相似度确定方法,所述方法包括:获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;根据所述代码特征生成所述第一小程序的第一小程序指纹;根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。另一方面,本申请实施例提供了一种小程序代码相似度确定装置,所述装置包括:语法树获取模块,同于获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;特征提取模块,用于基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;指纹生成模块,用于根据所述代码特征生成所述第一小程序的第一小程序指纹;相似度确定模块,用于根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。可选的,特征提取模块,包括:子树选取单元,用于从所述抽象语法树中选取语法子树,所述语法子树为预设深度;序列生成单元,用于按照节点遍历规则遍历所述语法子树中的节点,得到所述语法子树对应的特征序列,所述特征序列包含所述语法子树中各个节点的节点名称,所述节点遍历规则为深度遍历或广度遍历;特征确定单元,用于将由所述特征序列构成的集合确定为所述代码特征。可选的,指纹生成模块,包括:第一指纹生成单元,用于根据所述代码特征生成所述第一小程序的第一原始指纹,所述第一原始指纹的特征值数量与所述特征序列的数量相同;第二指纹生成单元,用于对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度;指纹确定单元,用于将所述第一原始指纹和所述第一索引指纹确定为所述第一小程序指纹。可选的,第一指纹生成单元,用于:通过字典模型,对所述代码特征中的所述特征序列进行特征转换,得到所述特征序列对应的特征值,所述字典模型中包含所述特征序列与所述特征值之间的映射关系;将由所述特征值构成的集合确定为所述第一原始指纹。可选的,所述装置还包括:模型更新模块,用于响应于所述字典模型不包含所述代码特征中所述特征序列对应的所述特征值,为所述代码特征中的所述特征序列分配目标特征值,所述目标特征值和所述字典模型中的所述特征值不同;根据所述目标特征值和所述代码特征中的所述特征序列更新所述字典模型。可选的,第二指纹生成单元,用于:通过最小哈希算法,对所述第一原始指纹进行特征降维,得到所述第一索引指纹。可选的,相似度确定模块,包括:筛选单元,用于根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,所述第二小程序的第二索引指纹与所述第一索引指纹的索引相似度大于阈值;相似度确定单元,用于根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度。可选的,筛选单元,用于:根据所述第一索引指纹中的第n特征维度,从所述小程序指纹库对应的倒排索引中查找第n小程序列表,所述倒排索引中包括特征维度与小程序之间的对应关系,所述第n小程序列表中候选小程序对应的索引指纹包含所述第n特征维度,n为小于等于所述预设数量的正整数;根据各个小程序列表中所述候选小程序的出现次数,确定各个候选小程序与所述第一小程序的所述索引相似度;将所述索引相似度大于所述阈值的所述候选小程序确定为所述第二小程序。可选的,所述装置还包括:索引更新模块,用于根据所述第一索引指纹更新所述倒排索引,并将所述第一原始指纹与所述第一小程序关联存储。可选的,相似度确定单元,用于:将所述第一原始指纹中特征值与所述第二原始指纹中特征值的杰卡德相似度确定为所述代码相似度。可选的,所述装置还包括:简化模块,用于根据简化规则,对所述抽象语法树进行简化,得到简化后的所述抽象语法树,其中,简化后所述抽象语法树的广度小于简化前所述抽象语法树的广度,且简化后所述抽象语法树的深度小于简化前所述抽象语法树的深度。所述简化规则包括如下至少一条:将所述抽象语法树中的变量替换为所述变量对应的变量类型;和,省略所述抽象语法树中的第一预设字段,所述第一预设字段属于第一字段列表;和,根据第二字段列表简化所述抽象语法树中的第二预设字段,所述第二字段列表中包含所述第二预设字段与简化后字段之间的对应关系;和,简化所述抽象语法树中多级调用字段;和,去重所述抽象语法树中的重复子树;和,根据所述抽象语法树中节点之间的父子关系进行递归简化。另一方面,本申请实施例提供了一种服务器,所述服务器包括:处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述方面所述的小程序代码相似度确定方法。另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述方面所述的小程序代码相似度确定方法。另一方面,提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得计算机执行如上述方面所述的小程序代码相似度确定方法。本申请实施例提供的技术方案带来的有益效果至本文档来自技高网...

【技术保护点】
1.一种小程序代码相似度确定方法,其特征在于,所述方法包括:/n获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;/n基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;/n根据所述代码特征生成所述第一小程序的第一小程序指纹;/n根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。/n

【技术特征摘要】
1.一种小程序代码相似度确定方法,其特征在于,所述方法包括:
获取第一小程序对应小程序代码的抽象语法树,所述抽象语法树用于表征所述小程序代码的抽象语法结构;
基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征;
根据所述代码特征生成所述第一小程序的第一小程序指纹;
根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度。


2.根据权利要求1所述的方法,其特征在于,所述基于所述抽象语法树中节点之间的父子关系,对所述抽象语法树进行特征提取,得到所述第一小程序的代码特征,包括:
从所述抽象语法树中选取语法子树,所述语法子树为预设深度;
按照节点遍历规则遍历所述语法子树中的节点,得到所述语法子树对应的特征序列,所述特征序列包含所述语法子树中各个节点的节点名称,所述节点遍历规则为深度遍历或广度遍历;
将由所述特征序列构成的集合确定为所述代码特征。


3.根据权利要求2所述的方法,其特征在于,所述根据所述代码特征生成所述第一小程序的第一小程序指纹,包括:
根据所述代码特征生成所述第一小程序的第一原始指纹,所述第一原始指纹的特征值数量与所述特征序列的数量相同;
对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度;
将所述第一原始指纹和所述第一索引指纹确定为所述第一小程序指纹。


4.根据权利要求3所述的方法,其特征在于,所述根据所述代码特征生成所述第一小程序的第一原始指纹,包括:
通过字典模型,对所述代码特征中的所述特征序列进行特征转换,得到所述特征序列对应的特征值,所述字典模型中包含所述特征序列与所述特征值之间的映射关系;
将由所述特征值构成的集合确定为所述第一原始指纹。


5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
响应于所述字典模型不包含所述代码特征中所述特征序列对应的所述特征值,为所述代码特征中的所述特征序列分配目标特征值,所述目标特征值和所述字典模型中的所述特征值不同;
根据所述目标特征值和所述代码特征中的所述特征序列更新所述字典模型。


6.根据权利要求3所述的方法,其特征在于,所述对所述第一原始指纹进行特征降维,得到所述第一小程序的第一索引指纹,所述第一索引指纹包含预设数量的特征维度,包括:
通过最小哈希算法,对所述第一原始指纹进行特征降维,得到所述第一索引指纹。


7.根据权利要求3至6任一所述的方法,其特征在于,所述根据所述第一小程序指纹与小程序指纹库中第二小程序的第二小程序指纹,确定所述第一小程序与所述第二小程序的代码相似度,包括:
根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,所述第二小程序的第二索引指纹与所述第一索引指纹的索引相似度大于阈值;
根据所述第一原始指纹,以及所述第二小程序的第二原始指纹,确定所述第一小程序与所述第二小程序的所述代码相似度。


8.根据权利要求7所述的方法,其特征在于,所述根据所述第一索引指纹,从所述小程序指纹库中筛选所述第二小程序,包括:<...

【专利技术属性】
技术研发人员:徐松斌
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

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

1