一种MATLAB程序文件相似度的评估方法与流程

文档序号:11950175阅读:745来源:国知局
一种MATLAB程序文件相似度的评估方法与流程

本发明属于文件相似度比对技术领域,特别是,更为具体地讲,涉及一种MATLAB程序文件相似度的评估方法。



背景技术:

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

随着大数据时代的来临,MATLAB程序文件越来越多,也越来越频繁的被使用,这导致了MATLAB程序文件重复率极高,为了使得海量MATLAB程序文件变得简洁和效率更高,需要对MATLAB程序文件相似度评估。



技术实现要素:

本发明的目的在于克服现有技术的不足,提出一种MATLAB程序文件相似度的评估方法,以得到两个MATLAB程序文件相似度,从而使得MATLAB程序文件变得简洁,并使运行效率提高。

为实现上述发明目的,本发明MATLAB程序文件相似度的评估方法,其特征在于,包括以下步骤:

(1)、初始化MATLAB运行环境

清除全局变量,关闭未关闭的运行窗口,删除不需要的变量和文件;

(2)、文件读取与相似度评估模式选取

读取样本文件以及对比文件,存入全局变量,同时,选取相似度评估模式存入全局变量,其中样本文件和对比文件都是MATLAB程序文件,相似度评估模式包括基于结构的相似度评估以及基于过程的相似度评估;

(3)、基于结构的相似度评估

3.1)、预处理

获取全局变量,当选取了基于结构的相似度评估的时候,首先对样本文件进行预处理,获取MATLAB程序文件(该样本文件)中的第一行代码;

去除注释:对于符号“%”,如果其在两个符号“'”之间,则认为其在代码中,予以保留,否则,认为其不在代码中,为注释符号,删除该符号“%”以及该符号后的内容;

分行:对于符号“;”,如果其在“{}”或“[]”之间,则不进行分行,如果没有,则进行分行;

对代码中的空格判断:对大于等于2的空格,利用差分方程,进行剔除,使得代码之间中只保留一个空格;

空行处理:判断是否为空行,如果为空行,剔除此行;

把第一行代码存到样本文件元胞中,同理也对其他行,进行相应的预处理,直到样本文件的全部代码处理完毕;

然后,对对比文件也进行样本文件相同的预处理;

3.2)、寻找关键字与基于关键字的相似度评估

3.2.1)、从样本文件元胞中分离每个字符串,并把字符串与关键字库的关键字进行对比,如果存在,则与对比文件元胞中的字符串进行对比,如果在对比文件元胞中存在,则作为关键字予以保留;

3.2.2)、相似度评估

关键字的位置:获取关键字的位置信息,如果关键字在样本文件元胞、对比文件元胞中为同一行且位置差为5,则相似度百分比为100;为同一行且位置差大于5小于15,则相似度百分比为100-(位置-5);为同一行且位置差大于15,则相似度为0;如果关键字不在同一行,则不进行比较;对于每一个关键字,根据关键字的位置信息中,得到各行的相似度进行平均,得到该关键字的相似度;对各个关键字的相似度取均值作为关键字位置相似度;

关键字切割:将样本文件中两个关键字之间的代码进行切割,得到m段代码,并进行保存,同样,将将对比文件中两个关键字之间的代码进行切割,得到n段代码,并进行保存,然后将m段代码中的每一段代码与n段代码逐一进行比较,如有相同,则定义相似度百分比为100,如都不同,则定义相似度为0; 将各段比较得到的相似度取均值,得到关键字切割相似度;

比较关键字位置相似度以及关键字切割相似度,从中取相似度最大的值作为评估出的基于关键字的相似度;

3.3)、基于行的相似度评估

以行进行分析:从样本文件中依次读取一行代码提取出来,与对比文件中的每一行代码进行准确对比,如果相同,则进行标记;

准确比对结束后,依次将样本文件中未标记的行代码的关键字进行切割,并与对比文件中未标记的行代码进行模糊对比,如果两行代码中存在大于等于3个关键字,则匹配成功,进行标记;

将进行了标记的行数除以总行数,得到基于行的相似度,其中,所述总行数是指样本文件、对比文件代码行数中的较大者;

3.4)、对于基于关键字的相似度和基于行的相似度中,选取相似度较小值作为基于结构的相似度评估的结果;

(4)、基于过程的相似度评估

获取全局变量,当选取了基于过程的相似度评估的时候,创建不可见的figure,让样本文件程序运行,将运行产生的变量进行保存,把对应变量值也保存,同理对对比文件也进行相同操作;

首先,将保存的样本文件运行得到的每一个变量值,与保存的对比文件运行得到的变量值逐一进行对比,如果在对比文件运行得到的变量值中有一个变量值相同,则定义样本文件运行得到的该变量值的相似度百分比为100,如果都不同,则定义相似度为0,然后,将样本文件运行得到的所有变量值的相似度进行平均,得到基于过程的相似度。

本发明的目的是这样实现的。

针对现有技术存在的问题,本发明通过全局变量,对MATLAB程序文件进行预处理,然后寻找关键字,再通过关键字的位置比较、关键字切割内容比较,得到基于关键字的相似度,通过基于行代码的精确和模糊比较,得到基于行的相似度,最终选取基于关键字的相似度、基于行的相似度的较小值作为基于结构的相似度评估的结果。此外,本发明还提供基于过程的相似度,通过运行产生的变量值进行相互逐一比较,然后平均得到基于过程的相似度。这样,将相 似度大的MATLAB程序文件,通过适度修改,使其可以相互调用,而变得简洁,同时使运行效率提高。

附图说明

图1是本发明MATLAB程序文件相似度的评估方法一种具体实施方式流程图;

图2是图1所示的基于结构的相似度评估中预处理的一种具体实施方式流程图;

图3是本发明中样本文件以及对比文件的程序代码一种具体实施方式图,其中,(a)为样本文件的程序代码、(b)为对比文件的程序代码;

图4是图3所示样本文件以及对比文件的程序代码处理后的图,其中,(a)为预处理后样本文件的程序代码、(b)为预处理后对比文件的程序代码;

图5是基于行的相似度评估中的程序代码精确对比后示意图,(a)为标记后样本文件的程序代码,(b)为标记后对比文件的程序代码;

图6是基于行的相似度评估中的程序代码模糊对比后示意图,a)为标记后样本文件的程序代码,(b)为标记后对比文件的程序代码;

图7是本发明中样本文件以及对比文件的程序代码另一种具体实施方式图,其中,(a)为样本文件的程序代码、(b)为对比文件的程序代码。

具体实施方式

下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。

图1是本发明MATLAB程序文件相似度的评估方法一种具体实施方式流程图。

在本实施例中,如图1所示,本发明MATLAB程序文件相似度的评估方法包括四个主要步骤,即:

S1、初始化MATLAB运行环境

运行MATLAB软件,进行初始化运行环境:清除全局变量,关闭未关闭的运行窗口,删除多余(不需要)的变量和文件。

S2、文件读取与相似度评估模式选取

读取样本文件以及对比文件,存入全局变量,同时,选取相似度评估模式存入全局变量,其中样本文件和对比文件是需要进行相似度评估的MATLAB程序文件。相似度评估模式包括基于结构的相似度评估以及基于过程的相似度评估。

S3、基于结构的相似度评估

3.1)、预处理

当选取了基于结构的相似度评估的时候,首先对样本文件进行预处理:获取全局变量,获取MATLAB程序文件(该样本文件)中的第一行代码,然后进行以下操作,如图2所示。

去除注释:对于符号“%”,如果其在两个符号“'”之间,则认为其在代码中,予以保留,否则,认为其不在代码中,为注释符号,删除该符号“%”以及该符号后的内容;

分行:对于符号“;”,如果其在“{}”或“[]”之间,则不进行分行,如果没有,则进行分行;

对代码中的空格判断:对大于等于2的空格,利用差分方程,进行剔除,使得代码之间中只保留一个空格;

空行处理:判断是否为空行,如果为空行,剔除此行;

把第一行代码存到样本文件元胞中,同理也对其他行,进行相应的预处理,直到样本文件的全部代码处理完毕;

然后,对对比文件也进行样本文件相同的预处理;

在本实施例中,样本文件的程序代码、对比文件的程序代码分别如图3(a)、(b)所示。预处理后的预处理后样本文件程序代码、对比文件程序代码分别如图4(a)、(b)所示:

从图3、图4所示的样本文件、对比文件预处理前后的代码来看,存在的注释、空行和空格都去掉了,并且,由于分行符号“;”的存在,都从10行变成了11行。

3.2)、寻找关键字与基于关键字的相似度评估

从样本文件元胞中分离每个字符串,并把字符串与关键字库的关键字进行 对比,如果存在,则与对比文件元胞中的字符串进行对比,如果在对比文件元胞中存在,则作为关键字予以保留。

在本实施例中,得到的关键字为'function','flag','strcat','if','strcmp','elseif','end'。

关键字的位置:获取关键字的位置信息,如果关键字在样本文件元胞、对比文件元胞中为同一行且位置差为5,则相似度百分比为100;为同一行且位置差大于5小于15,则相似度百分比为100-(位置-5);为同一行且位置差大于15,则相似度为0;如果关键字不在同一行,则不进行比较;对于每一个关键字,根据关键字的位置信息中,得到各行的相似度进行平均,得到该关键字的相似度;对各个关键字的相似度取均值作为关键字位置相似度。

在本实施例中,对关键字flag的位置信息进行获取,结合图4,我们可以看到关键字flag在样本文件中的位置为24[][][][]17[][]19[][],关键字flag在对比文件中的位置为24[][][][]15[]21[][][],其中,数字顺序表示的是关键字所在的行,数字值表示的是关键字的位置,[]表示所在行无该关键字。如24[][][][]17[][]19[][]表示第1行第24个字符串位置为关键字flag,第2、3、4、5行无该关键字flag,第6行第17个字符串位置为关键字flag,第7、8行无该关键字flag,第9行第19个字符串位置为关键字flag,第10、11行无该关键字flag。在本实施例中,结合图4,我们可以看到,当进行关键字的位置判断时,由于样本文件中第一个(即第1行)位置差为0,该行的相似度百分比为100,第二个(即第6行)位置差为2,该行的相似度百分比也为100,第三个(即第9行)在对比文件中相应行没有,所以不进行对比,因此,该关键字的相似度为100%。

关键字切割:将样本文件中两个关键字之间的代码进行切割,得到m段代码,并进行保存,同样,将将对比文件中两个关键字之间的代码进行切割,得到n段代码,并进行保存,然后将m段代码中的每一段代码与n段代码逐一进行比较,如有相同,则定义相似度百分比为100,如都不同,则定义相似度为0;将各段比较得到的相似度取均值,得到关键字切割相似度。

由于flag的数量大于等于2,所以对flag进行关键字切割,可以看出来,样本文件中关键字所在行为1,6,9,对比文件中关键字所在行为1,6,8,把样本文件2至5行的代码,7至8行的代码,第10代码进行保存,同理对比文件也如此。 然后进行代码段的对比,如果相同,百分比记为100,如果不同,则记为0。在本实施例中样本文件、对比文件的样本文件2行至5的代码相同,样本文件中第10行代码与对比文件中的7行代码相同,而样本文件中的7至8行代码在对比文件中没有,因此为0,这样取均值,得到关键字切割相似度为66.7%。

在本实施例中,比较关键字位置相似度100%以及关键字切割相似度66.7%,从中取相似度最大的值作为评估出的基于关键字的相似度。在本实施例中,基于关键字的相似度就是100%。

3.3)、基于行的相似度评估

以行进行分析:从样本文件中依次读取一行代码提取出来,与对比文件中的每一行代码进行准确对比,如果相同,则进行标记。

在本实施例中,当进入基于行的相似度评估的时候,首先进行准确比对,如图5所示,得到的标记为0-6即为完全一致的。

准确比对结束后,依次将样本文件中未标记的行代码的关键字进行切割,并与对比文件中未标记的行代码进行模糊对比,如果两行代码中存在大于等于3个关键字,则匹配成功,进行标记。

在本实施例中,如图6所示,进一步标记为7-8的即为模糊对比以后的结果。

将进行了标记的行数9除以总行数11,得到基于行的相似度为81.8%,其中,所述总行数是指样本文件、对比文件代码行数中的较大者。

3.4)、在本实例中,基于关键字的相似度为100%和基于行的相似度81.8%中,选取相似度较小值81.8%作为基于结构的相似度评估的结果即基于结构的相似度为81.8%

S4、基于过程的相似度评估

在本发明中,还提供基于过程的相似度评估。让样本文件程序运行,将运行产生的变量进行保存,把对应变量值也保存,同理对对比文件也进行相同操作。

首先,将保存的样本文件运行得到的每一个变量值,与保存的对比文件运行得到的变量值逐一进行对比,如果在对比文件运行得到的变量值中有一个变量值相同,则定义样本文件运行得到的该变量值的相似度为100,如果都不同,则定义相似度为0,然后,将样本文件运行得到的所有变量值的相似度进行平均, 得到基于过程的相似度。

在本实施例中,选择基于过程的相似度评估的MATLAB程序文件,如图7所示。创建不可见的figure,让程序运行,产生的变量如表1所示,分别为:

表1

表1左边为样本文件运行结果,右边为对比文件运行结果。从表1可以看出,变量t和t1两个变量的值长度相同,进一步比较内容,也完全相同,故相似度百分比为100,同样,变量x和x1、变量y和y1的值都相同,因此基于过程的相似度100%。

本发明创新性地提出了一种MATLAB程序文件相似度的评估方法,包括预处理体系和框架,关键字位置信息和切割出的代码进行充分比对分析,行精确评估与行里面的关键字进行的模糊评估;以及在基于过程的相似度评估中,创建了不可见的figure来加载运行产生的图形,使得主界面不受任何影响,从而得到比较全面的相似度评估,给用户进行修改奠定了基础,使得MATLAB程序文件变得简洁,并使运行效率提高。

尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1