一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种源代码分类方法、装置及电子设备和存储介质与流程

2022-11-13 22:00:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,更具体地说,涉及一种源代码分类方法、装置及一种电子设备和一种计算机可读存储介质。


背景技术:

2.不同于office和windows pe文件等结构化文件,源代码文件在文件开头部分并没有标识其文件类型的唯一文件类型后缀。在文件后缀名未知的条件下,各种编程语言的源代码被操作系统统一地看做文本类型文件。文件后缀名在网络传输、解压和存储中并非必要,且可简便地通过文件改名添加,因此无后缀名的源代码文件广泛存在。
3.反病毒系统根据文件类型对被测文件分流处理,不同类型的文件被分流至不同的检测流程,不同的检测流程对应不同的检测算法,从而实现精细化的病毒检测功能,提升病毒检测效果。例如,反病毒系统对vbscript源代码和powershell源代码可能采用了不同的检测算法。如果将一个vbscript病毒文件误识别为powershell源代码,则该文件送入检测powershell病毒的检测流程,很可能造成漏报。
4.在相关技术中,通过词法分析(lexical analysis)和语法分析(syntax analysis)进行源代码类型的识别。词法分析将字符序列转换为单词序列,语法分析在词法分析的基础上构建由输入单词组成的抽象语法树,并进行语法检查。具体地,根据程序设计语言g的标准,构造语法分析器m,若被测文件p能够被m识别,则判定p是g的源代码。但是,词法分析对系统性能要求较高,另外对于一些病毒脚本,其故意在文件的尾部加入不符合语法的语句,导致上述方案无法识别源代码类型。
5.因此,如何在源代码类型识别时提高准确度、降低性能要求是本领域技术人员需要解决的技术问题。


技术实现要素:

6.本技术的目的在于提供一种源代码分类方法、装置及一种电子设备和一种计算机可读存储介质,在源代码类型识别时提高了准确度、降低了性能要求。
7.为实现上述目的,本技术提供了一种源代码分类方法,包括:
8.获取目标源代码;
9.提取所述目标源代码的目标单词类型信息,并基于所述目标单词类型信息生成所述目标源代码的目标特征向量;
10.将所述目标特征向量输入训练完成的分类模型中,以预测所述目标源代码的类型。
11.其中,所述提取所述目标源代码的目标单词类型信息,包括:
12.对所述目标源代码进行词法分析,以将所述目标源代码转换为目标单词序列;
13.确定所述目标单词序列中每个单词所属的单词类型,并基于每个单词所属的单词类型提取所述目标源代码的目标单词类型信息。
14.其中,所述单词类型包括关键字、标识符和符号中任一项或任几项的组合。
15.其中,所述单词类型信息包括每个单词所属的单词类型和/或所有所述单词类型有序n元组。
16.其中,所述单词类型有序n元组包括单词类型有序二元组、单词类型有序三元组和单词类型有序四元组中任一项或任几项的组合。
17.其中,还包括:
18.获取训练集,并对所述训练集中的每个训练源代码进行类型标注;
19.提取每个所述训练源代码的训练单词类型信息,并基于每个所述训练单词类型信息生成对应的训练源代码的训练特征向量;
20.利用所述训练源代码和对应的训练特征向量训练分类模型,以得到训练完成的分类模型。
21.其中,所述训练源代码的类型包括c程序、c 程序、java程序、python程序、powershell程序、javascript程序、vbscript程序、bash程序和go程序中任一项或任几项的组合。
22.为实现上述目的,本技术提供了一种源代码分类装置,包括:
23.获取模块,用于获取目标源代码;
24.提取模块,用于提取所述目标源代码的目标单词类型信息,并基于所述目标单词类型信息生成所述目标源代码的目标特征向量;
25.预测模块,用于将所述目标特征向量输入训练完成的分类模型中,以预测所述目标源代码的类型。
26.为实现上述目的,本技术提供了一种电子设备,包括:
27.存储器,用于存储计算机程序;
28.处理器,用于执行所述计算机程序时实现如上述源代码分类方法的步骤。
29.为实现上述目的,本技术提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述源代码分类方法的步骤。
30.通过以上方案可知,本技术提供的一种源代码分类方法,包括:获取目标源代码;提取所述目标源代码的目标单词类型信息,并基于所述目标单词类型信息生成所述目标源代码的目标特征向量;将所述目标特征向量输入训练完成的分类模型中,以预测所述目标源代码的类型。
31.在本技术中,将源代码表示为特征向量,通过机器学习算法训练的分类模型完成对源代码类型的识别,提高了源代码类型识别的准确度。另外,源代码的特征向量基于其单词类型信息生成,在一定程度上达到了语法分析的效果,但不承担语法分析的性能负担。由于在特征表示时未使用语法分析,因此能够天然地能够容忍源代码的语法错误。由此可见,本技术提供的源代码分类方法,提高了分类的准确度,降低了性能要求。本技术还公开了一种源代码分类装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
32.应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本技术。
附图说明
33.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
34.图1为根据一示例性实施例示出的一种源代码分类方法的流程图;
35.图2为根据一示例性实施例示出的一种训练分类模型的流程图;
36.图3为根据一示例性实施例示出的一种源代码分类装置的结构图;
37.图4为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
38.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。另外,在本技术实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
39.本技术实施例公开了一种源代码分类方法,在源代码类型识别时提高了准确度、降低了性能要求。
40.参见图1,根据一示例性实施例示出的一种源代码分类方法的流程图,如图1所示,包括:
41.s101:获取目标源代码;
42.s102:提取所述目标源代码的目标单词类型信息,并基于所述目标单词类型信息生成所述目标源代码的目标特征向量;
43.本技术利用分类模型识别目标源代码的类型,该分类模型可以支持识别c程序、c 程序、java程序、python程序、powershell程序、javascript程序、vbscript程序、bash程序和go程序等,本实施例不进行具体限定。
44.上述分类模型的输入为目标源代码对应的目标特征向量,输出为目标源代码的类型。在具体实施中,利用目标源代码对应的目标单词类型信息对目标源代码进行特征表示。例如,可以采用word2vec算法等,在此不进行具体限定。目标单词类型信息可以包括目标源代码包含的每个单词所属的单词类型、所有单词类型有序n元组等,单词类型可以包括关键字、标识符和符号等,关键字例如int,标识符例如变量名和函数名,符号例如左括号、右括号、等号,单词类型有序n元组可以包括单词类型有序二元组、单词类型有序三元组和单词类型有序四元组等,在此不进行具体限定。
45.作为一种可行的实施方式,所述提取所述目标源代码的目标单词类型信息,包括:对所述目标源代码进行词法分析,以将所述目标源代码转换为目标单词序列;确定所述目标单词序列中每个单词所属的单词类型,并基于每个单词所属的单词类型提取所述目标源代码的目标单词类型信息。
46.在具体实施中,首先对目标源代码进行词法分析,将目标源代码转换为目标单词序列。举例来说,若目标源代码为“a=1;b=1;”,词法分析得到的目标单词序列为:a、=、1、;、b、=、1、;。其次,确定每个单词所属的单词类型,对于上述例子,每个单词所属的单词类型分别为:identifier,equal,number,semicolon,identifier,equal,number,semicolon,其中,identifier为标识符,equal为等号,integer为整数,semicolon为分号。最后,基于每个单词所属的单词类型提取目标源代码的目标单词类型信息,对于上述例子,单词类型有序二元组为(identifier,equal),(equal,number),(number,semicolon),(semicolon,identifier),(identifier,equal),(equal,number),(number,semicolon),单词类型有序三元组为(identifier,equal,number),(equal,number,semicolon),(number,semicolon,identifier),(semicolon,identifier,equal),(identifier,equal,number),(equal,number,semicolon),单词类型有序四元组为(identifier,equal,number,semicolon),(equal,number,semicolon,identifier),(number,semicolon,identifier,equal),(semicolon,identifier,equal,number),(identifier,equal,number,semicolon)。可见,本实施例通过单词类型有序n元组的方式,在一定程度上模拟了语法分析中的抽象语法树,因而在不使用语法分析的前提下,达到了一定语法分析的效果,但不承担语法分析的性能负担。需要说明的是,为了提高后续源代码类型预测的准确度,可以对某一类型的有序n元组进行全量分析,例如对于有序三元组来说,可以将目标源代码中的所有有序三元组均转换为特征向量。当然,为了提高预测效率,也可以对某一类型的有序n元组进行部分分析,同样以有序三元组为例,可以仅将目标源代码中的部分有序三元组均转换为特征向量,当然,也可以将多种类型的有序n元组同时进行分析,在此不作限定。
47.s103:将所述目标特征向量输入训练完成的分类模型中,以预测所述目标源代码的类型。
48.在本步骤中,将目标特征向量输入训练完成的分类模型中,以得到目标源代码的类型。
49.在本技术实施例中,将源代码表示为特征向量,通过机器学习算法训练的分类模型完成对源代码类型的识别,提高了源代码类型识别的准确度。另外,源代码的特征向量基于其单词类型信息生成,在一定程度上达到了语法分析的效果,但不承担语法分析的性能负担。由于在特征表示时未使用语法分析,因此能够天然地能够容忍源代码的语法错误。由此可见,本技术实施例提供的源代码分类方法,提高了分类的准确度,降低了性能要求。
50.本实施例介绍上述分类模型的训练过程,具体的:
51.参见图2,根据一示例性实施例示出的一种训练分类模型的流程图,如图2所示,包括:
52.s201:获取训练集,并对所述训练集中的每个训练源代码进行类型标注;
53.在具体实施中,首先获取训练集,该训练集中包括多个训练源代码。其次,对每个训练源代码进行类型标注,例如c程序、c 程序、java程序、python程序、powershell程序、javascript程序、vbscript程序、bash程序和go程序等,在此不进行具体限定。
54.s202:提取每个所述训练源代码的训练单词类型信息,并基于每个所述训练单词类型信息生成对应的训练源代码的训练特征向量;
55.在本步骤中,提取每个训练源代码对应的训练单词类型信息,并基于训练单词类
型信息生成对应的训练源代码的训练特征向量。需要说明的是,训练单词类型信息的提取过程与上一实施例介绍的目标单词类型信息的提取过程类似,在此不再赘述。训练单词类型信息同样可以包括对应的训练源代码包含的每个单词所属的单词类型、所有单词类型有序n元组等,在此不进行具体限定。
56.s203:利用所述训练源代码和对应的训练特征向量训练分类模型,以得到训练完成的分类模型。
57.在本步骤中,利用训练集中各训练源代码和对应的训练特征向量基于机器学习算法训练分类模型,训练完成的分类模型用于预测目标源代码的类型。
58.由此可见,本实施例通过机器学习算法训练用于预测源代码类型的分类模型。在构建训练源代码的特征向量的过程中,基于训练源代码的单词类型信息进行,在一定程度上达到了语法分析的效果,同时减轻了训练分类模型的性能负担。
59.下面对本技术实施例提供的一种源代码分类装置进行介绍,下文描述的一种源代码分类装置与上文描述的一种源代码分类方法可以相互参照。
60.参见图3,根据一示例性实施例示出的一种源代码分类装置的结构图,如图3所示,包括:
61.获取模块301,用于获取目标源代码;
62.提取模块302,用于提取所述目标源代码的目标单词类型信息,并基于所述目标单词类型信息生成所述目标源代码的目标特征向量;
63.预测模块303,用于将所述目标特征向量输入训练完成的分类模型中,以预测所述目标源代码的类型。
64.在本技术实施例中,将源代码表示为特征向量,通过机器学习算法训练的分类模型完成对源代码类型的识别,提高了源代码类型识别的准确度。另外,源代码的特征向量基于其单词类型信息生成,在一定程度上达到了语法分析的效果,但不承担语法分析的性能负担。由于在特征表示时未使用语法分析,因此能够天然地能够容忍源代码的语法错误。由此可见,本技术实施例提供的源代码分类装置,提高了分类的准确度,降低了性能要求。
65.在上述实施例的基础上,作为一种优选实施方式,所述提取模块302包括:
66.分析单元,用于对所述目标源代码进行词法分析,以将所述目标源代码转换为目标单词序列;
67.提取单元,用于确定所述目标单词序列中每个单词所属的单词类型,并基于每个单词所属的单词类型提取所述目标源代码的目标单词类型信息;
68.生成单元,用于基于所述目标单词类型信息生成所述目标源代码的目标特征向量。
69.在上述实施例的基础上,作为一种优选实施方式,所述单词类型包括关键字、标识符和符号中任一项或任几项的组合。
70.在上述实施例的基础上,作为一种优选实施方式,所述单词类型信息包括每个单词所属的单词类型和/或所有所述单词类型有序n元组。
71.在上述实施例的基础上,作为一种优选实施方式,所述单词类型有序n元组包括单词类型有序二元组、单词类型有序三元组和单词类型有序四元组中任一项或任几项的组合。
72.在上述实施例的基础上,作为一种优选实施方式,还包括:
73.标注模块,用于获取训练集,并对所述训练集中的每个训练源代码进行类型标注;
74.生成模块,用于提取每个所述训练源代码的训练单词类型信息,并基于每个所述训练单词类型信息生成对应的训练源代码的训练特征向量;
75.训练模块,用于利用所述训练源代码和对应的训练特征向量训练分类模型,以得到训练完成的分类模型。
76.在上述实施例的基础上,作为一种优选实施方式,所述训练源代码的类型包括c程序、c 程序、java程序、python程序、powershell程序、javascript程序、vbscript程序、bash程序和go程序中任一项或任几项的组合。
77.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
78.基于上述程序模块的硬件实现,且为了实现本技术实施例的方法,本技术实施例还提供了一种电子设备,图4为根据一示例性实施例示出的一种电子设备的结构图,如图4所示,电子设备包括:
79.通信接口1,能够与其它设备比如网络设备等进行信息交互;
80.处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的源代码分类方法。而所述计算机程序存储在存储器3上。
81.当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图4中将各种总线都标为总线系统4。
82.本技术实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
83.可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read-only memory)、可擦除可编程只读存储器(eprom,erasable programmable read-only memory)、电可擦除可编程只读存储器(eeprom,electrically erasable programmable read-only memory)、磁性随机存取存储器(fram,ferromagnetic random access memory)、快闪存储器(flash memory)、磁表面存储器、光盘、或只读光盘(cd-rom,compact disc read-only memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,random access memory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,static random access memory)、同步静态随机存取存储器(ssram,synchronous static random access memory)、动态随机存取存储器(dram,dynamic random access memory)、同步动态随机存取存储器(sdram,synchronous dynamic random access memory)、双倍数据速率同步动态随机存取存储器(ddrsdram,double data rate synchronous dynamic random access memory)、增强型同步动态随机存取存储器(esdram,enhanced synchronous dynamic random access memory)、同步连接
动态随机存取存储器(sldram,synclink dynamic random access memory)、直接内存总线随机存取存储器(drram,direct rambus random access memory)。本技术实施例描述的存储器2旨在包括但不限于这些和任意其它适合类型的存储器。
84.上述本技术实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、dsp,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
85.处理器2执行所述程序时实现本技术实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
86.在示例性实施例中,本技术实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flash memory、磁表面存储器、光盘、或cd-rom等存储器。
87.本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
88.或者,本技术上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本技术各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
89.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献