CN115562679B - 一种基于Java语言的自动生成代码的方法及服务器 - Google Patents
一种基于Java语言的自动生成代码的方法及服务器 Download PDFInfo
- Publication number
- CN115562679B CN115562679B CN202211545362.XA CN202211545362A CN115562679B CN 115562679 B CN115562679 B CN 115562679B CN 202211545362 A CN202211545362 A CN 202211545362A CN 115562679 B CN115562679 B CN 115562679B
- Authority
- CN
- China
- Prior art keywords
- codes
- code
- keywords
- words
- similarity
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/35—Clustering; Classification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/166—Editing, e.g. inserting or deleting
- G06F40/169—Annotation, e.g. comment data or footnotes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/194—Calculation of difference between files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/30—Semantic analysis
-
- 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
- G06F8/315—Object-oriented languages
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于Java语言的自动生成代码的方法及服务器,方法包括:S1:从网络资源库中获取代码,提取存在相似度的代码,并从高至低进行排序,标记排序中的前N段的代码的使用频率;S2:提取前N段的代码的注释中的关键词,合成代码文件;S3:获取用户输入的字段,进行自动联想查询,获取代码文件中的关键词字段,并将对应的N段的代码提供至用户选择,根据用户的选择,生成代码。在本发明中,通过获取开源项目中相同频率最高的注释作为关键词,再利用关键词进行自动联想查询,实现自动生成代码,能够对比相似注释下的代码,筛选出最优的代码供用户的选择。
Description
技术领域
本发明涉及软件技术领域,尤其涉及一种基于Java语言的自动生成代码的方法及服务器。
背景技术
现有的代码生成器都是在编写功能代码之前根据数据库表生成mvc三层架构,并没有在编写功能代码的过程中进行代码生成的功能,而且执行循环、crud等操作对应的代码简单并且重复率极大,无需进行多次研发,同时该类型的代码重复工作量大,对于繁重的研发工作无疑是累赘。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供一种基于Java语言的自动生成代码的方法,其能解决现有的代码生成器无法在编写功能代码的过程中进行代码生成的问题。
本发明的目的之二在于提供一种基于Java语言的自动生成代码的服务器,其能解决现有的代码生成器无法在编写功能代码的过程中进行代码生成的问题。
为了达到上述目的之一,本发明所采用的技术方案如下:
一种基于Java语言的自动生成代码的方法,包括以下步骤:
S1:从网络资源库中获取代码,提取存在相似度的代码,并按使用频率从高至低进行排序,标记排序中的前N段的代码的使用频率;
S2:提取排序中的前N段的代码的注释中的关键词,将关键词字段和代码集合成代码文件;
S3:获取用户输入的字段,对代码文件进行自动联想查询,获取代码文件中的关键词字段,并将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码。
优选的,所述S1具体由以下步骤实现:
S11:从网络资源库中获取代码,储存至数据库;
S12:获取预先输入的代码,从数据库中提取与预先输入的代码的相似度达到阈值的代码;
S13:将代码按使用频率从高至低进行排序,并标记排序中的前N段的代码的使用频率。
优选的,所述S2具体由以下步骤实现:
S21:对注释进行分词,并去掉停用词,选取剩下的字词作为候选词;
S22:度量候选词之间的语义相似度,并根据语义相似度对候选词进行聚类;
S23:选取每个聚类中心词,并基于文档词汇聚类构建文档主题抽取关键词,将关键词字段和代码集合成代码文件。
优选的,所述S3具体由以下步骤实现:
S31:获取用户输入的注释字段,筛选关键词;
S32:通过关键词对代码文件进行自动联想查询,获取代码文件中的关键词字段;
S33:将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码。
为了达到上述目的之二,本发明所采用的技术方案如下:
一种基于Java语言的自动生成代码的服务器,包括储存器和处理器;
储存器,用于储存程序指令;
处理器,用于运行所述程序指令,以执行如上述的基于Java语言的自动生成代码的方法。
相比现有技术,本发明的有益效果在于:通过获取开源项目中相同频率最高的注释作为关键词,再利用关键词进行自动联想查询,实现自动生成代码,并且能够对比相似注释下的代码,筛选出使用频率最高的几种代码供用户的选择,从而帮助程序员快速生成简单方法的框架。
附图说明
图1为本发明中所述的基于Java语言的自动生成代码的方法的流程图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
下面,结合附图以及具体实施方式,对本发明做进一步描述:
在本发明中,自动联想的本质就是使用大数据训练模型把代码补全,大数据训练模型的训练数据为代码段,考虑到每种语言风格和语法都不一致,所以单个模型只针对一种代码语言。使用的训练数据主要来源于 GitHub,只需通过爬虫代码,指定语言后根据stars 的排序下载工程,训练数据只需要工程中的代码文件,以 java 工程为例,我们只保留.java 结尾的文件,其他文件可剔除,得到了训练数据后还需要把代码文本进行编码。可以使用的是 bpe(byte pair encoder)字节对编码,主要为了数据压缩。bpe 简单理解为将一个单词再拆分为多个字母组合,比如 alibaba 拆分为 ali-baba,这些组合方式则是根据大量数据,统计频率得到。假设 bubblesort 这个 token 被编码对应到一个 id,那么输入 bub 就输出 bubblesort 是无法实现的。所以在训练过程中,随机把 token 打断,比如将 bubblesort 打断为 b-ubb-le-sort 进行编码,打断原则是被切分的部分一定要在词汇表中。数据编码后,代码的每个 token 被编码为 1~N 个 id。模型预测到的 id 反编码为 token 即可。回车符认为是预测的终止符。其中算法使用GPT2 框架,OPenAI 官方提供了多套 GPT2 预训练模型。
实施例一:
如图1所示,一种基于Java语言的自动生成代码的方法,包括以下步骤:
S1:从网络资源库中获取代码,提取存在相似度的代码,并按使用频率从高至低进行排序,标记排序中的前N段的代码的使用频率;
具体的,在网络资源库中获取大量开源项目的代码,再利用克隆检测功能或者使用爬虫和搜索技术去搜索存在高相似度代码,在本实施例中,所述S1具体由以下步骤实现:
S11:从网络资源库中获取代码,储存至数据库;
具体的,所述网络资源库可以是github、gitee、腾讯云以及百度云等能够获取资源的资源库均可,通过复制网络资源库中大量开源的项目的代码,并储存起来。
S12:获取预先输入的代码,从数据库中提取与预先输入的代码的相似度达到阈值的代码;
具体的,将预先输入的代码作为依据,从储存代码的数据库中搜索相似度高的代码,其中相似度阈值可以根据实际进行设置。
S13:将代码按使用频率从高至低进行排序,并标记排序中的前N段的代码的使用频率。
具体的,将搜索到的代码按使用频率进行排序,筛选出使用频率最高的前N段代码,其中N可取值为5,优选的,将每段代码的使用频率标注在后面,可通过将代码与出现频率设计为数据库表的两个字段,利用雪花算法生成一个id作为主键,根据id取出代码及其频率。
S2:提取排序中的前N段的代码的注释中的关键词,将关键词字段和代码集合成代码文件;
具体的,将大量开源项目里相同且频率最高的注释作为关键词,在本实施例中,所述S2具体由以下步骤实现:
S21:对注释进行分词,并去掉停用词,选取剩下的字词作为候选词;
具体的,若注释为英语,则对单词进行断词,比如将 bubblesort 打断为 b-ubb-le-sort,如果是汉语等没有单词分隔标志的语言,则首先对文本进行分词,然后去掉停用词,选取剩下的字词作为候选词。
S22:度量候选词之间的语义相似度,并根据语义相似度对候选词进行聚类;
具体的,度量候选词之间的语义相似度可通过基于文档内的词同现关系进行判断或者利用外部知识库进行判断。
优选的,两个候选词如果在短距离内同时出现过多次,说明他们具有较强的语义关系。因此可以利用文档内的同现情况来度量两个候选词之间的相似度。优选的,两个候选词的同现关系可简单地表示为两个词在一个最多为n个词的滑动窗口内同现的次数。窗口大小n一般设为2到10之间的数值。在计算同现相似度时,每个文档首先被转换为词的序列。这里有两种可能的转换词序列的方法。一种是利用文档中的每个词,没有做任何的过滤。另外一种则是过滤了其中停用词等没有实际意义的词。这里选择第一种,原因是:虽然停用词本身不具备成为关键词的可能、也无需计算相似度,但是他们的存在能够帮助提供距离信息来判断两个词是否具有较高的相关度。例如,两个词如果中间没有任何其他词,他们的相关度要高于中间有若干词间隔的两个词。
优选的,还可以利用维基百科来度量词与两个词的相似度。维基百科是目前最大的在线百科全书,目前已收录1,800万篇百科词条,其中英文词条超过350万条。利用维基百科计算词汇相似度的基本思想是:将每个维基百科词条看作是一个独立的概念。这样,一个词的语义信息就可以用维基百科概念上的分布来表示,其中在某个概念上的权重可以用这个词在该概念词条中的TFIDF值来表示。这样就可以通过比较两个词的概念向量来度量他们的相似度。
再选择使用层级聚类和信任传播聚类的方法,根据语义相似度对候选词进行聚类,使用层级聚类的流程具体如下:1.计算数据集合中每对数据点之间的相似度(或者距离);2.不断将集合中距离最近的两个点组合成一个新的点,这样就形成一个多层的二叉树;3.决定在哪一层划分,得到相应的聚类结果;而使用信任传播聚类则主要使用AP算法。
S23:选取每个聚类中心词,并基于文档词汇聚类构建文档主题抽取关键词,将关键词字段和代码集合成代码文件。
具体的,词聚类完成后,选取每个聚类的中心词作为种子词。在信任传播聚类中,算法本身会提供聚类中心;在层次聚类中,聚类中心词可以通过Matlab计算获得,再用基于文档词汇聚类构建文档主题进行关键词抽取,提高抽取关键词对文档主题的覆盖度,抽取关键词,然后将这些代码和注释集合起来形成一个代码文件。上述代码文件里包括:关键词字段,以及代码模板,为一对多对应关系
S3:获取用户输入的字段,对代码文件进行自动联想查询,获取代码文件中的关键词字段,并将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码。
用户需要自动生成代码时,可通过输入注解来进行自动联想查询,生成目标代码,在本实施例中,所述S3具体由以下步骤实现:
S31:获取用户输入的注释字段,筛选关键词;
具体的,获取用户输入的注释字段,从输入的注释字段中筛选关键词。
S32:通过关键词对代码文件进行自动联想查询,获取代码文件中的关键词字段;
具体的,通过全文检索,搜索与用户输入的注释字段的关键词相匹配的关键,并进行自动联想查询,获取代码文件中的关键词字段。
S33:将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码。
具体的,将关键词对应的N段的代码(即使用频率最高的前N段代码)至用户选择,根据用户的选择,生成代码;从最优代码的标准分场景来看,有的编码场景需要的是运行速度最快,有的编码场景需要的是占运行内存最小,这里会对比相似注释下的代码,筛选出使用频率最高的几种作为用户的选择,从而帮助程序员快速生成简单方法的框架。
实施例二
一种基于Java语言的自动生成代码的服务器,包括储存器和处理器;
储存器,用于储存程序指令;
处理器,用于运行所述程序指令,以执行如实施例一所述的基于Java语言的自动生成代码的方法。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (2)
1.一种基于Java语言的自动生成代码的方法,其特征在于,包括以下步骤:
S1:从网络资源库中获取代码,提取存在相似度的代码,并按使用频率从高至低进行排序,标记排序中的前N段的代码的使用频率,
其中,所述S1具体由以下步骤实现:
S11:从网络资源库中获取代码是指根据工程文件中的stars的排序下载工程中的代码文件,并仅保留.java结尾文件,将保留的.java结尾文件作为所述代码并储存至数据库;
S12:获取预先输入的代码,从数据库中提取与预先输入的代码的相似度达到阈值的代码;
S13:将代码按使用频率从高至低进行排序,并标记排序中的前N段的代码的使用频率;
S2:提取排序中的前N段的代码的注释中的关键词,将关键词字段和代码集合成代码文件,
其中,所述S2具体由以下步骤实现:
S21:对注释进行分词,并去掉停用词,选取剩下的字词作为候选词;
S22:度量候选词之间的语义相似度,并根据语义相似度对候选词进行聚类,
其中,度量候选词之间的语义相似度通过统计候选词所在文档内的同现情况以及两个候选词之间是否有其他词来度量,同现情况简单地表示为两个候选词在一个最多为n个词的滑动窗口内同现的次数,同现的次数越多,则相似度越强,两个候选词之间没有其他词的相似度高于两个候选词之间有若干词间隔的相似度;
S23:选取每个聚类中心词,并基于文档词汇聚类构建文档主题抽取关键词,将关键词字段和代码集合成代码文件,
具体的,词聚类完成后,选取每个聚类的中心词作为种子词进行聚类,再用基于文档词汇聚类构建文档主题进行关键词抽取,提高抽取关键词对文档主题的覆盖度,抽取关键词,然后将这些代码和注释集合起来形成一个代码文件,上述代码文件里包括:关键词字段,以及代码模板,为一对多对应关系;
S3:获取用户输入的字段,对代码文件进行自动联想查询,获取代码文件中的关键词字段,并将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码,
其中,所述S3具体由以下步骤实现:
S31:获取用户输入的注释字段,筛选关键词;
S32:通过关键词对代码文件进行自动联想查询,获取代码文件中的关键词字段;
S33:将关键词对应的N段的代码提供至用户选择,根据用户的选择,生成代码。
2.一种基于Java语言的自动生成代码的服务器,其特征在于:包括储存器和处理器;
储存器,用于储存程序指令;
处理器,用于运行所述程序指令,以执行如权利要求1所述的基于Java语言的自动生成代码的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211545362.XA CN115562679B (zh) | 2022-12-05 | 2022-12-05 | 一种基于Java语言的自动生成代码的方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211545362.XA CN115562679B (zh) | 2022-12-05 | 2022-12-05 | 一种基于Java语言的自动生成代码的方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115562679A CN115562679A (zh) | 2023-01-03 |
CN115562679B true CN115562679B (zh) | 2023-06-30 |
Family
ID=84770801
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211545362.XA Active CN115562679B (zh) | 2022-12-05 | 2022-12-05 | 一种基于Java语言的自动生成代码的方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115562679B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115774548B (zh) * | 2023-02-10 | 2023-04-11 | 北京一平方科技有限公司 | 基于人工智能的代码自动生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442329A (zh) * | 2019-06-26 | 2019-11-12 | 平安科技(深圳)有限公司 | 代码段的生成方法、装置、存储介质及计算机设备 |
CN114675816A (zh) * | 2022-03-14 | 2022-06-28 | 麒麟软件有限公司 | 一种基于用户行为的代码补全排序方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107066246B (zh) * | 2016-12-27 | 2021-03-05 | 深圳虚觅者科技有限公司 | 一种软件开发方法及装置 |
CN108446115A (zh) * | 2018-03-12 | 2018-08-24 | 中国银行股份有限公司 | 一种代码复用的方法及装置 |
CN113296755A (zh) * | 2020-06-08 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 代码结构树库构建方法和信息推送方法 |
CN112507065B (zh) * | 2020-11-18 | 2022-07-12 | 电子科技大学 | 一种基于注释语义信息的代码搜索方法 |
CN113065322B (zh) * | 2021-04-06 | 2022-02-08 | 中山大学 | 一种代码段注释生成方法、系统及可读存储介质 |
-
2022
- 2022-12-05 CN CN202211545362.XA patent/CN115562679B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110442329A (zh) * | 2019-06-26 | 2019-11-12 | 平安科技(深圳)有限公司 | 代码段的生成方法、装置、存储介质及计算机设备 |
CN114675816A (zh) * | 2022-03-14 | 2022-06-28 | 麒麟软件有限公司 | 一种基于用户行为的代码补全排序方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN115562679A (zh) | 2023-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109189942B (zh) | 一种专利数据知识图谱的构建方法及装置 | |
Hu et al. | Deep code comment generation | |
JP7169389B2 (ja) | 文書タイトルツリーの構築方法、装置、電子設備、記憶媒体、及びプログラム | |
CN106570180B (zh) | 基于人工智能的语音搜索方法及装置 | |
CN106570171A (zh) | 一种基于语义的科技情报处理方法及系统 | |
CN101799802B (zh) | 利用结构信息进行实体关系提取的方法和系统 | |
CN110008474B (zh) | 一种关键短语确定方法、装置、设备及存储介质 | |
EP3483747A1 (en) | Preserving and processing ambiguity in natural language | |
CN103324700A (zh) | 一种基于Web信息的本体概念属性学习方法 | |
CN110633365A (zh) | 一种基于词向量的层次多标签文本分类方法及系统 | |
CN115562679B (zh) | 一种基于Java语言的自动生成代码的方法及服务器 | |
CN111651198A (zh) | 代码摘要自动化生成方法及装置 | |
CN107526721A (zh) | 一种对电商产品评论词汇的歧义消除方法及装置 | |
CN107871002A (zh) | 一种基于指纹融合的跨语言剽窃检测方法 | |
CN114997288A (zh) | 一种设计资源关联方法 | |
CN111190873B (zh) | 一种用于云原生系统日志训练的日志模式提取方法及系统 | |
Freitag | Morphology induction from term clusters | |
Zhang et al. | Question answering in knowledge bases: A verification assisted model with iterative training | |
JP2006065387A (ja) | テキスト文検索装置、テキスト文検索方法、及びテキスト文検索プログラム | |
CN113111645B (zh) | 一种媒体文本相似性检测方法 | |
CN111950261B (zh) | 提取文本关键词的方法、设备和计算机可读存储介质 | |
JP7197542B2 (ja) | テキストワードセグメンテーションの方法、装置、デバイスおよび媒体 | |
Qian et al. | Fine-grained entity typing without knowledge base | |
Babur et al. | Towards statistical comparison and analysis of models | |
CN103927176A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: No. 56 Nanli East Road, Shiqi Town, Panyu District, Guangzhou City, Guangdong Province, 510000 Applicant after: Guangdong Baolun Electronics Co.,Ltd. Address before: No.19 Chuangyuan Road, Zhongcun street, Panyu District, Guangzhou, Guangdong 510000 Applicant before: GUANGZHOU ITC ELECTRONIC TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |