(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号(43)申请公布日(21)申请号201910375962.8(22)申请日2019.05.07(71)申请人山东师范大学地址250014山东省济南市历下区文化东路88号(72)发明人吕晨 张菡文 张海杰 柴春蕾 吕蕾 郑向伟 刘弘 (74)专利代理机构济南圣达知识产权代理有限公司37221代理人黄海丽(51)Int.Cl.G06F8/30(2018.01)G06F8/73(2018.01)(54)发明名称一种源代码段自然语言描述自动生成方法及系统(57)摘要本发明公开了一种源代码段自然语言描述自动生成方法及系统,所述方法包括:接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。本发明能够根据源代码生成符合人们阅读习惯的自然语言文本。权利要求书2页说明书9页附图2页CN110162297A2019.08.23CN110162297A1.一种源代码段自然语言描述自动生成方法,其特征在于,包括如下步骤:接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。2.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述方法还包括,对得到的该源代码数据的自然语言描述进行优化处理:计算上述自然语言描述语句之间的相似度;基于相似度对上述自然语言描述语句中的冗余信息进行删除。3.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述预设的分类规则为:定义标准程序运行格式包括三部分:对变量类型声明/赋值、对变量的方法调用和对变量的执行过程;将符合所述标准程序运行格式、缺少第一部分、缺少第三部分或者同时缺少第一部分和第三部分的程序语句,判定为直接语句;规定标准输出函数判定为特殊语句;其他语句均判定为间接语句。4.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,生成自然语言描述语句包括:根据各程序语句对应的主题、动作和辅助参数,结合预设的自然语言模板生成相应的自然语言描述语句;其中,预设的自然语言模板为:动词主题介词辅助参数,若不存在辅助参数,忽略后两项。5.如权利要求1所述的源代码段自然语言描述自动生成方法,其特征在于,所述自然语言描述语句的权重值为语句主题重要度和语句类型重要度之和。6.如权利要求5所述的源代码段自然语言描述自动生成方法,其特征在于,所述语句主题重要度计算方法为:基于每个主题词语在所有自然语言描述语句中出现的频率,确定该主题词语的重要性;对于每个自然语言描述语句,将该语句中所有主题词语的重要性进行累加,得到该语句的主题重要度;所述语句类型重要度根据所述自然语言描述语句所属类型得到,语句类型重要度满足:间接语句<直接语句<特殊语句。7.如权利要求2所述的源代码段自然语言描述自动生成方法,其特征在于,基于相似度对上述自然语言描述语句中的冗余信息进行删除包括:若两个语句相似度为1,删除其中任意一条语句;若两个语句相似度大于0且小于1,对这两个语句中包含的词汇进行循环比对,将重复的词汇在其中一个语句中删除。8.一种源代码段自然语言描述自动生成系统,其特征在于,包括:预处理模块,用于接收源代码数据,并根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;内处理模块,用于解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,按照预设的自然语言模板生成相应的自然语言描述语句;权 利 要 求 书1/2页2CN110162297A2外处理模块,用于描述语句权重值计算排序模块,根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。9.一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述的源代码段自然语言描述自动生成方法。10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任一项所述的源代码段自然语言描述自动生成方法。权 利 要 求 书2/2页3CN110162297A3一种源代码段自然语言描述自动生成方法及系统技术领域[0001]本发明属于软件开发与维护自动化领域,具体地说,是涉及一种源代码段自然语言描述自动生成方法及系统。背景技术[0002]当前,网络技术呈现出迅猛的发展态势,由此带来各式各样的应用软件。这些软件涵盖了人们生活的各个方面,扮演着越来越重要的角色。为了提高这些应用软件的质量,程序人员通常会对应用软件进行定期维护。程序维护人员面临的一个巨大困难就是需要事先理解软件的各个功能模块。由于软件的功能越来越复杂,使得支撑这些功能实现的程序代码总量越来越多,迫使程序人员花费大量的时间去查看和阅读源代码,导致软件维护人员在理解程序代码问题上的任务日益繁重。针对上述问题,现阶段的方法主要是对单独的标识符进行注释,或者仅对部分关键语句展开信息提取形成文本形式的功能摘要信息。然而,程序组成部分之间包含着结构信息,基于单行程序生成的文本摘要无法涵盖能准确表达整个代码段的含义和语义,因此难以从根本上解决程序人员阅读代码困难的问题。发明内容[0003]为克服上述现有技术的不足,本发明提供了一种源代码段自然语言描述自动生成方法及系统,通过设定代码划分规则来筛选源代码中重要信息,并构建新的自然语言模板,用于填充代码特性信息,从而生成自然语言描述语句,节省程序人员花费在阅读和理解源代码上的时间,提高软件的维护效率。[0004]为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:[0005]一种源代码段自然语言描述自动生成方法,包括如下步骤:[0006]接收源代码数据,根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;[0007]解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,生成相应的自然语言描述语句;[0008]根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。[0009]一个或多个实施例提供了一种源代码段自然语言描述自动生成系统,包括:[0010]预处理模块,用于接收源代码数据,并根据预设的分类规则对源代码数据进行划分,得到不同类型的程序语句;[0011]内处理模块,用于解析所述程序语句,获取各程序语句对应的主题、动作和辅助参数,按照预设的自然语言模板生成相应的自然语言描述语句;[0012]外处理模块,用于描述语句权重值计算排序模块,根据语句主题重要度和语句类型重要度计算上述自然语言描述语句的权重值,并根据权重值从高到低进行排序,得到该源代码数据的自然语言描述。说 明 书1/9页4CN110162297A4[0013]一个或多个实施例提供了一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的源代码段自然语言描述自动生成方法。[0014]一个或多个实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现所述的源代码段自然语言描述自动生成方法。[0015]以上一个或多个技术方案存在以下有益效果:[0016]本发明通过一种基于多重模块的源代码段自然语言描述自动生成方法,针对全段源代码的划分规则,兼顾所有源代码的信息,确保重要信息的保留,构建新的自然语言模板,用于填充代码特性信息,优先生成源代码行的自然语言描述语句,改变了传统意义上的软件维护方式,使得程序人员不再局限于阅读大量的源代码,从而能节省程序人员花费在阅读和理解源代码上的时间,并提高软件的维护效率。附图说明[0017]构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。[0018]图1为本发明一个或多个实施例中源代码段自然语言描述自动生成方法流程图;[0019]图2为本发明一个或多个实施例中源代码段自然语言描述自动生成系统框架图。具体实施方式[0020]应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。[0021]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。[0022]在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。[0023]首先对本发明中所涉及的相关技术术语进行说明:[0024]程序语句:编程语言中的单行程序源码语句。[0025]描述语句:自然语言形式下的针对程序语句进行功能描述的文本语句。[0026]源代码行的自然语言描述:即描述语句,针对单行的源代码利用人类通俗易懂的自然语言描述其真正意义的过程,包括类名、主题词、特殊方法名称的解析等。[0027]源代码段的自然语言描述:针对源代码端所含各程序语句的单行自然语言描述语句集合优化而成的简明文本描述。要求该描述符合人类的阅读习惯。[0028]本发明基于多重模块的层次化处理机制,依次实现:首先针对源代码进行划分处理,将源代码划分成各类程序语句;然后挖掘各类程序语句特性,并结合自然语言模板生成源代码行的自然语言描述语句(以下简称描述语句);最后计算各描述语句的权重值、相似度,并进一步对源代码行的自然语言描述语句进行排序优化,生成描述源代码段功能的自然语言描述段。说 明 书2/9页5CN110162297A5[0029]实施例一[0030]本实施例提供了一种源代码段自然语言描述自动生成方法,如图1所示,包括如下步骤:[0031]步骤(1):输入源代码数据,根据划分规则对源代码数据进行划分处理,输出不同种类的程序语句;[0032]在本实施例中,所述步骤(1)包括如下步骤:[0033]步骤(1-1):构建程序语句划分规则:[0034]以JAVA语言为例,根据其语言的结构特性,围绕一个标准的JAVA程序运行格式展开各类程序语句的讨论。如下:[0035]1Type variable/=X;//对变量的类型声明/赋值;[0036]2variable.method;//对变量的方法调用;[0037]3execution variable(e.g.Operation);//对变量的一系列执行操作;[0038]其中,X的类型为数值或实例化对象操作。[0039]步骤(1-1-1):划分直接程序语句(以下简称直接语句):[0040]定义:在源代码片段中,能够在某种意义上表达出源代码片段操作行为的程序语句称之为该源代码片段的直接语句。直接语句的判定形式包含以下两种情况:[0041]第一种情况:符合标准程序运行格式。对变量执行的操作语句(e.g.输出变量值)包含了该代码片段的直接内容,若一个代码片段中含有此类语句则本文规定该种语句为直接语句。不难理解,通过对变量一系列执行操作程序语句可以直接得出程序的运行结果,而前面的步骤都是为了能够运行程序而作的铺垫。[0042]第二种情况:不符合标准程序运行格式。一般是指源代码段中缺少第一部分或者第三部分或者同时缺少这两部分,此时直接语句分别被判定为对