CN110162297A - 一种源代码段自然语言描述自动生成方法及系统 - Google Patents
一种源代码段自然语言描述自动生成方法及系统 Download PDFInfo
- Publication number
- CN110162297A CN110162297A CN201910375962.8A CN201910375962A CN110162297A CN 110162297 A CN110162297 A CN 110162297A CN 201910375962 A CN201910375962 A CN 201910375962A CN 110162297 A CN110162297 A CN 110162297A
- Authority
- CN
- China
- Prior art keywords
- natural language
- sentence
- source code
- statement
- language description
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 239000012634 fragment Substances 0.000 title claims abstract description 30
- 230000006870 function Effects 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 4
- 238000007781 pre-processing Methods 0.000 claims description 3
- 230000008859 change Effects 0.000 claims description 2
- 230000001186 cumulative effect Effects 0.000 claims 1
- 238000005457 optimization Methods 0.000 description 8
- 239000013598 vector Substances 0.000 description 8
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 239000000203 mixture Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000009415 formwork Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 150000001875 compounds Chemical group 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000011524 similarity measure Methods 0.000 description 1
- 238000013517 stratification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Abstract
本发明公开了一种源代码段自然语言描述自动生成方法及系统,所述方法包括:接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。本发明能够根据源代码生成符合人们阅读习惯的自然语言文本。
Description
技术领域
本发明属于软件开发与维护自动化领域,具体地说,是涉及一种源代码段自然语言描述自动生成方法及系统。
背景技术
当前,网络技术呈现出迅猛的发展态势,由此带来各式各样的应用软件。这些软件涵盖了人们生活的各个方面,扮演着越来越重要的角色。为了提高这些应用软件的质量,程序人员通常会对应用软件进行定期维护。程序维护人员面临的一个巨大困难就是需要事先理解软件的各个功能模块。由于软件的功能越来越复杂,使得支撑这些功能实现的程序代码总量越来越多,迫使程序人员花费大量的时间去查看和阅读源代码,导致软件维护人员在理解程序代码问题上的任务日益繁重。针对上述问题,现阶段的方法主要是对单独的标识符进行注释,或者仅对部分关键语句展开信息提取形成文本形式的功能摘要信息。然而,程序组成部分之间包含着结构信息,基于单行程序生成的文本摘要无法涵盖能准确表达整个代码段的含义和语义,因此难以从根本上解决程序人员阅读代码困难的问题。
发明内容
为克服上述现有技术的不足,本发明提供了一种源代码段自然语言描述自动生成方法及系统,通过设定代码划分规则来筛选源代码中重要信息,并构建新的自然语言模板,用于填充代码特性信息,从而生成自然语言描述语句,节省程序人员花费在阅读和理解源代码上的时间,提高软件的维护效率。
为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:
一种源代码段自然语言描述自动生成方法,包括如下步骤:
接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;
根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。
一个或多个实施例提供了一种源代码段自然语言描述自动生成系统,包括:
预处理模块,用于接收源代码数据,并根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
内处理模块,用于解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,按照预设的自然语言模板生成相应的自然语言描述语句;
外处理模块,用于描述语句权重值计算排序模块,根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。
一个或多个实施例提供了一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的源代码段自然语言描述自动生成方法。
一个或多个实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的源代码段自然语言描述自动生成方法。
以上一个或多个技术方案存在以下有益效果:
本发明通过一种基于多重模块的源代码段自然语言描述自动生成方法,针对全段源代码的划分规则,兼顾所有源代码的信息,确保重要信息的保留,构建新的自然语言模板,用于填充代码特性信息,优先生成源代码行的自然语言描述语句,改变了传统意义上的软件维护方式,使得程序人员不再局限于阅读大量的源代码,从而能节省程序人员花费在阅读和理解源代码上的时间,并提高软件的维护效率。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明一个或多个实施例中源代码段自然语言描述自动生成方法流程图;
图2为本发明一个或多个实施例中源代码段自然语言描述自动生成系统框架图。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
首先对本发明中所涉及的相关技术术语进行说明:
程序语句:编程语言中的单行程序源码语句。
描述语句:自然语言形式下的针对程序语句进行功能描述的文本语句。
源代码行的自然语言描述:即描述语句,针对单行的源代码利用人类通俗易懂的自然语言描述其真正意义的过程,包括类名、主题词、特殊方法名称的解析等。
源代码段的自然语言描述:针对源代码端所含各程序语句的单行自然语言描述语句集合优化而成的简明文本描述。要求该描述符合人类的阅读习惯。
本发明基于多重模块的层次化处理机制,依次实现:首先针对源代码进行划分处理,将源代码划分成各类程序语句;然后挖掘各类程序语句特性,并结合自然语言模板生成源代码行的自然语言描述语句(以下简称描述语句);最后计算各描述语句的权重值、相似度,并进一步对源代码行的自然语言描述语句进行排序优化,生成描述源代码段功能的自然语言描述段。
实施例一
本实施例提供了一种源代码段自然语言描述自动生成方法,如图1所示,包括如下步骤:
步骤(1):输入源代码数据,根据划分规则对源代码数据进行划分处理,输出不同种类的程序语句;
在本实施例中,所述步骤(1)包括如下步骤:
步骤(1-1):构建程序语句划分规则:
以JAVA语言为例,根据其语言的结构特性,围绕一个标准的JAVA程序运行格式展开各类程序语句的讨论。如下:
1Type variable/=X;//对变量的类型声明/赋值;
2variable.method;//对变量的方法调用;
3execution variable(e.g.Operation);//对变量的一系列执行操作;
其中,X的类型为数值或实例化对象操作。
步骤(1-1-1):划分直接程序语句(以下简称直接语句):
定义:在源代码片段中,能够在某种意义上表达出源代码片段操作行为的程序语句称之为该源代码片段的直接语句。直接语句的判定形式包含以下两种情况:
第一种情况:符合标准程序运行格式。对变量执行的操作语句(e.g.输出变量值)包含了该代码片段的直接内容,若一个代码片段中含有此类语句则本文规定该种语句为直接语句。不难理解,通过对变量一系列执行操作程序语句可以直接得出程序的运行结果,而前面的步骤都是为了能够运行程序而作的铺垫。
第二种情况:不符合标准程序运行格式。一般是指源代码段中缺少第一部分或者第三部分或者同时缺少这两部分,此时直接语句分别被判定为对变量执行的操作语句或者对变量的类型声明/赋值语句或者为方法调用语句。
步骤(1-1-2):划分间接程序语句(以下简称间接语句):
定义:在源代码片段中,对直接语句的执行起辅助性作用且担任着程序主要运行的程序语句称之为间接语句。即在一个代码片段中,除根据直接语句的定义判定出的直接语句以及特殊语句外的所有类型的语句均为间接语句。例如以下情况:
1int sum=0;
2for(int i=0;i<str.length;i++){
3int myint-integer.parseInt(str[i])
4sum=sum+myint;}
在该源代码片段中,语句4为直接语句,那么所示语句1、2、3为间接语句。
步骤(1-1-3):划分特殊程序语句(以下简称特殊语句):
定义:在源代码片段中,规定标准输出函数“System.out.println(“”)”为特殊语句。通常情况下,在一个代码片段中如果出现一些特殊作用的程序语句时,往往比直接型语句传递出更多的代码信息。例如在步骤(1-1-2)中所示代码示例中添加代码“System.out.printlin(“The sum of the array elements is:”+sum);”,该代码语句传递出的信息比第4条语句更丰富。
步骤(2):利用现有挖掘工具挖掘上述各类代码特性,结合自然语言模板生成单行源代码的自然语言描述语句;
在本发明实施方式中,所述步骤(2)包括如下步骤:
步骤(2-1):CamelCase将源代码中形式为AxxByy标识符拆分成Axx和Byy独立的单词;例如,使用CamelCase可拆分标识符ABYButton234,提取Button,自动忽略掉ABY和234,因为ABY和234在此标识符中没有实际意义。
步骤(2-2):SWUM识别给定方法签名中的操作、主题和辅助参数,一般识别签名信息中的动词元素如方法名称为操作,被操作的名词元素如方法的实参为主题,实施操作的名词元素如方法的调用者为辅助参数。如所示方法调用语句Contents.add(“list 1”),SWUM直接将动词表示方法调用的操作,即add表示操作。主题和辅助的参数的位置不是固定的。在该示例中,主题为add方法的实参list 1;辅助参数为add方法的调用者类Contents。
步骤(2-3):创建自然语言模板:Verb A preposition B;A为步骤(2-2)识别为该模板的主题,B为步骤(2-2)识别为该模板的辅助参数。本实施例中Verb和preposition的位置固定不变,并分情形通过以下几种策略进行主题和辅助参数的识别。本实施例规定在一个具体方法调用中,如果B部分不存在时,生成的自然句子忽略preposition。具体从四种示例中介绍自然语言模板的转换策略:
Case1:若程序语句的形式为变量声明或赋值。此类语句的形式为:Type variable=number。运算符右侧赋值部分被识别为自然语言模板的主题,左侧声明的变量及其类型部分被识别为自然语言模板的辅助参数。对运算符本身的处理上,若其右侧没有特殊关键字(如new),则使用“assignment”代替且在主题后面。根据自然语言模板生成:“add numberassignment to type varable”。
Case2:若程序语句的形式为对象实例化。意味着语句中包含new关键字,此类语句遵循格式:Class Object=new Class()。该构件使用CamelCase和SWUM将运算符右侧的标识符进行拆分。根据这个格式在内处理构件中手动添加了一个模板:Instantiation classfor object。关键字new后面的类和对象前面的类是相同的,因此只需对关键字new后面的类名进行处理,new本身在程序语句中使用Instantiation代替。例如给定一个直接语句:“DataOutputStream ds=new DataOutputStream(fs);”,首先处理构件使用CamelCase模型将标识符DataOutputStream拆分为“Data、Output、Stream”,由于参数fs在单独的语句中没有具体的实义,因此生成自然语言句子”Instantiation data output stream for ds”;
Case3:若程序语句的形式为类名调用方法。这种形式较为复杂,通常情况下此类语句遵循格式:class.method()。处理构件将该格式拆分为Class.VerbW(Parameter),使其能够满足自然语言模板。其中W为word的缩写字母,用于表示动词后面的标识符。在实际项目源代码中,W和Parameter不一定存在。主题可能是Class、W和Parameter。据下列几种情况判断主题的位置。
①当W和Parameter均存在时且W和Parameter的名称之间没有任何联系时,则默认W为主题。如container.setLayout(null)中,Layout为主题,null为辅助参数。此时Layout对应自然语言模板中的A部分,null对应于B,根据模板生成程序语句:“set Layout nullfor container”。
②当W存在,Parameter不存在时。如container.setLayout(),主题为W。根据模板生成程序语句:“set layout for null”。
③当Parameter不存在,W存在时,container.set(null),主题为null。
根据模板生成程序语句:“set null for container”。
④当Parameter和W均不存在时。如container.set(),class为主题,根据模板生成程序语句:“set container”。若W为复合词,则将利用CamelCase对其作切词处理,名词部分为主题。
Case4:对含有输出函数System.out.printlin()的特殊程序语句。如果函数输出内容为自然语言句子,则直接提取函数中内容用于程序语句。如果函数输出内容包含了特殊形式的标识符,处理方式对照Case1、Case2和Case3。
步骤(3):根据语句主题重要度和语句类型重要度计算上述各行自然语言描述语句的权重值,根据权重值大小进行排序。
在本发明实施方式中,所述步骤(3)包括如下步骤:
步骤(3-1):描述语句主题重要度计算:主题词判定策略来计算主题词的重要性。具体地,当某一词汇被判定为主题词时,若其出现频率越高,则该词汇重要性越高。基于上述分析,描述语句集合Sn(S1,S2,...,Sn)中的单一主题词k的权重值Wei(k)的计算方式如下:
其中,T(k)表示为主题词k在描述语句集合Sn出现的总次数,T(ki)表示为描述语句集合Sn中的所有主题词,n为描述语句集合Sn中所有主题词出现的总次数。当n值取1时,表示该描述语句集合Sn中仅含有一个主题词k。
进一步推导出描述语句Sd(Sd∈Sn)的主题词重要性WeiS(Sd)的计算方式如下:
其中,T(kj)表示为描述语句Sd中的所有主题词,n为描述语句Sd中所有主题词出现的总次数。
步骤(3-2):描述语句对应程序语句类型权重值计算:
根据公式(2)已知单个主题词权重值大小在区间[0,1]内,考虑到各描述语句如果只包含一个主题词时,将不同描述语句对应的程序语句类型权重值之差设定为1.0。从而得出对于描述语句类型层次化权重值WeiT(Sd)的计算方式如下:
步骤(3-3):描述语句权重值计算:本文根据语句权重值的高低确定语句之间的先后顺序,用于填充摘要内容。本文将高权重值语句排在低权重值语句之前,并根据最高权重值语句格式生成摘要。基于上述目的,本文从两个方面计算语句的重要性:语句主题重要性和语句类型。语句Sd(1≤d≤n)在所有语句集合Sn(n≥1)中的权重值Wei(Sd)的计算方式如下:
Wei(Sd)=WeiS(Sd)+WeiT(Sd) (1)
其中,Wei(Sd)表示语句Sd的权重值,WeiS(Sd)表示语句Sd中主题词的权重值,S为单词Subject的缩写;WeiT(Sd)表示为语句Sd的类型重要度,T为单词type的缩写。
步骤(4):根据余弦值相似度计算描述语句的相似度,然后利用语句优化算法删减冗余信息,进一步优化并生成源代码段的自然语言描述。
在本发明实施方式中,所述步骤(4)包括如下步骤:
步骤4.1:从描述语句集合Sn(n≥1)中任意给定两条描述语句Si(1≤i≤n)和Sj(1≤j≤n),计算描述语句Si和Sj的相似度;
步骤4.2:根据余弦相似性计算原理设定一个阈值区间[0,1],当相似值在该区间变化时,分析过程:若Similarity(Si,Sj)值为1,则判断两条描述语句出现信息完全重复的情况,此时删除其中任意一条描述语句;若Similarity(Si,Sj)值为0,则判断两条描述语句出现信息完全不重复的情况,此时按照描述语句输入顺序依次输出结果;若0<Similarity(Si,Sj)<1,则判断两条描述语句出现信息部分重复的情况,此时按照算法进行重复信息删除。
具体地,假设从描述语句集合Sn(n≥1)中给定两条描述语句Si和Sj,其排序结果为Si→Sj,表示描述语句Si的排序顺序优先级高于描述语句Sj。基于步骤(4-2)中对重复语句的分析判定此时不会出现语句重复情况,可直接推断出Similarity(Si,Sj)<1或者Similarity(Si,Sj)=0。针对描述语句Si和Sj的优化过程如下:
首先输入描述语句Si和Sj并根据公式(4)计算描述语句Si和Sj的相似度;然后将描述语句的相似值和设定的阈值0进行对比,若相似值为0,则直接按照初始输入顺序依次输出,若相似值不为0,对于输入的任意长度的描述语句Si和Sj分别可视为n1和n2个词语构成的词汇集合,即其中, 分别表示构成描述语句Si和Sj的词汇。此时,语句优化操作遍历摘要行语句Si和Sj中的词汇集合,若当前遍历词汇wi(wi∈Si)与wj(wj∈Sj)重复时,则保留词汇wi所在语句Si的格式并删除语句Sj中的词汇wj,依次类推,直至两条描述语句之间的词汇全部遍历比较完成;若当前遍历词汇wi(wi∈Si)与wj(wj∈Sj)没有重复时,则跳过本轮遍历。
本节所述语句优化算法的伪代码如算法1所示:
算法1.
Input:Si、Sj∈Sn(n≥1).
Output:Summary.
Algorithmic Process:
If Similarity(Si,Sj)=0then
Output:Summary(Si→Sj).
If Similarity(Si,Sj)=1then
Output:Summary(Si/Sj).
If 0<Similarity(Si,Sj)<1then
Output:Summary(Si,Sj).
其中,Summary(Si→Sj)表示由初始形式下的语句Si和Sj构成的摘要;Summary(Si/Sj)表示由删除语句Sj后的Si构成的摘要;Summary(Si,Sj)表示由优化删除冗余信息操作后语句Si和Sj构成的摘要。
其中,语句间的相似度计算采用余弦相似度计算方法:通过计算两个向量的夹角余弦值来评估描述语句间的相似程度。将描述语句集合Sn映射到多维空间向量中,利用空间向量的形式计算语句的相似性。当向量余弦值在区间[-1,1]内变化时,可直观的显示出描述语句间的相似度。
假设描述语句集合Sn={S1,S2,...Sn},根据下标对应其向量集合Vn={V1,V2,...,Vn},若向量Vi=(xi,yi)和Vj=(xj,yj)的夹角为θ,则由平面向量余弦公式根据所述语句在空间向量中的映射关系描述语句相似性计算公式:
实施例二
本实施例的目的是提供一种源代码段自然语言描述自动生成系统。
一种源代码段自然语言描述自动生成系统,包括:
预处理模块,包含:
源代码数据输入模块,用于接收源代码数据;
源代码数据规则划分模块,用于根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
内处理模块,包含:
源代码特性挖掘模块,用于解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数;
自然语言模板模块,用于按照预设的自然语言模板生成相应的自然语言描述语句;
外处理模块,包含:
描述语句权重值计算排序模块,用于根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述;
描述语句相似度计算优化模块,用于计算上述自然语言描述语句之间的相似度;基于相似度对上述自然语言描述语句中的冗余信息进行删除。
所述源代码数据输入模块、对源代码数据进行规则划分模块、源代码特性挖掘模块、自然语言模板模块、语句权重值计算排序模块、语句相似度计算优化模块依次连接。
实施例三
本实施例的目的是提供一种计算装置。
一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤,包括:
接收源代码数据;
根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数;
按照预设的自然语言模板生成相应的自然语言描述语句;
根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述;
计算上述自然语言描述语句之间的相似度;
基于相似度对上述自然语言描述语句中的冗余信息进行删除。
实施例四
本实施例的目的是提供一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时执行以下步骤:
接收源代码数据;
根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数;
按照预设的自然语言模板生成相应的自然语言描述语句;
根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述;
计算上述自然语言描述语句之间的相似度;
基于相似度对上述自然语言描述语句中的冗余信息进行删除。
以上实施例二、三和四中涉及的各步骤与方法实施例一相对应,具体实施方式可参见实施例一的相关说明部分。术语“计算机可读存储介质”应该理解为包括一个或多个指令集的单个介质或多个介质;还应当被理解为包括任何介质,所述任何介质能够存储、编码或承载用于由处理器执行的指令集并使处理器执行本发明中的任一方法。
以上一个或多个实施例具有以下技术效果:
(1)针对全段源代码的划分规则,兼顾所有源代码的信息,确保重要信息的保留,构建新的自然语言模板,用于填充代码特性信息,优先生成源代码行的自然语言描述语句。此外,根据划分规则划分出的各类程序语句设定类型权重值,作为计算单行自然语言描述语句权重值的重要因素之一。
(2)针对自动化生成的自然语言描述缺乏较高的逻辑性且冗余信息较多的问题,提出一种包含主题词重要度、语句类型重要度的语句权重值计算方法,对自然语言形式下的语句进行优先级排序;确保生成的自然语言描述具有较高的逻辑性,符合人类阅读习惯和规范。基于余弦相似性度量方法,对冗余信息进行优化合并,使得基于该策略生成的源代码段自然语言描述具有较高的准确率和简洁性。
相比阅读复杂的源代码段,人们更喜欢阅读简洁的自然语言文本形式的功能描述,因此通过上述技术方案自动生成程序源代码段的自然语言描述技术改变了传统意义上的软件维护方式,使得程序人员不再局限于阅读大量的源代码,从而能节省程序人员花费在阅读和理解源代码上的时间,并提高软件的维护效率。
本领域技术人员应该明白,上述本发明的各模块或各步骤可以用通用的计算机装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。本发明不限制于任何特定的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.一种源代码段自然语言描述自动生成方法,其特征在于,包括如下步骤:
接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;
根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。
2.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述方法还包括,对得到的该源代码数据的自然语言描述进行优化处理:
计算上述自然语言描述语句之间的相似度;
基于相似度对上述自然语言描述语句中的冗余信息进行删除。
3.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述预设的分类规则为:
定义标准程序运行格式包括三部分:对变量类型声明/赋值、对变量的方法调用和对变量的执行过程;将符合所述标准程序运行格式、缺少第一部分、缺少第三部分或者同时缺少第一部分和第三部分的程序语句,判定为直接语句;规定标准输出函数判定为特殊语句;其他语句均判定为间接语句。
4.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,生成自然语言描述语句包括:根据各程序语句对应的主题、动作和辅助参数,结合预设的自然语言模板生成相应的自然语言描述语句;其中,预设的自然语言模板为:动词主题介词辅助参数,若不存在辅助参数,忽略后两项。
5.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述自然语言描述语句的权重值为语句主题重要度和语句类型重要度之和。
6.如权利要求5所述的源代码段自然语言描述自动生成方法,其特征在于,所述语句主题重要度计算方法为:基于每个主题词语在所有自然语言描述语句中出现的频率,确定该主题词语的重要性;对于每个自然语言描述语句,将该语句中所有主题词语的重要性进行累加,得到该语句的主题重要度;
所述语句类型重要度根据所述自然语言描述语句所属类型得到,语句类型重要度满足:间接语句<直接语句<特殊语句。
7.如权利要求2所述的源代码段自然语言描述自动生成方法,其特征在于,基于相似度对上述自然语言描述语句中的冗余信息进行删除包括:
若两个语句相似度为1,删除其中任意一条语句;
若两个语句相似度大于0且小于1,对这两个语句中包含的词汇进行循环比对,将重复的词汇在其中一个语句中删除。
8.一种源代码段自然语言描述自动生成系统,其特征在于,包括:
预处理模块,用于接收源代码数据,并根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;
内处理模块,用于解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,按照预设的自然语言模板生成相应的自然语言描述语句;
外处理模块,用于描述语句权重值计算排序模块,根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。
9.一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述的源代码段自然语言描述自动生成方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一项所述的源代码段自然语言描述自动生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910375962.8A CN110162297A (zh) | 2019-05-07 | 2019-05-07 | 一种源代码段自然语言描述自动生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910375962.8A CN110162297A (zh) | 2019-05-07 | 2019-05-07 | 一种源代码段自然语言描述自动生成方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110162297A true CN110162297A (zh) | 2019-08-23 |
Family
ID=67633592
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910375962.8A Pending CN110162297A (zh) | 2019-05-07 | 2019-05-07 | 一种源代码段自然语言描述自动生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110162297A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
CN111625276A (zh) * | 2020-05-09 | 2020-09-04 | 山东师范大学 | 基于语义与语法信息融合的代码摘要生成方法及系统 |
WO2022189925A1 (en) * | 2021-03-11 | 2022-09-15 | International Business Machines Corporation | Generating natural languages interface from graphic user interfaces |
CN116048454A (zh) * | 2023-03-06 | 2023-05-02 | 山东师范大学 | 一种基于迭代对比学习的代码重排方法及系统 |
CN116909533A (zh) * | 2023-09-13 | 2023-10-20 | 北京安锐卓越信息技术股份有限公司 | 计算机程序语句编辑方法、装置、存储介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1122640A1 (en) * | 2000-01-31 | 2001-08-08 | BRITISH TELECOMMUNICATIONS public limited company | Apparatus for automatically generating source code |
CN102622342A (zh) * | 2011-01-28 | 2012-08-01 | 上海肇通信息技术有限公司 | 中间语系统、中间语引擎、中间语翻译系统和相应方法 |
CN106446109A (zh) * | 2016-09-14 | 2017-02-22 | 科大讯飞股份有限公司 | 语音文件摘要的获取方法和装置 |
CN108345457A (zh) * | 2018-01-24 | 2018-07-31 | 上海交通大学 | 一种对程序源代码自动生成功能描述性注释的方法 |
US20190079741A1 (en) * | 2017-09-08 | 2019-03-14 | Devfactory Fz-Llc | Pruning Engine |
-
2019
- 2019-05-07 CN CN201910375962.8A patent/CN110162297A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1122640A1 (en) * | 2000-01-31 | 2001-08-08 | BRITISH TELECOMMUNICATIONS public limited company | Apparatus for automatically generating source code |
CN102622342A (zh) * | 2011-01-28 | 2012-08-01 | 上海肇通信息技术有限公司 | 中间语系统、中间语引擎、中间语翻译系统和相应方法 |
CN106446109A (zh) * | 2016-09-14 | 2017-02-22 | 科大讯飞股份有限公司 | 语音文件摘要的获取方法和装置 |
US20190079741A1 (en) * | 2017-09-08 | 2019-03-14 | Devfactory Fz-Llc | Pruning Engine |
CN108345457A (zh) * | 2018-01-24 | 2018-07-31 | 上海交通大学 | 一种对程序源代码自动生成功能描述性注释的方法 |
Non-Patent Citations (2)
Title |
---|
XIAORAN WANG等: "Automatically generating natural language descriptions for object-related statement sequences", 《2017 IEEE 24TH INTERNATIONAL CONFERENCE ON SOFTWARE ANALYSIS, EVOLUTION AND REENGINEERING (SANER)》 * |
李舒嫒等: "基于网站层次结构和主题模型LDA的网站自动摘要", 《计算机工程》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110673840A (zh) * | 2019-09-23 | 2020-01-10 | 山东师范大学 | 一种基于标签图嵌入技术的自动代码生成方法及系统 |
CN111625276A (zh) * | 2020-05-09 | 2020-09-04 | 山东师范大学 | 基于语义与语法信息融合的代码摘要生成方法及系统 |
WO2022189925A1 (en) * | 2021-03-11 | 2022-09-15 | International Business Machines Corporation | Generating natural languages interface from graphic user interfaces |
US11966562B2 (en) | 2021-03-11 | 2024-04-23 | International Business Machines Corporation | Generating natural languages interface from graphic user interfaces |
CN116048454A (zh) * | 2023-03-06 | 2023-05-02 | 山东师范大学 | 一种基于迭代对比学习的代码重排方法及系统 |
CN116909533A (zh) * | 2023-09-13 | 2023-10-20 | 北京安锐卓越信息技术股份有限公司 | 计算机程序语句编辑方法、装置、存储介质及电子设备 |
CN116909533B (zh) * | 2023-09-13 | 2024-01-26 | 北京安锐卓越信息技术股份有限公司 | 计算机程序语句编辑方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110162297A (zh) | 一种源代码段自然语言描述自动生成方法及系统 | |
Del Fabro et al. | Semi-automatic model integration using matching transformations and weaving models | |
Friedrich et al. | Process model generation from natural language text | |
Kumar et al. | Design and management of flexible process variants using templates and rules | |
Didonet Del Fabro et al. | Towards the efficient development of model transformations using model weaving and matching transformations | |
US7593927B2 (en) | Unstructured data in a mining model language | |
CN104360859B (zh) | 一种可视化的服务开发方法和系统 | |
CN107038262B (zh) | 一种关联频度计算的基于数据图谱、信息图谱和知识图谱框架的语义建模方法 | |
US20070006128A1 (en) | Method for evaluating dynamic expressions | |
CN103593335A (zh) | 基于本体一致性验证推理的中文语义校对方法 | |
CN109857458B (zh) | 基于ANTLR的AltaRica 3.0的扁平化的转化方法 | |
Oluwagbemi et al. | Automatic generation of test cases from activity diagrams for UML based testing (UBT) | |
Guerra et al. | Inter-modelling with patterns | |
CN114528846A (zh) | 一种用于人工智能的概念网络及其生成方法 | |
CN109977514B (zh) | 一种雷达同步数据流图模型调度序列生成方法 | |
Ates et al. | Graph grammar induction on structural data for visual programming | |
CN113190222A (zh) | 一种基于SysML的安全关键自治系统建模方法及工具 | |
dos Santos et al. | Verifying object-based graph grammars | |
Reger | Better Proof Output for Vampire. | |
CN111176658B (zh) | 基于元对象机制的AADL到Simulink模型自动转换方法 | |
Ferreira et al. | Formal verification of object-oriented graph grammars specifications | |
CN113468875A (zh) | 一种面向SCADA系统自然语言交互接口语义分析的MNet方法 | |
Wang et al. | Using workflow patterns to model and validate service requirements | |
Burbank et al. | Final report of the 2005 language engineering workshop on statistical machine translation by parsing | |
Amálio et al. | Frameworks based on templates for rigorous model-driven development |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190823 |