CN117435230A - 基于神经网络的代码注释处理方法及装置 - Google Patents

基于神经网络的代码注释处理方法及装置 Download PDF

Info

Publication number
CN117435230A
CN117435230A CN202310890691.6A CN202310890691A CN117435230A CN 117435230 A CN117435230 A CN 117435230A CN 202310890691 A CN202310890691 A CN 202310890691A CN 117435230 A CN117435230 A CN 117435230A
Authority
CN
China
Prior art keywords
code
annotation
library
content
annotation information
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
Application number
CN202310890691.6A
Other languages
English (en)
Inventor
张家玮
郑荣廷
王东起
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202310890691.6A priority Critical patent/CN117435230A/zh
Publication of CN117435230A publication Critical patent/CN117435230A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提出了一种基于神经网络的代码注释处理方法及装置,涉及人工智能技术领域,该方法包括:获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;调用代码库及注释信息库,将代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;创建机器学习模型,利用代码注释训练集训练机器学习模型,结合代码内容对应的注释信息,对机器学习模型进行代码内容到注释信息的映射学习,并利用代码注释测试集进行测试,得到代码注释模型;采集未注释代码内容,输入至代码注释模型,经过代码注释模型分析代码内容到注释信息的映射关系,得到未注释代码内容对应的注释信息。

Description

基于神经网络的代码注释处理方法及装置
技术领域
本发明涉及人工智能技术领域,尤指一种基于神经网络的代码注释处理方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
目前在计算机编码实践过程中,每位开发人员的编程经验不同、工作风格不同,在开发时写出的代码注释在表达方式和数量上存在差异。在实际场景中,软件的编码往往需要团队配合和持续维护,在团队配合的过程中,需要不同开发人员之间需要相互了解代码结构与模块功能,在持续维护的过程中,同一系统不同时期的开发人员需要读懂前任程序员写的代码。注释的表达方式和数量方面的不统一会增加程序开发和维护的困难,从而徒增开发成本和引起程序问题,并且各个开发人员很难快速理解其他开发人员的开发代码的过程及含义,导致开发人员反复修改代码,从而降低代码的泛用性,大幅降低程序开发的效率。
综上来看,亟需一种可以克服上述缺陷,能够通过改进代码注释处理方式,提高代码开发效率的技术方案。
发明内容
为解决现有技术存在的问题,本发明提出了一种基于神经网络的代码注释处理方法及装置。
在本发明实施例的第一方面,提出了一种基于神经网络的代码注释处理方法,包括:
获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
在本发明实施例的第二方面,提出了一种基于神经网络的代码注释处理装置,包括:
数据获取模块,用于获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
数据划分模块,用于调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
模型训练模块,用于创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
代码分析模块,用于采集未注释的代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
在本发明实施例的第三方面,提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现基于神经网络的代码注释处理方法。
在本发明实施例的第四方面,提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现基于神经网络的代码注释处理方法。
在本发明实施例的第五方面,提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现基于神经网络的代码注释处理方法。
本发明提出的基于神经网络的代码注释处理方法及装置通过获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息,整体方案可以使代码注释的含义保持统一,开发人员按照代码注释快速了解代码含义,降低代码维护成本及程序问题出现概率,从而有效提升开发人员的编写与维护效率,为程序开发维护提供了有力的技术支持。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明的基于神经网络的代码注释处理方法流程示意图。
图2是本发明第一实施例的基于神经网络的代码注释处理方法详细流程示意图。
图3是本发明第二实施例的基于神经网络的代码注释处理方法流程示意图。
图4是本发明第二实施例的基于神经网络的代码注释处理方法详细流程示意图。
图5是本发明具体实施例的对第一代码进行代码注释及程序问题标注分析的流程示意图。
图6是本发明基于神经网络的代码注释处理装置架构示意图。
图7是本发明基于神经网络的代码注释处理装置架构示意图。
图8是本发明基于神经网络的代码注释处理装置架构示意图。
图9是本发明一实施例的计算机设备结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种基于神经网络的代码注释处理方法及装置,涉及人工智能技术领域。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
图1是本发明一实施例的基于神经网络的代码注释处理方法流程示意图。如图1所示,该方法包括:
S101,获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
S102,调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
S103,创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
S104,采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
在实际应用场景中,本发明的基于神经网络的代码注释处理方法,工作原理为:通过获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息,整体方案可以使代码注释的含义保持统一,开发人员按照代码注释快速了解代码含义,并且还可以分析程序代码出现过的问题,降低代码维护成本及程序问题出现概率,从而有效提升开发人员的编写与维护效率,为程序开发维护提供了有力的技术支持。
为了对上述基于神经网络的代码注释处理方法进行更为清楚的解释,下面结合每一步骤来进行详细说明。
本发明提出的代码注释处理方法主要包含两部分处理过程,一是代码注释补全,二是分析代码是否存在程序问题。
第一实施例,代码注释补全:
在一具体实施例中,代码注释补全的过程主要是通过分析代码内容中的关键字、表名称、函数名等多方面信息与注释信息的映射关系,来确定对应的代码注释模型,进而利用代码注释模型确定(待注释)代码内容对应的注释信息。参考图2,具体的代码注释分析过程为:
S201,在构建代码库后,根据代码内容解析得到关键字、表名称、函数名,并分别构建关键字库、名称库及函数名库;
其中,所述关键字库用于存储关键字,所述名称库用于存储表名称,所述函数名库用于存储函数名;
S202,调用关键字库、名称库、函数名库及注释信息库,将关键字、表名称、函数名及代码内容对应的注释信息划分为关键词、表名称、函数名对应的代码注释训练集与代码注释测试集;
S203,分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的代码注释训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到关键字、表名称、函数名对应的代码注释模型。
S204,将未注释代码内容解析得到的关键字、表名称、函数名分别输入至所述代码注释模型,经过所述代码注释模型分析关键字、表名称、函数名到注释信息的映射关系,得到关键字、表名称、函数名对应的注释信息;进而可以将注释信息的向量求和,得到向量和;基于代码注释模型可以得到多个计算结果(即,多个向量和),将向量和排序后,选取排序前一定数量的注释信息推送给开发人员,由开发人员确认采用哪一种或者修改注释信息。
进一步的,在得到代码注释模型输出的注释信息后,人工确认的过程为:
在得到所述未注释代码内容对应的注释信息后,由开发人员进行人工确认;
其中,如果人工确认采用注释信息,将所述注释信息注释到对应的代码内容;如果人工发起修改注释信息,将修改后的注释信息更新至注释信息库,并作为代码注释模型再次训练时的输入样本。
基于上述过程,可以实现统一的注释信息,帮助开发人员方便快捷的了解代码含义,从而提高程序开发效率。
第二实施例,分析代码是否存在程序问题:
在一具体实施例中,程序问题是通过分析代码内容中的关键字、表名称、函数名等多方面信息与程序问题标注信息的映射关系,来确定对应的程序问题标注模型,进而利用程序问题标注模型确定(待分析)代码内容对应的程序问题标注信息。参考图3,分析程序问题的流程为:
S301,获取代码内容对应的程序问题标注信息;
S302,根据所述代码库中的代码内容及代码内容对应的程序问题标注信息,经过划分得到程序问题标注训练集与程序问题标注测试集;
S303,创建机器学习模型,利用所述程序问题标注训练集训练所述机器学习模型,结合代码内容对应的程序问题标注信息,对所述机器学习模型进行代码内容到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到程序问题标注模型;
S304,采集待分析代码内容,输入至所述程序问题标注模型,经过所述程序问题标注模型分析代码内容到程序问题标注信息的映射关系,得到所述待分析代码内容对应的程序问题标注信息。
在一具体实施例中,参考图4,分析程序问题的详细流程为:
S401(与S201相同),在构建代码库后,根据代码内容解析得到关键字、表名称、函数名,并分别构建关键字库、名称库及函数名库;
其中,所述关键字库用于存储关键字,所述名称库用于存储表名称,所述函数名库用于存储函数名;
S402,调用关键字库、名称库及函数名库,将关键字、表名称、函数名及代码内容对应的程序问题标注信息划分为关键词、表名称、函数名对应的程序问题标注训练集与程序问题标注测试集;
S403,分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的程序问题标注训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到关键字、表名称、函数名对应的程序问题标注模型。
S404,将待分析代码内容解析得到的关键字、表名称、函数名分别输入至关键字、表名称、函数名对应的程序问题标注模型,经过所述程序问题标注模型分析关键字、表名称、函数名到程序问题标注信息的映射关系,得到关键字、表名称、函数名对应的程序问题标注信息;进而可以将程序问题标注信息的向量求和,得到向量和;若向量和大于设定阈值,判定存在程序问题,发送给开发人员确认。
进一步的,在得到程序问题标注模型输出的程序问题标注信息后,人工确认的过程为:
在得到所述待分析代码内容对应的程序问题标注信息后,由开发人员进行人工确认;
其中,如果人工确认程序问题标注信息有效,由人工修改代码内容;如果人工确认程序问题标注信息无效,记录待分析代码内容对应的程序问题标注信息为无效,并作为程序问题标注模型再次训练时的输入样本。
基于上述过程,可以通过分析程序代码可能存在的潜在程序问题,给开发人员提供开发帮助,减少开发过程中的程序问题。
在一具体实施例中,基于上述实施例一及实施例二,以第一代码为例对本发明的方法进行说明。
参考图5,对第一代码进行代码注释及程序问题标注分析的流程为:
S501,对第一代码进行解析,得到第一代码对应的关键字、表名称及函数名;其中,所述第一代码未注释且未进行程序问题标注分析;
S502,将第一代码对应的关键字、表名称及函数名,分别输入至关键字、表名称、函数名对应的代码注释模型,及关键字、表名称、函数名对应的程序问题标注模型,得到关键字、表名称、函数名对应的代码注释向量,及关键字、表名称、函数名对应的程序问题标注向量;
S503,根据关键字、表名称、函数名对应的代码注释向量,确定代码注释向量和;选取代码注释向量和中排名前一定数量的注释信息,推荐给开发人员选择;
例如,输出的关键字、表名称、函数名对应的代码注释向量总共有20组,计算得到的代码注释向量和有20个,将该20个代码注释向量和从大到小排序,将排名前5的代码注释向量和对应的注释信息推荐给开发人员选择。
S504,根据关键字、表名称、函数名对应的程序问题标注向量,确定程序问题标注向量和;若程序问题标注向量和大于设定阈值,判定第一代码存在程序问题,发送给开发人员确认。
例如,输出的关键字、表名称、函数名对应的程序问题标注向量为1,1,0,向量和为2,大于设定阈值(例如,设定阈值为0),则判定第一代码存在程序问题,发送给开发人员确认。
如果输出的关键字、表名称、函数名对应的程序问题标注向量为0,0,0,向量和为0,不大于设定阈值(例如,设定阈值为0),则判定第一代码不存在程序问题,
在实际应用场景中,将关键字、表名称及函数名进行独热编码处理(one-hot编码),对独热编码数据进行word2vec处理,得到关键字变量、表名称变量及函数名变量;其中,在分析代码注释或程序问题时,机器学习模型的输入样本是关键字变量、表名称变量及函数名变量;
对注释信息库存储的代码内容对应的注释信息进行独热编码处理,得到注释信息对应的独热编码数据;其中,在分析代码注释时,机器学习模型的输出样本是注释信息对应的独热编码数据;
设置代码内容对应的程序问题标注信息,存在过程序问题设置为1,未存在过程序问题设置为0;其中,在分析程序问题时,机器学习模型的输出样本是1或0。
在一实施例中,该方法还包括:
对所述代码库中的代码内容、所述关键字库中的关键字、所述名称库的表名称、函数名库中的函数名、注释信息库中的代码内容对应的注释信息进行清洗,清除重复和异常样本。
下面以一个示例性场景为例进行说明。
本发明采用多种数据库作为数据分析基础,数据库以二维表的形式存在。主要包括的数据表有:1、代码库;该数据库存储开发团队已开发完成的代码块。2、关键字库;该数据库存储各类编程语言的关键字。3、名称库;该数据库存储该开发团队开发使用的数据表、数据库名称。4、函数名库;该数据库存储开发人员在开发过程中载入的函数包名称和使用的函数名称。5、注释名库;该开发团队规定统一使用的标准注释名称。
一、整体运行流程为:
S011,由开发人员编写代码;
输入数据:代码内容,包含关键字、表名称、函数名。
操作逻辑:将代码内容解析出关键字、表名称、函数名。
输出数据:关键字、表名称、函数名。
S012,数据输入模型:
输入数据:关键字、表名称、函数名。
操作逻辑:关键字、表名称、函数名分别进入各自的RNN模型(关键字、表名称、函数名分别为3个RNN模型)和判别模型(关键字、表名称、函数名分别为3个判别RNN模型)。
RNN模型(Recurrent Neural Network,循环神经网络)用于处理序列数据,如文字序列或时序数据。本发明的机器学习模型采用RNN模型。
输出数据:注释内容(具体包括是否需要加注释;若需要,具体的提前写好的注释内容)、程序问题判别(该判别结果表示代码块是否出过程序问题)。
S013,展示注释:
输入数据:注释内容、程序问题判别。
操作逻辑:展示程序问题判别信息、展示注释内容。
二、更新数据:
输入数据:运行S012时,开发人员可以对推荐的代码注释进行选择(选择分类如下:接收该处推荐的注释、修改该处推荐的注释)。
操作逻辑:若对该处的推荐注释进行修改,则将新数据更新至数据库。
输出数据:数据库更新。
三、对模型训练流程(以代码关键字为例)为:
S021,特征工程:
输入数据:开发团队存量代码。
处理逻辑:
(1)将开发团队存量代码解析出代码关键字。
(2)将关键字进行one-hot编码。
(3)将one-hot编码之后的数据进行word2vec进行降维处理,处理之后的数据记为X。这里使用one-hot编码是将代码这种自然语言转化为模型能够识别的数值型数据,使用word2vec是为了将高维稀疏的one-hot编码数据转化为低维稠密的数值型数据,以降低计算量,提升模型效能。
(4)开发团队对存量代码块标注标准注释。
(5)对标准注释进行one-hot编码,记为Y。
(6)对存量代码块该处是否存在过程序问题做标注,若存在过,记为1,否则记为0;该变量记为Z。
输出数据:经过one-hot和word2vec处理之后的存量代码关键字变量(X),标准注释变量Y,程序问题变量Z。
S022,模型训练:
输入数据:经过one-hot和word2vec处理之后的存量代码关键字变量(X),标准注释变量Y,程序问题变量Z。
处理逻辑:
(1)对于由X到Y的关系,使用循环神经网络(RNN)进行训练。使用RNN的好处在于RNN能够提取X(即代码关键字)的先后顺序关系信息。对于代码关键字,例如“if…else,while…end,for…break”等,先后顺序对实际功能起着决定性的影响,且不会随中间文字间隔的距离而发生变化,因此这里不需要使用LSTM(长短时记忆神经网络);这里使用RNN模型更合适。
(2)对于由X到Z的关系,同样使用RNN进行训练。
输出变量:由X到Y的神经网络模型(RNNXY),由X到Z的神经网络模型(RNNXZ)。
S023,结果输出:
输入数据:开发人员新编写的代码块(X_new),由X到Y的神经网络模型(RNNXY),由X到Z的神经网络模型(RNNXZ)
操作逻辑:将X_new经过one-hot和word2vec处理之后,输入RNNXY和RNNXZ,得到预测结果Y_new和Z_new。
输出数据:Y_new和Z_new。
四、展示流程:
输入数据:根据关键字建立的代码注释模型,注释信息Y_new_key;根据表名称建立的代码注释模型,注释信息Y_new_table;根据函数名建立的代码注释模型,注释信息Y_new_fun;
根据关键字建立的程序问题标注模型,程序问题标注信息Z_new_key;根据表名称建立的程序问题标注模型,程序问题标注信息Z_new_table;根据函数名建立的程序问题标注模型,程序问题标注信息Z_new_fun。
操作逻辑:
(1)将Y_new_key、Y_new_table、Y_new_fun三个向量相加,得到Y_new_add,并按照大小排序,以Y_new_add向量数值排名,选择前6作为最大可能性的注释并显示。
(2)将Z_new_key、Z_new_table、Z_new_fun三个向量相加,得到Z_new_add,并设定阈值L,若Z_new_add大于阈值L,则显示此处代码可能产生程序问题。
输出数据:多个注释信息、此处代码是否可能产生程序问题。
在实际应用场景中,代码注释通常因为不同领域、不同开发团队之间风格和需求差异较大,影响开发人员的开发效率;对此,本发明从注释及程序分析等两方面出发,通过人工智能技术自动补全代码注释并且可以分析程序问题,提高程序代码的泛用性,使开发人员通过代码注释快速了解代码含义并协助分析程序问题,有效提高了程序开发效率。
需要说明的是,尽管在上述实施例及附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
在介绍了本发明示例性实施方式的方法之后,接下来,参考图6对本发明示例性实施方式的基于神经网络的代码注释处理装置进行介绍。
基于神经网络的代码注释处理装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“模块”或者“单元”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
基于同一发明构思,本发明还提出了一种基于神经网络的代码注释处理装置,如图6所示,该装置包括:
数据获取模块610,用于获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
数据划分模块620,用于调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
模型训练模块630,用于创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
代码分析模块640,用于采集未注释的代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
在一实施例中,数据获取模块610具体用于:
在构建代码库后,根据代码内容解析得到关键字、表名称、函数名,并分别构建关键字库、名称库及函数名库;
其中,所述关键字库用于存储关键字,所述名称库用于存储表名称,所述函数名库用于存储函数名;
数据划分模块620具体用于:
调用关键字库、名称库、函数名库及注释信息库,将关键字、表名称、函数名及代码内容对应的注释信息划分为关键词、表名称、函数名对应的代码注释训练集与代码注释测试集;
模型训练模块630具体用于:
分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的代码注释训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到关键字、表名称、函数名对应的代码注释模型。
在一实施例中,参考图7,该装置还包括:信息确认模块650;
其中,信息确认模块650具体用于:
在得到所述未注释代码内容对应的注释信息后,由开发人员进行人工确认;
其中,如果人工确认采用注释信息,将所述注释信息注释到对应的代码内容;如果人工发起修改注释信息,将修改后的注释信息更新至注释信息库,并作为代码注释模型再次训练时的输入样本。
在一实施例中,数据获取模块610还用于:
获取代码内容对应的程序问题标注信息;
数据划分模块620还用于:
根据所述代码库中的代码内容及代码内容对应的程序问题标注信息,经过划分得到程序问题标注训练集与程序问题标注测试集;
模型训练模块630还用于:
创建机器学习模型,利用所述程序问题标注训练集训练所述机器学习模型,结合代码内容对应的程序问题标注信息,对所述机器学习模型进行代码内容到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到程序问题标注模型;
代码分析模块640还用于:
采集待分析代码内容,输入至所述程序问题标注模型,经过所述程序问题标注模型分析代码内容到程序问题标注信息的映射关系,得到所述待分析代码内容对应的程序问题标注信息。
在一实施例中,数据划分模块620具体用于:
调用关键字库、名称库及函数名库,将关键字、表名称、函数名及代码内容对应的程序问题标注信息划分为关键词、表名称、函数名对应的程序问题标注训练集与程序问题标注测试集;
模型训练模块630具体用于:
分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的程序问题标注训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到关键字、表名称、函数名对应的程序问题标注模型。
在一实施例中,信息确认模块650具体用于:
在得到所述待分析代码内容对应的程序问题标注信息后,由开发人员进行人工确认;
其中,如果人工确认程序问题标注信息有效,由人工修改代码内容;如果人工确认程序问题标注信息无效,记录待分析代码内容对应的程序问题标注信息为无效,并作为程序问题标注模型再次训练时的输入样本。
在一实施例中,代码分析模块640具体用于:
对第一代码进行解析,得到第一代码对应的关键字、表名称及函数名;其中,所述第一代码未注释且未进行程序问题标注分析;
将第一代码对应的关键字、表名称及函数名,分别输入至关键字、表名称、函数名对应的代码注释模型,及关键字、表名称、函数名对应的程序问题标注模型,得到关键字、表名称、函数名对应的代码注释向量,及关键字、表名称、函数名对应的程序问题标注向量;
根据关键字、表名称、函数名对应的代码注释向量,确定代码注释向量和;选取代码注释向量和中排名前一定数量的注释信息,推荐给开发人员选择;
根据关键字、表名称、函数名对应的程序问题标注向量,确定程序问题标注向量和;若程序问题标注向量和大于设定阈值,判定第一代码存在程序问题,发送给开发人员确认。
在一实施例中,该装置进行代码注释或者程序问题标注时,还用于:
将关键字、表名称及函数名进行独热编码处理,对独热编码数据进行word2vec处理,得到关键字变量、表名称变量及函数名变量;其中,在分析代码注释或程序问题时,机器学习模型的输入样本是关键字变量、表名称变量及函数名变量;
对注释信息库存储的代码内容对应的注释信息进行独热编码处理,得到注释信息对应的独热编码数据;其中,在分析代码注释时,机器学习模型的输出样本是注释信息对应的独热编码数据;
设置代码内容对应的程序问题标注信息,存在过程序问题设置为1,未存在过程序问题设置为0;其中,在分析程序问题时,机器学习模型的输出样本是1或0。
在一实施例中,参考图8,该装置还包括:数据清洗模块660;
其中,数据清洗模块660具体用于:
对所述代码库中的代码内容、所述关键字库中的关键字、所述名称库的表名称、函数名库中的函数名、注释信息库中的代码内容对应的注释信息进行清洗,清除重复和异常样本。
在一实施例中,所述机器学习模型采用RNN模型。
应当注意,尽管在上文详细描述中提及了基于神经网络的代码注释处理装置的若干模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
基于前述发明构思,如图9所示,本发明还提出了一种计算机设备900,包括存储器910、处理器920及存储在存储器910上并可在处理器920上运行的计算机程序930,所述处理器920执行所述计算机程序930时实现前述基于神经网络的代码注释处理方法。
基于前述发明构思,本发明提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现前述基于神经网络的代码注释处理方法。
基于前述发明构思,本发明提出了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现基于神经网络的代码注释处理方法。
本发明提出的基于神经网络的代码注释处理方法及装置通过获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息,整体方案可以使代码注释的含义保持统一,开发人员按照代码注释快速了解代码含义,降低代码维护成本及程序问题出现概率,从而有效提升开发人员的编写与维护效率,为程序开发维护提供了有力的技术支持。
本申请技术方案中对数据的获取、存储、使用、处理等均符合法律法规的相关规定。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (14)

1.一种基于神经网络的代码注释处理方法,其特征在于,包括:
获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
采集未注释代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:
在构建代码库后,根据代码内容解析得到关键字、表名称、函数名,并分别构建关键字库、名称库及函数名库;其中,所述关键字库用于存储关键字,所述名称库用于存储表名称,所述函数名库用于存储函数名;
调用关键字库、名称库、函数名库及注释信息库,将关键字、表名称、函数名及代码内容对应的注释信息划分为关键词、表名称、函数名对应的代码注释训练集与代码注释测试集;
分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的代码注释训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到关键字、表名称、函数名对应的代码注释模型。
3.根据权利要求2所述的方法,其特征在于,该方法还包括:
在得到所述未注释代码内容对应的注释信息后,由开发人员进行人工确认;
其中,如果人工确认采用注释信息,将所述注释信息注释到对应的代码内容;如果人工发起修改注释信息,将修改后的注释信息更新至注释信息库,并作为代码注释模型再次训练时的输入样本。
4.根据权利要求3所述的方法,其特征在于,该方法还包括:
获取代码内容对应的程序问题标注信息;
根据所述代码库中的代码内容及代码内容对应的程序问题标注信息,经过划分得到程序问题标注训练集与程序问题标注测试集;
创建机器学习模型,利用所述程序问题标注训练集训练所述机器学习模型,结合代码内容对应的程序问题标注信息,对所述机器学习模型进行代码内容到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到程序问题标注模型;
采集待分析代码内容,输入至所述程序问题标注模型,经过所述程序问题标注模型分析代码内容到程序问题标注信息的映射关系,得到所述待分析代码内容对应的程序问题标注信息。
5.根据权利要求4所述的方法,其特征在于,该方法还包括:
调用关键字库、名称库及函数名库,将关键字、表名称、函数名及代码内容对应的程序问题标注信息划分为关键词、表名称、函数名对应的程序问题标注训练集与程序问题标注测试集;
分别创建关键字、表名称、函数名对应的机器学习模型,利用关键词、表名称、函数名对应的程序问题标注训练集分别训练对应的机器学习模型,进行关键字、表名称、函数名到程序问题标注信息的映射学习,并利用所述程序问题标注测试集进行测试,得到关键字、表名称、函数名对应的程序问题标注模型。
6.根据权利要求5所述的方法,其特征在于,该方法还包括:
在得到所述待分析代码内容对应的程序问题标注信息后,由开发人员进行人工确认;
其中,如果人工确认程序问题标注信息有效,由人工修改代码内容;如果人工确认程序问题标注信息无效,记录待分析代码内容对应的程序问题标注信息为无效,并作为程序问题标注模型再次训练时的输入样本。
7.根据权利要求6所述的方法,其特征在于,该方法还包括:
对第一代码进行解析,得到第一代码对应的关键字、表名称及函数名;其中,所述第一代码未注释且未进行程序问题标注分析;
将第一代码对应的关键字、表名称及函数名,分别输入至关键字、表名称、函数名对应的代码注释模型,及关键字、表名称、函数名对应的程序问题标注模型,得到关键字、表名称、函数名对应的代码注释向量,及关键字、表名称、函数名对应的程序问题标注向量;
根据关键字、表名称、函数名对应的代码注释向量,确定代码注释向量和;选取代码注释向量和中排名前一定数量的注释信息,推荐给开发人员选择;
根据关键字、表名称、函数名对应的程序问题标注向量,确定程序问题标注向量和;若程序问题标注向量和大于设定阈值,判定第一代码存在程序问题,发送给开发人员确认。
8.根据权利要求7所述的方法,其特征在于,该方法还包括:
将关键字、表名称及函数名进行独热编码处理,对独热编码数据进行word2vec处理,得到关键字变量、表名称变量及函数名变量;其中,在分析代码注释或程序问题时,机器学习模型的输入样本是关键字变量、表名称变量及函数名变量;
对注释信息库存储的代码内容对应的注释信息进行独热编码处理,得到注释信息对应的独热编码数据;其中,在分析代码注释时,机器学习模型的输出样本是注释信息对应的独热编码数据;
设置代码内容对应的程序问题标注信息,存在过程序问题设置为1,未存在过程序问题设置为0;其中,在分析程序问题时,机器学习模型的输出样本是1或0。
9.根据权利要求2所述的方法,其特征在于,该方法还包括:
对所述代码库中的代码内容、所述关键字库中的关键字、所述名称库的表名称、函数名库中的函数名、注释信息库中的代码内容对应的注释信息进行清洗,清除重复和异常样本。
10.根据权利要求1至9中任一项所述的方法,其特征在于,所述机器学习模型采用RNN模型。
11.一种基于神经网络的代码注释处理装置,其特征在于,包括:
数据获取模块,用于获取代码内容及代码内容对应的注释信息,分别构建代码库及注释信息库;其中,所述代码库用于存储代码内容,所述注释信息库用于存储代码内容对应的注释信息;
数据划分模块,用于调用所述代码库及注释信息库,将所述代码库中的代码内容及注释信息库中的代码内容对应的注释信息划分为代码注释训练集与代码注释测试集;
模型训练模块,用于创建机器学习模型,利用所述代码注释训练集训练所述机器学习模型,结合代码内容对应的注释信息,对所述机器学习模型进行代码内容到注释信息的映射学习,并利用所述代码注释测试集进行测试,得到代码注释模型;
代码分析模块,用于采集未注释的代码内容,输入至所述代码注释模型,经过所述代码注释模型分析代码内容到注释信息的映射关系,得到所述未注释代码内容对应的注释信息。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10任一所述方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任一所述方法。
14.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现权利要求1至10任一所述方法。
CN202310890691.6A 2023-07-19 2023-07-19 基于神经网络的代码注释处理方法及装置 Pending CN117435230A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310890691.6A CN117435230A (zh) 2023-07-19 2023-07-19 基于神经网络的代码注释处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310890691.6A CN117435230A (zh) 2023-07-19 2023-07-19 基于神经网络的代码注释处理方法及装置

Publications (1)

Publication Number Publication Date
CN117435230A true CN117435230A (zh) 2024-01-23

Family

ID=89552291

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310890691.6A Pending CN117435230A (zh) 2023-07-19 2023-07-19 基于神经网络的代码注释处理方法及装置

Country Status (1)

Country Link
CN (1) CN117435230A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117648079A (zh) * 2024-01-29 2024-03-05 浙江阿里巴巴机器人有限公司 任务处理、代码补全、代码问答及任务处理模型训练方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117648079A (zh) * 2024-01-29 2024-03-05 浙江阿里巴巴机器人有限公司 任务处理、代码补全、代码问答及任务处理模型训练方法
CN117648079B (zh) * 2024-01-29 2024-05-14 浙江阿里巴巴机器人有限公司 任务处理、代码补全、代码问答及任务处理模型训练方法

Similar Documents

Publication Publication Date Title
CN112528034B (zh) 一种基于知识蒸馏的实体关系抽取方法
CN111090461A (zh) 一种基于机器翻译模型的代码注释生成方法
CN113076133B (zh) 基于深度学习的Java程序内部注释的生成方法及系统
CN107608951B (zh) 报表生成方法和系统
CN102193993B (zh) 用于确定字符串信息间相似度信息的方法、装置和设备
CN117435230A (zh) 基于神经网络的代码注释处理方法及装置
CN114675816A (zh) 一种基于用户行为的代码补全排序方法及系统
CN111813923A (zh) 文本摘要方法、电子设备及存储介质
CN116719520A (zh) 代码生成方法及装置
CN113505583A (zh) 基于语义决策图神经网络的情感原因子句对提取方法
Alexandru et al. Replicating parser behavior using neural machine translation
CN114647408A (zh) 一种代码的补全方法、装置、电子设备及存储介质
CN111178701A (zh) 一种基于特征衍生技术的风险控制方法方法、装置和电子设备
CN114239536A (zh) 一种事件抽取方法、系统及计算机可读存储介质
CN116166789A (zh) 一种方法命名精准推荐和审查方法
Siyam et al. Arabic arithmetic word problems solver
Shen et al. Git Merge Conflict Resolution Leveraging Strategy Classification and LLM
CN114116779A (zh) 基于深度学习的电网调控领域信息检索方法、系统和介质
CN112989795A (zh) 一种文本信息提取方法、装置、计算机设备及存储介质
CN112347793B (zh) 一种基于规则与学习的语义解析方法、装置和电子设备
CN114090721B (zh) 基于自然语言数据进行查询、数据更新的方法及装置
Varner et al. Neural Model for Generating Method Names from Combined Contexts
JPH09330212A (ja) プログラミング言語処理システム
Ramírez-Rueda et al. Program Synthesis and Natural Language Processing: A Systematic Literature Review
CN114925179A (zh) 信息查询方法、装置、存储介质以及终端

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