CN113344023A - 一种代码推荐方法、装置及系统 - Google Patents
一种代码推荐方法、装置及系统 Download PDFInfo
- Publication number
- CN113344023A CN113344023A CN202110319416.XA CN202110319416A CN113344023A CN 113344023 A CN113344023 A CN 113344023A CN 202110319416 A CN202110319416 A CN 202110319416A CN 113344023 A CN113344023 A CN 113344023A
- Authority
- CN
- China
- Prior art keywords
- code
- codes
- recommended
- search
- dot product
- 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 51
- 239000013598 vector Substances 0.000 claims abstract description 92
- 238000012216 screening Methods 0.000 claims description 36
- 238000012163 sequencing technique Methods 0.000 claims description 20
- 238000004364 calculation method Methods 0.000 claims description 19
- 239000011159 matrix material Substances 0.000 claims description 18
- 238000004891 communication Methods 0.000 claims description 9
- 238000004458 analytical method Methods 0.000 claims description 3
- 238000001914 filtration Methods 0.000 claims 1
- 238000011161 development Methods 0.000 abstract description 5
- 239000012634 fragment Substances 0.000 description 9
- 230000000903 blocking effect Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000010365 information processing Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2411—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on the proximity to a decision surface, e.g. support vector machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- 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/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种代码推荐方法、装置及系统,属于计算机技术领域。所述方法包括:获取代码推荐请求,所述代码推荐请求中包含搜索代码;解析所述搜索代码获得语法树;根据所述语法树生成所述搜索代码的特征向量,所述搜索代码的特征向量至少表示所述搜索代码的结构特征;将所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。本发明通过将搜索代码解析成语法树,使得代码推荐工具可以适用于任何拥有语法结构的开发语言,适用性较好。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种代码推荐方法、装置及系统。
背景技术
代码推荐工具作为软件开发辅助工具的一种,主要用于根据用户输入的代码片段或者一行代码即可从代码特征库中匹配到最优的开源代码推荐给用户。目前,由于代码的结构多样、代码特征库量级大,现有的代码推荐工具均存在匹配缓慢、语料库扩展性差以及对不同代码结构类型适用性差的问题,进而导致代码推荐效率低、推荐的有效性不高以及需要更换不同的代码推荐工具的缺陷。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种代码推荐方法、装置及系统。所述技术方案如下:
第一方面,提供了一种代码推荐方法,所述方法包括:
获取代码推荐请求,所述代码推荐请求中包含搜索代码;
解析所述搜索代码获得语法树;
根据所述语法树生成所述搜索代码的特征向量,所述搜索代码的特征向量至少表示所述搜索代码的结构特征;
将所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
进一步地,所述根据所述语法树生成所述搜索代码的特征向量,包括:
根据所述语法树的结构构建所述搜索代码的稀疏矩阵;
根据所述稀疏矩阵生成所述搜索代码的稀疏向量,所述稀疏向量为所述搜索代码的特征向量。
进一步地,所述根据所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码,包括:
将所述搜索代码的特征向量与所述代码特征库中各所述预存代码的特征向量进行点积计算,获得点积值;
根据所述点积值筛选所述预存代码,获得所述推荐代码。
进一步地,所述根据所述点积值筛选所述预存代码,获得所述推荐代码,包括:
将所述点积值与第一点积值条件对比,将满足所述第一点积值条件的所述预存代码作为候选代码;
若存在两个及以上所述候选代码,则计算每两个所述候选代码的相似度,根据所述候选代码的相似度筛选所述候选代码,获得所述推荐代码。
进一步地,所述根据所述候选代码的相似度筛选所述候选代码,获得所述推荐代码,包括:
将所述候选代码的相似度与第一相似度条件对比,若满足,则在两个所述候选代码中保留所述点积值高的所述候选代码,并对所有保留的所述候选代码按照所述点积值进行排序,将满足第一排序条件的所述候选代码作为所述推荐代码。
进一步地,所述代码特征库由至少两个分片数据组成,各分片数据被配置在不同服务器中,各所述服务器分别根据其存储的所述代码特征库获得所述推荐代码。
进一步地,所述方法还包括:
汇总各所述服务器获得的推荐代码,计算每两个所述推荐代码的相似度;
将所述推荐代码的相似度与第二相似度条件对比,若满足,则在两个所述推荐代码中保留所述点积值高的所述推荐代码,并对保留的所述推荐代码按照所述点积值排序,将满足第二排序条件的所述推荐代码作为综合推荐代码。
进一步地,所述方法还包括:
对比各所述服务器存储的所述代码特征库的大小;
对存储所述代码特征库最小的所述服务器中的所述代码特征库进行增量更新。
第二方面,提供了一种代码推荐装置,所述装置包括:
通信模块,用于获取代码推荐请求,所述代码推荐请求中包含搜索代码;
解析模块,用于解析所述搜索代码获得语法树;
向量生成模块,用于根据所述语法树生成所述搜索代码的特征向量,所述搜索代码的特征向量至少表示所述搜索代码的结构特征;
推荐代码获取模块,用于将所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
进一步地,向量生成模块,包括:
矩阵构建模块,用于根据语法树的结构构建搜索代码的稀疏矩阵;
特征向量获取模块,用于根据稀疏矩阵生成搜索代码的稀疏向量,稀疏向量为搜索代码的特征向量。
进一步地,推荐代码获取模块,包括:
点积计算模块,用于将搜索代码的特征向量与代码特征库中各预存代码的特征向量进行点积计算,获得点积值;
筛选模块,用于根据点积值筛选代码特征库中的预存代码,获得推荐代码。
进一步地,筛选模块,包括:
候选代码确定模块,用于将点积值与第一点积值条件对比,将满足第一点积值条件的预存代码作为候选代码;
第一相似度计算模块,用于当存在两个及以上候选代码时,计算每两个候选代码的相似度;
第一筛选子模块,用于根据候选代码的相似度筛选候选代码获得推荐代码。
进一步地,第一筛选子模块,具体用于:
将候选代码的相似度与第一相似度条件对比,若满足第一相似度条件,则在两个候选代码中保留点积值高的候选代码,并对所有保留的候选代码按照点积值排序,将满足第一排序条件的候选代码作为推荐代码。
进一步地,代码特征库为预先按照代码的特征值生成的至少两个分片数据,分片数据各自分别被配置在上述服务器中,各服务器分别根据其存储的代码特征库获得推荐代码。
进一步地,上述装置还包括:综合推荐代码获取模块,包括:
第二相似度计算模块,用于汇总各服务器获得的推荐代码,计算每两个推荐代码的相似度;
第二筛选子模块,用于将推荐代码的相似度与第二相似度条件对比,若满足第二相似度条件,则在两个推荐代码中保留点积值高的推荐代码,并对保留的推荐代码按照点积值排序,将满足第二排序条件的推荐代码作为综合推荐代码。
进一步地,上述装置还包括:
更新模块,用于对比各服务器存储的代码特征库的大小;以及,
对存储代码特征库最小的服务器中的代码特征库进行增量更新。
第三方面,提供了一种计算机系统,包括:
一个或多个处理器;以及
与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行上述第一方面任一项所述的方法。
本发明实施例提供的技术方案带来的有益效果是:
1、本发明公开的技术方案通过将搜索代码解析成语法树,使得代码推荐工具可以适用于任何拥有语法结构的开发语言,适用性较好;
2、本发明公开的技术方案通过搜索代码的特征向量与代码特征库中代码的特征向量的点积值筛选代码特征库中的代码,并对筛选后的代码通过其之间的相似度进行进一步筛选,有利于获得代码特征库中最符合搜索代码的代码,更好地满足用户需求;
3、本发明公开的技术方案将代码特征库设置在多个服务器中,各服务器之间进行非阻塞式的多线程运行,只要服务器返回的推荐结果的预设的相似度满足条件,且推荐结果的点积值满足预设的点积值条件,就能向用户反馈综合推荐代码,相较于现有技术中将代码特征库设置在一个服务器中获得推荐代码,响应速度更快;
4、本发明公开的技术方案将代码特征库设置在多个服务器中,进行代码特征库更新时可以选择存储代码特征库较少的服务器进行更新,对服务器中的代码特征库进行均衡配置,以保证服务器的运行能力。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的代码推荐方法流程图;
图2是本发明实施例提供的语法树实例;
图3是本发明实施例提供的代码推荐装置结构示意图;
图4是本发明实施例提供的计算机系统结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如背景技术所述,现有的代码推荐工具都会存在适用的代码种类少、响应缓慢、代码特征库扩展性差的问题,本发明实施例为了解决现有技术存在的上述问题,提供一种代码推荐方法、装置及系统,具体的技术方案如下:
如图1所示,一种代码推荐方法,包括:
S1、获取代码推荐请求,代码推荐请求中包含搜索代码。
上述,搜索代码为具有语法结构的代码,通常情况下搜索代码不是完整代码,可以是一行代码或者是一段代码片段。获取搜索代码可以直接接受用户输入的搜索代码,也可以通过插件对开发工具监控,抓取相应的代码片段。
S2、解析搜索代码获得语法树。
上述,将搜索代码解析成语法树,具体可以采用Antrl4语法解析器解析转换。本发明实施例由于采用了代码解析方法,因此相较于现有的代码推荐工具可适用的代码的种类更多,只要拥有一定语法结构的开发语言,均可以适用本发明实施例公开的推荐方法。
S3、根据语法树生成搜索代码的特征向量,搜索代码的特征向量至少表示搜索代码的结构特征。
上述,搜索代码的特征向量除了表示搜索代码的结构特征外,还可以表示搜索代码的调用方法和/或用法等。搜索代码的结构特征具体可以是其语法树的结构特征,比如字符在语法树中的排列顺序。
在一个实施例中,步骤S3包括:
S31、根据语法树的结构构建搜索代码的稀疏矩阵;
S32、根据稀疏矩阵生成搜索代码的稀疏向量,稀疏向量为搜索代码的特征向量。
上述,稀疏矩阵根据语法树的结构特征构建。稀疏矩阵为数值为0的元素的数目远远多于非0元素的数目,且非0元素分布没有规律的矩阵。稀疏矩阵构建完成后,从其中提取一组结构特征,生成稀疏向量,作为优选地,生成稀疏向量是还可以根据搜索代码的调用方法和/或用法等特征。示例如下:
如下一段搜索代码
if(view instanceof ViewGroup){
for(int i=O;i<((ViewGroup)view).getChiIdCount();i++){
View innerView=((ViewGroup)View).getChildAt(i);
}
}
按照语法结构生成的语法树如图2所示。
如果是关键字,则保留,如果不是关键字,尽量用统一的符号表示,叶子节点不能是关键字。
这些结构特征都是经过精心挑选的,可以捕捉每个代码的用法、调用方法和结构信息。进而根据每个代码的特点,为其创建稀疏向量。比如全量的特征向量组成的索引矩阵有很多行的特征,然后根据用于搜索的结构特征,在这么多行里面去找是否包含这一行,如果包含,则用1表示,不包含则用0,就形成了搜索代码的稀疏向量。
S4、将搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
上述,代码特征库中存储了海量的预存代码对应的特征向量,预存代码具体可以是开源代码。代码特征库预先构建,具体可以存储有海量的完整的预存代码以及各预存代码对应的特征向量,或者仅存储有各预存代码对应的特征向量和预存代码与其对应的特征向量之间的对应关系,完整的预存代码存储在代码语料库中,具体操作时可以先根据搜索代码的特征向量确定预存代码的特征向量,再根据预存代码的特征向量与预存代码的对应关系确定推荐代码。
由于搜索代码的特征向量至少表示了搜索代码的结构特征,因此可以根据搜索代码的特征向量匹配到代码特征库中与搜索代码结构特征最接近的预存代码。
在一个实施例中,步骤S4包括:
S41、将搜索代码的特征向量与代码特征库中各预存代码的特征向量进行点积计算,获得点积值;
S42、根据点积值筛选代码特征库中的预存代码,获得推荐代码。
上述,搜索代码的特征向量与代码特征库中各预存代码的特征向量进行点积计算,点积值越大表示搜索代码和预存代码的特征越相近,因此可以通过点积值筛选代码特征库的预存代码,获得推荐代码。
在一个实施例中,步骤S42包括:
将点积值与第一点积值条件对比,将满足第一点积值条件的预存代码作为候选代码;
若存在两个及以上候选代码,则计算每两个候选代码的相似度,根据候选代码的相似度筛选候选代码,获得推荐代码。
上述实施例公开的方法中,第一点积值条件包括点积值的阈值。首先利用点积值进行预存代码的初选,当选出两个及以上的候选代码后,可按照点积值进行预存代码的排序,满足点积值排序条件的预存代码作为候选代码。
获得候选代码后对候选代码进行剪枝和重排,去掉候选代码主体中和搜索代码不相关的部分,只保留与搜索代码最匹配的部分。
当获得两个及以上的候选代码后,由于各候选代码的结构可能重复或相似,因此为了提高代码推荐的全面性,本发明实施例公开的方法在相似度高的候选代码中进行筛选。相似度的计算方法具体可以是两个候选代码的余弦相似度。根据候选代码相似度筛选候选代码,具体可以预设一个相似度阈值(如相似度大于0.7),当候选代码中的相似度超过0.7时,则对候选代码进行筛选。
在一个实施例中,上述步骤根据候选代码的相似度筛选候选代码,获得推荐代码,包括:
将候选代码的相似度与第一相似度条件对比,若满足第一相似度条件,则在两个候选代码中保留点积值高的候选代码,并对所有保留的候选代码按照点积值进行排序,将满足第一排序条件的候选代码作为推荐代码。
上述,第一相似度条件包括相似度的阈值。本发明实施例公开的方法中,当候选代码的相似度满足第一相似度条件,则根据点积值筛选候选代码。但若仅通过点积值筛选相似度较高的候选代码,最终获得的推荐代码的数量可能仍旧较大,因此为了进一步提高推荐代码的准确度,本发明实施例公开的方法对保留的候选代码按照点积值进行进一步的排序筛选,第一排序条件可以是候选代码按照点积值的排序次序,或者是点积值的阈值条件。
上述,步骤S4获得的推荐代码可以作为最终根据搜索代码匹配到的代码,推荐给用户。但由于现有的代码推荐工具中代码特征库配置在一个服务器中,由于代码特征库量级较大,因此导致匹配结果较为缓慢,因此为了提高推荐代码的生成速度,本发明实施例在前述实施例的基础上公开如下技术方案:
代码特征库为预先按照代码的特征值生成的至少两个分片数据,分片数据被配置在不同的服务器中,各服务器分别根据其存储的代码特征库获得推荐代码。
上述,分片数据是指将数据划分成的不同的数据部分。代码特征库被配置到多个服务器中,各服务器采用非阻塞式的多线程方式运行,各自根据其存储的代码特征库分别利用上述本发明任一实施例公开的方法获得推荐代码,在各服务器获得的推荐代码中确定最终的综合推荐代码。
基于上述代码特征库分布在至少两个服务器中的实施例,在一个实施例中,上述方法还包括:
汇总各服务器获得的推荐代码,计算每两个推荐代码的相似度;
将推荐代码的相似度与第二相似度条件对比,若满足第二相似度条件,则在两个推荐代码中保留点积值高的推荐代码,并对保留的推荐代码按照点积值排序,将满足第二排序条件的推荐代码作为综合推荐代码。
上述,第二相似度条件包括相似度阈值。第二排序条件可以是推荐代码按照点积值的排序次序,或者是点积值的阈值条件。通过推荐代码的相似度筛选各服务器确定的推荐代码,对按照相似度筛选后保留的推荐代码按照点积值再次筛选,确定更符合搜索代码特征的推荐代码作为综合推荐代码,推荐给用户。推荐代码的相似度为两个推荐代码的余弦相似度。
基于上述代码特征库分布在至少两个服务器中的实施例,在一个实施例中,上述方法还包括:
在各服务器获得推荐代码过程中,实时获取各服务器获得的推荐代码,并计算每两个推荐代码的相似度;
将推荐代码的相似度与第三相似度条件对比,若满足,则将推荐代码的点积值与第二点积值条件对比,若满足,则统计满足第二点积值条件的推荐代码的个数,当满足预设数量条件的推荐代码作为综合推荐代码。
上述,第三相似度条件包括相似度阈值。第三排序条件可以是推荐代码按照点积值的排序次序,或者是点积值的阈值条件。为了进一步提高推荐方法的响应速度,本发明公开的实施例获取各服务器获得的推荐代码,并进行实时的相似度计算,在根据相似度对推荐代码进行筛选的同时,统计保留的推荐代码的数量,当满足预设数量条件后将保留的推荐代码作为最终的综合推荐代码。本发明实施例通过实时计算并根据预设的数量条件最为确定综合推荐代码的条件,相对于上一个实施例可以更快地反馈综合推荐代码。
基于上述代码特征库被配置在至少两个服务器中的实施例,在一个实施例中,上述方法还包括:
对比各服务器存储的代码特征库的大小;
对存储代码特征库最小的服务器中的代码特征库进行增量更新。
上述,公开了对代码特征库更新的技术方案,由于现有技术中代码特征库仅存储在一个服务器中,因此代码特征库更新后会更加加重服务器的运行压力。本发明实施例中由于代码特征库被配置在多个服务器中,因此可以选择运行压力小的服务器作为更新的服务器,提高了代码特征库的可拓展性。
如图3所示,基于上述实施例公开的代码推荐方法,本发明还提供一种代码推荐装置,包括:
通信模块201,用于获取代码推荐请求,代码推荐请求中包含搜索代码。
上述,搜索代码为具有语法结构的代码,可以是一行代码或者一个代码片段。
解析模块202,用于解析搜索代码获得语法树。
上述,搜索代码可通过常用的语法解析器解析转换成语法树。
向量生成模块203,用于根据语法树生成搜索代码的特征向量,搜索代码的特征向量至少表示搜索代码的结构特征。
上述,搜索代码的特征向量除了表示搜索代码的结构特征外,还可以表示搜索代码的调用方法和/或用法等。搜索代码的结构特征具体可以是其语法树的结构特征,比如字符在语法树中的排列顺序。
在一个实施例中,向量生成模块203,包括:
矩阵构建模块,用于根据语法树的结构构建搜索代码的稀疏矩阵;
特征向量获取模块,用于根据稀疏矩阵生成搜索代码的稀疏向量,稀疏向量为搜索代码的特征向量。
上述,作为优选地,稀疏向量是还可以根据搜索代码的调用方法和/或用法等特征。
推荐代码获取模块204,用于将搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
上述,代码特征库为预先构建的,可以包括完整的预存代码以及各预存代码对应的特征向量,或者仅存储有各预存代码对应的特征向量和预存代码与特征向量之间的对应关系。
在一个实施例中,推荐代码获取模块204,包括:
点积计算模块,用于将搜索代码的特征向量与代码特征库中各预存代码的特征向量进行点积计算,获得点积值;
筛选模块,用于根据点积值筛选代码特征库中的预存代码,获得推荐代码。
上述,点积值越大表示搜索代码和代码特征库中的代码的特征越相近。
在一个实施例中,筛选模块,包括:
候选代码确定模块,用于将点积值与第一点积值条件对比,将满足第一点积值条件的预存代码作为候选代码;
第一相似度计算模块,用于当存在两个及以上候选代码时,计算每两个候选代码的相似度;
第一筛选子模块,用于根据候选代码的相似度筛选候选代码获得推荐代码。
上述,候选代码确定模块,还用于获得候选代码后对候选代码进行剪枝和重排,去掉候选代码主体中和搜索代码不相关的部分,只保留与搜索代码最匹配的部分。相似度计算模块,具体用于计算候选代码的余弦相似度。
在一个实施例中,第一筛选子模块,具体用于:
将候选代码的相似度与第一相似度条件对比,若满足第一相似度条件,则在两个候选代码中保留点积值高的候选代码,并对所有保留的候选代码按照点积值排序,将满足第一排序条件的候选代码作为推荐代码。
在一个实施例中,本发明公开的代码推荐装置包括至少两个服务器,代码特征库为预先按照代码的特征值生成的至少两个分片数据,分片数据各自分别被配置在上述服务器中,各服务器分别根据其存储的代码特征库获得推荐代码。
基于上述包括至少两个服务器的代码推荐装置,在一个实施例中,上述装置还包括:综合推荐代码获取模块,包括:
第二相似度计算模块,用于汇总各服务器获得的推荐代码,计算每两个推荐代码的相似度;
第二筛选子模块,用于将推荐代码的相似度与第二相似度条件对比,若满足第二相似度条件,则在两个推荐代码中保留点积值高的推荐代码,并对保留的推荐代码按照点积值排序,将满足第二排序条件的推荐代码作为综合推荐代码。
基于上述包括至少两个服务器的代码推荐装置,在一个实施例中,上述装置还包括:综合推荐代码获取模块,包括:
第三相似度计算模块,用于在各服务器获得推荐代码过程中,实时获取各服务器获得的推荐代码,并计算每两个推荐代码的相似度;
第三筛选子模块,用于将推荐代码的相似度与第三相似度条件对比,若满足,则将推荐代码的点积值与第二点积值条件对比,若满足,则统计满足第二点积值条件的推荐代码的个数,当满足预设数量条件的推荐代码作为综合推荐代码。
基于上述包括至少两个服务器的代码推荐装置,在一个实施例中,上述装置还包括:
更新模块,用于对比各服务器存储的代码特征库的大小;以及,
对存储代码特征库最小的服务器中的代码特征库进行增量更新。
需要说明的是,本发明公开的上述装置中,第一相似度计算模块、第二相似度计算模块,第三相似度计算模块可以是同一个相似度模块,第一筛选子模块、第二筛选子模块,第三筛选子模块可以是同一个筛选子模块。本发明实施例作上述区分主要为了和方法实施例对应。
基于上述代码推荐方法,本发明还提供一种计算机系统,包括:
一个或多个处理器;以及
与一个或多个处理器关联的存储器,存储器用于存储程序指令,程序指令在被一个或多个处理器读取执行时,执行上述代码推荐方法。
其中,图4示例性的展示出了计算机系统的架构,具体可以包括处理器310,视频显示适配器311,磁盘驱动器312,输入/输出接口313,网络接口314,以及存储器320。上述处理器310、视频显示适配器311、磁盘驱动器312、输入/ 输出接口313、网络接口314,与存储器320之间可以通过通信总线330进行通信连接。
其中,处理器310可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请所提供的技术方案。
存储器320可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器320可以存储用于控制电子设备300运行的操作系统321,用于控制电子设备300的低级别操作的基本输入输出系统322(BIOS)。另外,还可以存储网页浏览器323,数据存储管理系统324,以及设备标识信息处理系统325等等。上述设备标识信息处理系统325就可以是本申请实施例中具体实现前述各步骤操作的应用程序。总之,在通过软件或者固件来实现本申请所提供的技术方案时,相关的程序代码保存在存储器320中,并由处理器310来调用执行。
输入/输出接口313用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
网络接口314用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线330包括一通路,在设备的各个组件(例如处理器310、视频显示适配器311、磁盘驱动器312、输入/输出接口313、网络接口314,与存储器320) 之间传输信息。
另外,该电子设备300还可以从虚拟资源对象领取条件信息数据库中获得具体领取条件的信息,以用于进行条件判断,等等。
需要说明的是,尽管上述设备仅示出了处理器310、视频显示适配器311、磁盘驱动器312、输入/输出接口313、网络接口314,存储器320,总线330等,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本申请方案所必需的组件,而不必包含图中所示的全部组件。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例提供的技术方案带来的有益效果是:
1、本发明公开的技术方案通过将搜索代码解析成语法树,使得代码推荐工具可以适用于任何拥有语法结构的开发语言,适用性较好;
2、本发明公开的技术方案通过搜索代码的特征向量与代码特征库中代码的特征向量的点积值筛选代码特征库中的代码,并对筛选后的代码通过其之间的相似度进行进一步筛选,有利于获得代码特征库中最符合搜索代码的代码,更好地满足用户需求;
3、本发明公开的技术方案将代码特征库设置在多个服务器中,各服务器之间进行非阻塞式的多线程运行,只要服务器返回的推荐结果的预设的相似度满足条件,且推荐结果的点积值满足预设的点积值条件,就能向用户反馈综合推荐代码,相较于现有技术中将代码特征库设置在一个服务器中获得推荐代码,响应速度更快;
4、本发明公开的技术方案将代码特征库设置在多个服务器中,进行代码特征库更新时可以选择存储代码特征库较少的服务器进行更新,对服务器中的代码特征库进行均衡配置,以保证服务器的运行能力。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种代码推荐方法,其特征在于,包括:
获取代码推荐请求,所述代码推荐请求中包含搜索代码;
解析所述搜索代码获得语法树;
根据所述语法树生成所述搜索代码的特征向量,所述搜索代码的特征向量至少表示所述搜索代码的结构特征;
将所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
2.如权利要求1所述的方法,其特征在于,所述根据所述语法树生成所述搜索代码的特征向量,包括:
根据所述语法树的结构构建所述搜索代码的稀疏矩阵;
根据所述稀疏矩阵生成所述搜索代码的稀疏向量,所述稀疏向量为所述搜索代码的特征向量。
3.如权利要求1所述的方法,其特征在于,所述根据所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码,包括:
将所述搜索代码的特征向量与所述代码特征库中各所述预存代码的特征向量进行点积计算,获得点积值;
根据所述点积值筛选所述预存代码,获得所述推荐代码。
4.如权利要求3所述的方法,其特征在于,所述根据所述点积值筛选所述预存代码,获得所述推荐代码,包括:
将所述点积值与第一点积值条件对比,将满足所述第一点积值条件的所述预存代码作为候选代码;
若存在两个及以上所述候选代码,则计算每两个所述候选代码的相似度,根据所述候选代码的相似度筛选所述候选代码,获得所述推荐代码。
5.如权利要求4所述的方法,其特征在于,所述根据所述候选代码的相似度筛选所述候选代码,获得所述推荐代码,包括:
将所述候选代码的相似度与第一相似度条件对比,若满足,则在两个所述候选代码中保留所述点积值高的所述候选代码,并对所有保留的所述候选代码按照所述点积值进行排序,将满足第一排序条件的所述候选代码作为所述推荐代码。
6.如权利要求1~5中任一项所述的方法,其特征在于,所述代码特征库由至少两个分片数据组成,各分片数据被配置在不同服务器中,各所述服务器分别根据其存储的所述代码特征库获得所述推荐代码。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
汇总各所述服务器获得的推荐代码,计算每两个所述推荐代码的相似度;
将所述推荐代码的相似度与第二相似度条件对比,若满足,则在两个所述推荐代码中保留所述点积值高的所述推荐代码,并对保留的所述推荐代码按照所述点积值排序,将满足第二排序条件的所述推荐代码作为综合推荐代码。
8.如权利要求6所述的方法,其特征在于,所述方法还包括:
对比各所述服务器存储的所述代码特征库的大小;
对存储所述代码特征库最小的所述服务器中的所述代码特征库进行增量更新。
9.一种代码推荐装置,其特征在于,包括:
通信模块,用于获取代码推荐请求,所述代码推荐请求中包含搜索代码;
解析模块,用于解析所述搜索代码获得语法树;
向量生成模块,用于根据所述语法树生成所述搜索代码的特征向量,所述搜索代码的特征向量至少表示所述搜索代码的结构特征;
推荐代码获取模块,用于将所述搜索代码的特征向量与代码特征库中预存代码的特征向量匹配,获得推荐代码。
10.一种计算机系统,其特征在于,包括:
一个或多个处理器;以及
与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行上述权利要求1~8任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110319416.XA CN113344023A (zh) | 2021-03-25 | 2021-03-25 | 一种代码推荐方法、装置及系统 |
CA3153550A CA3153550A1 (en) | 2021-03-25 | 2022-03-25 | Core recommendation method, device and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110319416.XA CN113344023A (zh) | 2021-03-25 | 2021-03-25 | 一种代码推荐方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113344023A true CN113344023A (zh) | 2021-09-03 |
Family
ID=77467827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110319416.XA Pending CN113344023A (zh) | 2021-03-25 | 2021-03-25 | 一种代码推荐方法、装置及系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113344023A (zh) |
CA (1) | CA3153550A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117289919A (zh) * | 2023-11-24 | 2023-12-26 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108829764A (zh) * | 2018-05-28 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 推荐信息获取方法、装置、系统、服务器及存储介质 |
US20190303141A1 (en) * | 2018-03-29 | 2019-10-03 | Elasticsearch B.V. | Syntax Based Source Code Search |
CN111723192A (zh) * | 2020-06-19 | 2020-09-29 | 南开大学 | 代码推荐方法和装置 |
CN112328743A (zh) * | 2020-11-03 | 2021-02-05 | 北京嘀嘀无限科技发展有限公司 | 代码搜索方法、装置、可读存储介质和电子设备 |
-
2021
- 2021-03-25 CN CN202110319416.XA patent/CN113344023A/zh active Pending
-
2022
- 2022-03-25 CA CA3153550A patent/CA3153550A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190303141A1 (en) * | 2018-03-29 | 2019-10-03 | Elasticsearch B.V. | Syntax Based Source Code Search |
CN108829764A (zh) * | 2018-05-28 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 推荐信息获取方法、装置、系统、服务器及存储介质 |
CN111723192A (zh) * | 2020-06-19 | 2020-09-29 | 南开大学 | 代码推荐方法和装置 |
CN112328743A (zh) * | 2020-11-03 | 2021-02-05 | 北京嘀嘀无限科技发展有限公司 | 代码搜索方法、装置、可读存储介质和电子设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117289919A (zh) * | 2023-11-24 | 2023-12-26 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
CN117289919B (zh) * | 2023-11-24 | 2024-02-20 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CA3153550A1 (en) | 2022-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112052138A (zh) | 业务数据质量检测方法、装置、计算机设备及存储介质 | |
CN112364014B (zh) | 数据查询方法、装置、服务器及存储介质 | |
CN110647995A (zh) | 规则训练方法、装置、设备及存储介质 | |
CN111460011A (zh) | 页面数据展示方法、装置、服务器及存储介质 | |
CN114138784A (zh) | 基于存储库的信息溯源方法、装置、电子设备及介质 | |
CN113282854A (zh) | 数据请求响应方法、装置、电子设备及存储介质 | |
CN110737600A (zh) | 崩溃统计数据显示方法、装置、计算机设备及存储介质 | |
CN110704472A (zh) | 数据查询统计方法及装置 | |
CN113344023A (zh) | 一种代码推荐方法、装置及系统 | |
KR102345410B1 (ko) | 빅데이터 지능형 수집 방법 및 장치 | |
CN111104422B (zh) | 一种数据推荐模型的训练方法、装置、设备及存储介质 | |
CN110347934B (zh) | 一种文本数据过滤方法、装置及介质 | |
CN113760891A (zh) | 一种数据表的生成方法、装置、设备和存储介质 | |
CN115794744A (zh) | 一种日志展示方法、装置、设备和存储介质 | |
CN107368464B (zh) | 一种获取招标产品信息的方法及装置 | |
CN112287663B (zh) | 一种文本解析方法、设备、终端及存储介质 | |
CN114841165A (zh) | 用户数据分析及展示方法、装置、电子设备及存储介质 | |
CN114385155A (zh) | vue项目可视化工具生成方法、装置、设备及存储介质 | |
CN109886327B (zh) | 一种分布式系统中Java数据的处理系统及方法 | |
CN112527655A (zh) | 软件版本质量异常检测方法、装置、电子设备及存储介质 | |
CN112307050B (zh) | 一种重复关联计算的识别方法、装置及计算机系统 | |
CN112035425B (zh) | 一种日志的存储方法、装置及计算机系统 | |
CN115168399B (zh) | 基于图形化界面的数据处理方法、装置、设备及存储介质 | |
CN115203057B (zh) | 低代码测试自动化方法、装置、设备及存储介质 | |
CN110633430A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210903 |
|
RJ01 | Rejection of invention patent application after publication |