CN113867710A - 代码补全的方法和装置 - Google Patents
代码补全的方法和装置 Download PDFInfo
- Publication number
- CN113867710A CN113867710A CN202010607745.XA CN202010607745A CN113867710A CN 113867710 A CN113867710 A CN 113867710A CN 202010607745 A CN202010607745 A CN 202010607745A CN 113867710 A CN113867710 A CN 113867710A
- Authority
- CN
- China
- Prior art keywords
- code
- completion
- completed
- probability
- algorithm
- 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
Images
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/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请提供了一种代码补全的方法和装置。该方法包括:接收来自代码补全客户端的代码补全请求,并根据该代码补全请求中的目标待补全代码片段和该目标待补全代码片段的待补全位置确定该目标待补全代码片段的前缀词,再根据该代码补全请求中的概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词得到多种代码补全算法中的每种代码补全算法对应的潜在应用概率,进而根据每种代码补全算法的潜在应用概率确定该目标待补全代码片段的补全结果,最后将该补全结果发送代码补全客户端。这样在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进而减少了用户等待代码补全的结果的时延,提高了用户体验。
Description
技术领域
本申请涉及计算机领域,更具体地,涉及一种代码补全的方法和装置。
背景技术
代码编辑器是程序员用来开发,编辑代码的工具。为了减少程序员输入的代码量,提高代码开发效率,代码编辑器会提供代码补全功能。代码补全功能是指当程序员敲入部分代码时,代码编辑器以列表形式显示预测的多项后续部分代码,当预测出的后续代码与程序员想敲入的代码一致或部分一致时,程序员会从列表中选择一项自动补齐到代码编辑器。若程序员选择自动补齐的代码长度越长,则需要程序员手工输入的代码就越少,越大程度能减少程序员输入的代码量,更有效的提升开发效率。
传统方案中的代码补全技术有很多种。例如,每种编程语言(如Java、C++、python等)特有的语言服务器(language server)可以通过语法层面解析源代码,获取当前可用的变量名、类名及方法名、函数名,以此作为代码补全的结果。再例如,对代码库中的代码构建自然语言生成模型,以此来生成代码补全结果。
随着代码补全工具或服务的增多,综合考虑多种代码补全算法的优势,可以取长补短,能够提供更好的代码补全的结果。例如,对每条代码补全请求采用多种代码补全算法分别计算代码补全的结果,再合并通过多种代码补全算法计算得到的结果。但是,在代码补全算法较多的情况下,得到最终的代码补全的结果的计算量相应增大,进而加大用户等待代码补全的结果的时长。因此,如何减少用户等待代码补全的结果的时长,是亟待解决的技术问题。
发明内容
本申请提供一种代码补全的方法,能够减少计算代码补全的结果的功耗开销。
第一方面,提供了一种代码补全的方法,该方法包括:接收来自代码补全客户端的代码补全请求,所述代码补全请求包括目标待补全代码片段、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的待补全位置;根据所述目标待补全代码片段和所述目标待补全代码片段的待补全位置,确定所述目标待补全代码片段的前缀词;根据概率预测模型、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率,所述潜在应用概率是指采用所述每一种代码补全算法对所述代码补全请求进行计算得到的潜在补全代码被用户采用的概率;根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果;向所述代码补全客户端发送所述目标待补全代码片段的补全结果。
代码补全装置接收来自代码补全客户端的代码补全请求,并根据该代码补全请求中的目标待补全代码片段和该目标待补全代码片段的待补全位置确定该目标待补全代码片段的前缀词,再根据该代码补全请求中的概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词可以得到多种代码补全算法中的每一种代码补全算法对应的潜在应用概率,进而根据每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。这样代码补全装置通过提前存储概率预测模型,并根据该概率预测模型中的潜在应用概率选择部分代码补全算法,从而可以仅根据部分代码补全算法计算补全结果,即在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进而减少了用户等待代码补全的结果的时长,提高了用户体验。
在一些可能的实现方式中,所述根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果包括:根据所述每一种代码补全算法的潜在应用概率,从所述多种代码补全算法中选择目标代码补全算法;根据所述目标代码补全算法,确定所述目标待补全代码片段的补全结果,所述补全结果包括补全代码。
代码补全装置可以根据该每一种代码补全算法的潜在应用概率从该多种代码补全算法中选择目标代码补全算法。例如,代码补全装置可以将潜在应用概率高的,和/或计算得到补全结果耗时短的代码补全算法作为目标代码补全算法。更具体地,代码补全装置可以将潜在应用概率大于或等于第二预设概率阈值的代码补全算法作为目标代码补全算法。也就是说,代码补全装置选择潜在应用概率高的几种代码补全算法进行代码补全,从而提升了计算的有效性,或者说在保证代码补全效果的同时,减少了资源开销。
在一些可能的实现方式中,所述目标代码补全算法包括所述多种代码补全算法中的部分代码补全算法,其中,所述根据所述目标代码补全算法,确定目标待补全代码片段的补全结果包括:根据所述部分代码补全算法,确定所述部分代码补全算法中的每一种代码补全算法计算得到的潜在补全代码;合并和/或去重所述部分代码补全算法计算得到的潜在补全代码,得到所述目标待补全代码片段的补全结果。
在该目标代码补全算法为多种代码补全算法的情况下,代码补全装置根据目标代码补全算法确定目标待补全代码片的补全结果可以是将部分代码补全算法计算得到潜在补全代码进行合并和/或去重等操作得到最终的补全结果,从而得到更加精准的补全结果。
在一些可能的实现方式中,所述根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果包括:在所述每一种代码补全算法的潜在应用概率均低于预设概率阈值的情况下,所述目标待补全代码片段的补全结果为空。
代码补全装置可以在每一种代码补全算法的潜在应用概率都小于或等于该预设概率阈值的情况下,将目标待补全代码片段的补全结果设置为空。例如,在这种情况下,待补全装置可以不输出补全代码,这样可以避免不合适的补全代码对代码编程造成干扰。
在一些可能的实现方式中,所述方法还包括:根据所述多种代码补全算法和代码库中的一个或多个代码文件生成所述概率预测模型。
根据多种代码补全算和代码库中的一个或多个代码文件预先生成概率预测模型,有助于代码补全装置得到多种代码补全算法中的每一种代码补全算法对应的潜在应用概率,进而根据每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。即在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进一步地,减少了用户等待代码补全的结果的时延,提高了用户体验。
在一些可能的实现方式中,所述根据所述多种代码补全算法、代码库中的一个或多个代码文件生成所述概率预测模型的方法包括:从代码库中的一个或多个代码文件采样多个待补全位置;根据所述多个待补全位置中的第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率;根据所述第一待补全位置,确定所述第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词;根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率,生成所述概率预测模型,所述概率预测模型包括一个或多个映射关系,所述一个或多个映射关系包括所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率的映射关系。
通过第一代码文件的编程语言类型、第一代码文件中的待补全代码片段的前缀词、第一代码补全算法和第一潜在补全代码被用户采用的概率预先生成概率预测模型,有助于代码补全装置得到多种代码补全算法中的每一种代码补全算法对应的潜在应用概率,进而根据每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。即在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进一步地,减少了用户等待代码补全的结果的时延,提高了用户体验。
在一些可能的实现方式中,所述根据所述第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率包括:根据所述第一代码文件的编程语言类型、所述第一待补全位置、所述第一代码文件中的待补全代码片段,确定第一代码补全算法计算得到的第一潜在补全代码;根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率。
该第一代码文件中的该第一待补全位置之后的代码即为在该第一代码文件中的实际代码。第一潜在补全代码匹配该实际代码的长度和该实际代码的长度比值即为该第一潜在补全代码被用户采用的概率。也就是说,第一潜在补全代码与实际代码越相近,用户越愿意采用该潜在补全代码。即减少了用户等待代码补全的结果的时延,提高了用户体验。
在一些可能的实现方式中,所述方法还包括:根据所述第一代码文件中的待补全代码片段,确定所述第一代码文件中的待补全代码片段的描述信息;其中,所述根据所述第一代码文件的编程语言类型、所述第一代码文件中待补全代码片段的前缀词和所述第一补全结果被用户采用的概率,生成所述概率预测模型包括:根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、第一代码补全算法、所述第一潜在补全代码被用户采用的概率和所述第一代码文件中的待补全代码片段的描述信息,生成所述概率预测模型。
代码补全装置根据该第一代码文件中的待补全代码片段可以确定该待补全片段的更多信息,例如,描述信息。这样,代码补全装置可以结合描述信息生成概率预测模型,从而更进一步提高概率预测模型的准确性。
在一些可能的实现方式中,所述方法还包括:根据所述目标待补全代码片段,确定所述目标待补全代码片段的描述信息;其中,所述根据概率预测模型、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率包括:根据所述目标待补全代码片段的编程语言类型、所述目标待补全代码片段的前缀词、所述概率预测模型和所述目标待补全代码片段的描述信息,确定所述每一种代码补全算法的潜在应用概率。
若概率预测模型的生成结合了待补全片段的描述信息,则代码补全装置也可以是根据该概率预测模型、该目标待补全代码片段的编程语言类型、该目标待补全代码片段的描述信息和该目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率。这样参考更多的因素,得到目标待补全代码片段的补全结果,从而更进一步提高代码补全的准确性。
在一些可能的实现方式中,所述描述信息包括待补全位置前的代码长度、当前行首的前S个词或字符、当前行的前M行代码包含的词数量的一致性中的至少一项,S,M均为正整数。
待补全位置之前的代码片段的长度越长,通过某些补全算法得到的补全结果的潜在应用概率越高。待补全片段当前行首的字符或词也可以提高某些补全算法得到的补全结果的潜在应用概率。当前行的前M行代码包含的词数量一致的情况下,可以更进一步提高某些补全算法得到的补全结果的潜在应用概率。
在一些可能的实现方式中,所述根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率包括:将所述第一潜在补全代码中的匹配长度与所述第一代码文件中所述第一待补全位置之后的代码长度的比值作为所述第一潜在补全代码被用户采用的概率。
该第一潜在补全代码中的匹配长度可以是该第一潜在补全代码与该第一代码文件中该第一待补全位置之后的实际代码相同的代码长度。这样代码补全装置提供了一种通过计算匹配长度和实际长度的比值实现获知该第一潜在补全代码被用户采用的概率的方法。
在一些可能的实现方式中,所述根据所述目标待补全代码片段和所述目标待补全代码片段的待补全位置,确定所述目标待补全代码片段的前缀词包括:将所述目标待补全代码片段的待补全位置从后向前的N个词作为所述目标待补全代码片段的前缀词,其中,N为正整数。
第二方面,提供了一种代码补全的装置,该装置具有实现上述第一方面,及各种可能的实现方式的功能中的任一项所述的方法。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
在一种可能的设计中,该装置包括:收发模块和处理模块。该收发模块可以包括接收模块和发送模块。所述收发模块例如可以是收发器、接收器、发射器中的至少一种,该收发模块可以包括射频电路或天线。该处理模块可以是处理器。可选地,所述装置还包括存储模块,该存储模块例如可以是存储器。当包括存储模块时,该存储模块用于存储指令。该处理模块与该存储模块连接,该处理模块可以执行该存储模块存储的指令或源自其他的指令,以使该装置执行上述第一方面,及各种可能的实现方式的功能中的任一项所述的方法。
在另一种可能的设计中,当该装置为芯片时,该芯片包括:收发模块和处理模块,该收发模块可以包括接收模块和发送模块。收发模块例如可以是该芯片上的输入/输出接口、管脚或电路等。处理模块例如可以是处理器。该处理模块可执行指令,以使该装置内的芯片执行上述第一方面,及各种可能的实现方式的功能中的任一项所述的方法。可选地,该处理模块可以执行存储模块中的指令,该存储模块可以为芯片内的存储模块,如寄存器、缓存等。该存储模块还可以是位于通信设备内,但位于芯片外部,如只读存储器(read-onlymemory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)等。
其中,上述任一处提到的处理器,可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制上述第一方面,及各种可能的实现方式的功能中的方法的程序执行的集成电路。
第三方面,提供了一种计算机存储介质,该计算机存储介质中存储有程序代码,该程序代码用于指示执行上述第一方面,及各种可能的实现方式的功能中的任一项所述的方法的指令。
第四方面,提供了一种包含指令的计算机程序产品,其在计算机上运行时,使得计算机执行上述第一方面,及各种可能的实现方式的功能中的任一项所述的方法。
第五方面,提供了一种系统,该系统包括上述第二方面所述的装置和代码补全客户端。
基于上述技术方案,代码补全装置接收来自代码补全客户端的代码补全请求,并根据该代码补全请求中的目标待补全代码片段和该目标待补全代码片段的待补全位置确定该目标待补全代码片段的前缀词,再根据该代码补全请求中的概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词可以得到多种代码补全算法中的每种代码补全算法对应的潜在应用概率,进而根据每种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。这样在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销。
附图说明
图1是本申请实施例的补全代码的系统的示意图;
图2是本申请实施例的代码补全的方法的示意性流程图;
图3是本申请实施例的代码补全的装置的示意性框图;
图4是本申请实例的代码补全的装置的示意性结构图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
图1示出了本申请实施例的补全代码的系统的示意图。如图1所示,该系统包括代码补全装置110和代码补全客户端120。该代码补全装置110包括补全算法选择模块111、代码补全算法概率预测模块112、代码补全算法库113和补全结果返回模块114。其中,代码补全算法概率预测模块112包括概率预测模型生成单元、概率预测模型库、前缀词提取单元和概率预测单元。代码补全算法库113中可以包括一个或多个代码补全模块。
可以理解的是,该概率预测模型生成单元也可以称为“概率预测模型训练单元”,本申请对此不进行限定。
代码补全客户端120:
用于负责代码补全请求消息的发送,以及接收并呈现代码补全的结果。
可以理解的是,代码补全客户端可以是代码编辑器,也可以是包含代码编辑能力的集成开发环境(integrated development environment,IDE)。
代码补全装置110:
用于接收代码补全请求,并提供代码补全的结果。
可以理解的是,代码补全装置可以以插件的形式集成在代码补全客户端。代码补全装置也可以以服务的形式存在,给多个代码补全客户端提供代码服务的能力。
还可以理解的是,代码补全客户端120和代码补全装置110可以部署在同一台物理设备上。
代码补全算法概率预测模块112:
代码补全算法概率预测模块112主要包括离线生成各种代码补全算法的概率预测模型及在线预测各代码补全算法计算得到的潜在补全代码被用户采用的概率的能力。
代码补全算法概率预测模块112中的前缀词提取单元:
用于负责从代码文件中任意指定位置之前的代码片段中提取前缀词或从指定位置之前的代码片段中提取前缀词。其中,前缀词为指定位置之前的代码片段从后向前的几个(可预配置)词或字符。前缀词或字符数量可以是固定的,也可以是不固定的。例如,指定位置之前的代码片段从后向前至当前行首的词或字符。数量可以是1或其他正整数。
代码补全算法概率预测模块112中的概率预测模型生成单元:
基于代码库中代码的编程语言类型、前缀词提取单元从代码中指定位置之前的代码片段提取的代码前缀词、及每种代码补全算法计算得到的潜在补全代码被用户采用的概率,分别生成每种代码补全算法对应的概率预测模型,形成概率预测模型库;以便当程序员在编写代码时,能实时动态的根据编程语言类型及待补全代码的前缀词预测出各代码补全算法计算得到的潜在补全代码被用户采用的概率。
生成概率预测模型包括从代码库构建出包含如下信息的样本集(编程语言类型、代码片段前缀词、补全算法计算得到的潜在补全代码被用户采用的概率)。
可以理解的是,代码补全的结果与代码文件中指定位置之后代码片段越相近,用户越愿意采用该代码补全的结果,也即代码补全的效果越好。因此,将代码补全的结果与代码文件中指定位置之后代码片段的匹配度作为代码补全算法计算得到的潜在补全代码被用户采用的概率。
当收集到足够多的样本后,对每种代码补全算法,用其对应的样本,分别生成补全算法对应的概率预测模型。概率预测模型可以是回归模型,其中语言类型、代码前缀词为特征,概率为模型的目标,采用回归类算法(比如线性回归算法),生成对应的概率预测模型。即根据样本中语言类型、代码前缀,构建回归函数来拟合潜在补全代码被用户采用的概率,拟合度最高的函数即为概率预测模型。
换句话说,概率预测模型建立了编码语言类型、代码前缀词到潜在补全代码被用户采用的概率的映射关系,即对每种代码补全算法的概率预测模型,当输入编程语言类型及代码前缀词时,就可以输出该代码补全算法对应的潜在补全代码被用户采用的概率。
代码补全算法概率预测模块112中的概率预测单元:
根据每种代码补全算法的概率预测模型及待补全代码的编程语言类型、待补全位置处的前缀词,在线预测每种代码补全算法计算得到的潜在补全代码被用户采用的概率。
具体地,先调用前缀词提取单元从待补全位置之前的代码片段中提取代码前缀词。其中,代码片段可以是代码请求消息中待补全代码片段,也可以是从代码请求消息中的待补全代码文件中提取的代码片段。
再根据编程语言类型及代码前缀词,使用概率预测模型生成单元生成的每种代码补全算法对应的概率模型库,预测每种代码补全算法计算得到的潜在补全代码被用户采用的概率。
补全算法选择模块111:
根据概率预测单元预测的每种代码补全算法计算得到的潜在补全代码被用户采用的概率,选择潜在补全代码被用户采用的概率高的代码补全算法。选择出的代码补全算法的数量可以设定选择潜在补全代码被用户采用的概率高于某个阈值的代码补全算法或固定数量(一个或多个)的代码补全算法。
可以理解的是,选择固定数量的代码补全算法,当预测出的多个代码补全算法的潜在补全代码被用户采用的概率相同或相差不大(例如,在某个阈值范围内)时,可以优先选择预期耗时更短、资源占用更少、不占用稀有资源的补全算法。
还可以理解的是,代码补全算法的信息可以提前收集或计算。例如,有的自然语言生成类代码补全算法需要占用稀有计算资源如GPU、或有的代码补全算法需要网络(资源)访问、有的代码补全算法完成每次代码补全请求的平均耗时较长。
可以理解的是,根据概率预测单元预测的每种代码补全算法计算得到的潜在补全代码被用户采用的概率均低于预设概率阈值时,可以选择零个代码补全算法,即目标待补全代码片段的补全结果为空。
代码补全算法库113:
代码补全算法库包含多个代码补全模块,每种代码补全模块具有代码补全的能力。此外,每种代码补全模块对应一种代码补全算法,每种代码补全算法可以基于代码的语言类型、程序员已输入的代码片段,以及指定的代码补全位置,独立输出代码补全的结果。
代码补全结果返回模块114:
代码补全结果返回模块114可以合并多种代码补全算法的预测结果。具体地,代码补全结果返回模块114可以去除多种代码补全算法中重复的代码补全结果项,或按一定的规则(按补全结果项的长度、或补全结果项首字母的字母顺序等)排序代码补全结果项等能力,并将代码补全的结果返回给代码补全客户端。
传统方案中,随着代码补全工具或服务的增多,综合考虑多种代码补全算法的优势,可以取长补短,能够提供更好的代码补全的结果。例如,对每条代码补全请求采用多种代码补全算法分别计算代码补全的结果,再合并通过多种代码补全算法计算得到的结果。但是,在代码补全算法较多的情况下,得到最终的代码补全的结果的计算量非常大。因此,如何减少计算代码补全的结果的功耗开销,进而减少用户等待代码补全的结果的时延,亟待解决。
图2示出了本申请实施例的代码补全的方法的示意性流程图。
201,代码补全装置接收来自代码补全客户端的代码补全请求,该代码补全请求包括目标待补全代码片段、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的待补全位置。相应地,代码补全客户端向代码补全装置发送该代码补全请求。
具体地,目标待补全代码片段可以是以字符串的形式表示的一段代码。或者目标待补全代码片段也可以是以包含待补全代码片段的文件形式提供。该待补全位置可以由该待补全位置在该目标待补全代码片段所属的代码文件中的行或列表示,或以某个事先设定的特殊字符或字符串所在的位置来表示。代码文件可以通过路径形式表示。
可选地,该编程语言类型包括机器语言、汇编语言或高级语言中的至少一项。
202,代码补全装置根据该目标待补全代码片段和该目标待补全代码片段的待补全位置,确定该目标待补全代码片段的前缀词。
具体地,前缀词为从该目标待补全代码片段中提取出来的。或者说,前缀词为从代码文件中的待补全位置之前的代码片段中提取出来的。
可选地,步骤202具体可以是将该目标待补全代码片段的待补全位置从后向前的N个词作为该目标待补全代码片段的前缀词。
例如,若待补全位置之前的代码片段为“for line in lines:”,且其中待补全位置的前3个词作为该目标待补全代码片段的前缀词,则该目标待补全代码片段的前缀词为[“in”、“lines”、“:”]。
可以理解的是,目标待补全代码片段的前缀词可以是待补全位置之前的N个连续的词,还可以是不连续的词(例如,相邻词之间的间隔相同),本申请对此不进行限定。
203,代码补全装置根据概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率,该潜在应用概率是指采用该每一种代码补全算法对该代码补全请求进行计算得到的潜在补全代码被用户采用的概率。
具体地,该概率预测模型可以包括至少一种编程语言类型、至少一个前缀词、至少一种代码补全算法和至少一个潜在应用概率的对应关系。这样,代码补全装置根据该概率预测模型、该目标待补全代码片段的编程语言类型、该目标待补全代码片段的前缀词和任意一种代码补全算法(例如,第一代码补全算法),可以获得该第一代码补全算法对应的潜在应用概率。相应地,该代码补全装置可以得到该多种代码补全算法中的每种代码补全算法对应的潜在应用概率。
可以理解的是,该代码补全装置可以预先获取该概率预测模型。例如,该代码补全装置可以预先从其他设备获取该概率预测模型,也可以自己生成概率预测模型。
在一个实施例中,在步骤203之前,代码补全装置还可以根据所述多种代码补全算法和代码库中的一个或多个代码文件生成所述概率预测模型。
具体地,根据多种代码补全算和代码库中的一个或多个代码文件预先生成概率预测模型,有助于代码补全装置得到多种代码补全算法中的每一种代码补全算法对应的潜在应用概率,进而根据每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。即在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进一步地,减少了用户等待代码补全的结果的时延,提高了用户体验。
可以理解的是,代码库包括至少一种编程语言编写的代码文件。代码补全装置可以随机在一个或多个代码文件中采样待补全位置,为方便描述本申请实施例以在同一个代码文件中采样待补全位置为例进行说明,但本申请并不限于此。
可选地,代码补全装置具体可以是从代码库中的一个或多个代码文件中采样多个待补全位置,并根据该多个待补全位置中的某一个待补全位置(例如,第一待补全位置)确定该第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词,以及根据所述第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率,进而根据该第一代码文件的编程语言类型、该第一代码文件中的待补全代码片段的前缀词、该第一代码补全算法和该第一潜在补全代码被用户采用的概率生成该概率预测模型。
具体地,通过第一代码文件的编程语言类型、第一代码文件中的待补全代码片段的前缀词、第一代码补全算法和第一潜在补全代码被用户采用的概率可以预先具体地生成概率预测模型,有助于代码补全装置得到多种代码补全算法中的每一种代码补全算法对应的潜在应用概率,进而根据每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。即在保证代码准确性的同时,减少了计算代码的补全结果的功耗开销,进一步地,减少了用户等待代码补全的结果的时延,提高了用户体验。
可选地,代码补全装置还可以根据所述第一代码文件的编程语言类型、所述第一待补全位置、所述第一代码文件中的待补全代码片段,确定第一代码补全算法计算得到的第一潜在补全代码,以及根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率。
具体地,该第一代码文件中的该第一待补全位置之后的代码即为在该第一代码文件中的实际代码。第一潜在补全代码匹配该实际代码的长度和该实际代码的长度比值即为该第一潜在补全代码被用户采用的概率。也就是说,第一潜在补全代码与实际代码越相近,用户越愿意采用该潜在补全代码。
可以理解的是,该多个待补全位置中的其他待补全位置也可以按照上述第一待补全位置生成概率预测模型,为避免重复,本申请不进行赘述。
还可以理解的是,代码补全装置可以判断样本的数目确定是否足够生成该概率预测模型。例如,将编程语言类型、代码片段前缀词、补全算法计算得到的潜在补全代码被用户采用的概率看作一个样本,在该样本的数目大于或等于预设样本数量阈值的情况下,可以认为足以生成该概率预测模型。若样本的数目小于预设样本数量阈值,则继续生成样本。
可选地,该代码补全装置确定所述第一潜在补全代码被用户采用的概率具体可以是将该第一潜在补全代码中的匹配长度与该第一代码文件中该第一待补全位置之后的代码长度的比值作为该第一潜在补全代码被用户采用的概率。
具体地,该第一潜在补全代码中的匹配长度可以是该第一潜在补全代码与该第一代码文件中该第一待补全位置之后的实际代码相同的代码长度。这样代码补全装置通过计算匹配长度和实际长度的比值实现获知该第一潜在补全代码被用户采用的概率。
例如,该第一代码文件中的第一待补全位置之后的第一潜在补全代码为“this.m odelParams.acctBaseInfo.acctId”,而该第一代码文件中的第一待补全位置之后的实际代码为“this.modelParams.acctBaseInfo.acctCode,”,则匹配长度为34(this.modelParams.acctBaseInfo.acct)。
可选的,该第一代码文件中的第一待补全位置之后的实际代码不限为该第一代码文件中的第一待补全位置之后的到该行行尾的代码、该第一代码文件中的第一待补全位置之后的到文件末尾的代码、该第一代码文件中的第一待补全位置之后的预先设定数量的字符或词的代码等各种方式截断的代码。
可以理解的是,为避免虽然前缀部分匹配,但潜在补全代码中补全的代码过长,程序员需要删除过多不匹配的字符的情况,可以综合考虑补全结果项中的匹配前缀长度与不匹配的后缀长度。例如,上例中匹配前缀长度为34(this.modelParams.acctBaseInfo.acct),不匹配后缀长度为2(Id),则可将不匹配后缀长度按一定比例的权重来惩罚匹配长度,假设权重为1,则惩罚后的匹配长度为:34-1*2=32。
在另一个实施例中,代码补全装置生成概率预测模型具体可以是从代码库中的一个或多个代码文件中采样多个待补全位置,并根据该多个待补全位置中的某一个待补全位置(例如,第一待补全位置)确定该第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词,以及根据该第一代码文件中的待补全代码片段确定该第一代码文件中的待补全片段的描述信息,进而根据该第一代码文件的编程语言类型、该第一待补全位置该第一代码文件中的待补全片段确定该第一代码补全算法计算得到的包括第一潜在补全代码的第一补全结果,再根据该第一代码文件中的该第一待补全位置之后的代码和该第一潜在补全代码确定该第一潜在补全代码被用户采用的概率。这样代码补全装置可以根据该第一代码文件的编程语言类型、该第一代码文件中的待补全代码片段的前缀词、该第一代码文件中的待补全片段的描述信息、该第一代码补全算法和该第一潜在补全代码被用户采用的概率生成该概率预测模型。
具体地,代码补全装置根据该第一代码文件中的待补全代码片段可以确定该待补全片段的更多信息,例如,描述信息。这样,代码补全装置可以结合描述信息生成概率预测模型,从而更进一步提高概率预测模型的准确性。
可以理解的是,该多个待补全位置中的其他待补全位置也可以按照上述第一待补全位置生成概率预测模型,为避免重复,本申请不进行赘述。
可选地,该待补全片段的描述信息包括该待补全位置前的代码长度、当前行首的前S个词或字符、当前行的前M行代码包含的词数量的一致性中的至少一项。
具体地,待补全位置前的代码片段的长度可以用字符数、词数等表示。待补全位置之前的代码片段的长度越长,通过某些补全算法得到的补全结果的潜在应用概率越高。待补全片段当前行首的字符或词也可以提高某些补全算法得到的补全结果的潜在应用概率。当前行的前M行代码包含的词数量一致的情况下,可以更进一步提高某些补全算法得到的补全结果的潜在应用概率。例如,M=2。
可以理解的是,行首的词或字符可以是for、if、//、##等。
可选地,若概率预测模型的生成结合了待补全片段的描述信息,则步骤203中,代码补全装置也可以是根据该概率预测模型、该目标待补全代码片段的编程语言类型、该目标待补全代码片段的描述信息和该目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率。
204,代码补全装置根据该每种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果。
在一种可能的实现方式中,步骤204具体可以是在该每种代码补全算法的潜在应用概率均低于第一预设概率阈值的情况下,该目标待补全代码片段的补全结果为空。
具体地,代码补全装置可以在每种代码补全算法的潜在应用概率都小于或等于该预设概率阈值的情况下,将目标待补全代码片段的补全结果设置为空。例如,在这种情况下,待补全装置可以不输出补全代码,这样可以避免不合适的补全代码对代码编程造成干扰。
可以理解的是,该第一预设概率阈值可以是预先设定的。例如,该第一预设概率阈值为0~0.5之间,具体可以是取值为0.3。
在另一种可能的实现方式中,步骤204具体可以是根据该每种代码补全算法的潜在应用概率从该多种代码补全算法中选择目标代码补全算法,并根据该目标代码补全算法确定该目标待补全代码片段的补全结果,该补全结果包括补全代码。
具体地,代码补全装置可以根据该每种代码补全算法的潜在应用概率从该多种代码补全算法中选择目标代码补全算法。例如,代码补全装置可以将潜在应用概率高的,和/或计算得到补全结果耗时短的代码补全算法作为目标代码补全算法。更具体地,代码补全装置可以将潜在应用概率大于或等于第二预设概率阈值的代码补全算法作为目标代码补全算法。也就是说,代码补全装置选择潜在应用概率高的几种代码补全算法进行代码补全,从而提升了计算的有效性,或者说在保证代码补全效果的同时,减少了资源开销。
例如,目标待补全代码片段的补全位置之后的实际代码为“this.modelParams.acctBaseInfo.acctCode,”,长度为39。代码补全装置通过代码补全算法A和代码补全算法B分别确定潜在补全代码。如下述表1所示。补全算法A与目标待补全代码片段的补全位置之后到行尾的代码片段“this.modelParams.acctBaseInfo.acctCode,”的最长公共前缀长度最长的结果为“this”,匹配长度为4。补全算法B与指定位置之后到行尾的代码片段的最长公共前缀长度最长的结果为“this.modelParams.acctBaseInfo.acct”,匹配长度为34。这样补全算法A的潜在应用概率为4/39=0.1;补全算法B的潜在应用概率为34/39=0.87。
表1
补全算法 | 潜在补全代码 |
补全算法A | this |
补全算法B | this.modelParams.acctBaseInfo.acctId |
可以理解的是,该第二预设概率阈值可以是预先设定的。其中,该第二预设概率阈值可以与该第一预设概率阈值相同,也可以不同,本申请对此不进行限定。
还可以理解的是,该目标代码补全算法可以是一种代码补全算法,也可以是前述多种代码补全算法中的部分代码补全算法(即大于一种代码补全算法),本申请对此不进行限定。
可选地,在该目标代码补全算法为多种代码补全算法的情况下,代码补全装置根据目标代码补全算法确定目标待补全代码片的补全结果可以是将部分代码补全算法计算得到潜在补全代码进行合并和/或去重等操作得到最终的补全结果,从而得到更加精准的补全结果。
205,代码补全装置向该代码补全客户端发送该目标待补全代码片段的补全结果。相应地,该代码补全客户端接收来自该代码补全装置的该目标待补全代码片段的补全结果。
具体地,代码补全装置接收来自代码补全客户端的代码补全请求,并根据该代码补全请求中的目标待补全代码片段和该目标待补全代码片段的待补全位置确定该目标待补全代码片段的前缀词,再根据该代码补全请求中的概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词可以得到多种代码补全算法中的每种代码补全算法对应的潜在应用概率,进而根据每种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果,最后将目标待补全代码片段的补全结果发送代码补全客户端。这样代码补全装置可以预先根据每种代码补全算法的潜在应用概率提前选择计算出的目标待补全代码片段的补全结果被用户采用的概率更高的代码补全算法,进而根据选中的代码补全算法计算补全结果,从而在保证代码补全的准确性的同时,减少了计算代码的补全结果的功耗开销,进一步地,减少了用户等待代码补全的结果的时延,提高了用户体验。
上述主要从各个交互的角度对本申请实施例提供的方案进行了介绍。可以理解的是,各个网元,例如发射端设备或者接收端设备,为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对发射端设备或者接收端设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以使用硬件的形式实现,也可以使用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。下面以使用对应各个功能划分各个功能模块为例进行说明。
应理解,本申请实施例中的具体的例子只是为了帮助本领域技术人员更好地理解本申请实施例,而非限制本申请实施例的范围。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
以上,结合图2详细说明了本申请实施例提供的方法。以下,结合图3至图4详细说明本申请实施例提供的装置。应理解,装置实施例的描述与方法实施例的描述相互对应,因此,未详细描述的内容可以参见上文方法实施例,为了简洁,这里不再赘述。
图3示出了本申请实施例的代码补全的装置300的示意性框图。
应理解,该装置300可以对应于图1所示的系统中的代码补全装置110。该装置300,包括收发模块310和处理模块320。
可以理解的是,该收发模块310可以是图1所示的系统中补全算法选择模块111的接收接口,或者是补全结果返回模块114的输出接口。或者该收发模块310也可以是在该代码补全装置110的单独的收发模块,本申请对此不进行限定。
可以理解的是,该处理模块320可以是图1所示的系统中的补全算法选择模块111、代码补全算法概率预测模块112或代码补全算法库113中的至少一项。
该收发模块310,用于接收来自代码补全客户端的代码补全请求,该代码补全请求包括目标待补全代码片段、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的待补全位置;
该处理模块320(例如,代码补全算法概率预测模块112中的前缀词提取单元),用于根据该目标待补全代码片段和该目标待补全代码片段的待补全位置,确定该目标待补全代码片段的前缀词;
该处理模块320(例如,代码补全算法概率预测模块112中的概率预测单元),还用于根据概率预测模型、该目标待补全代码片段的编程语言类型和该目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率,该潜在应用概率是指采用该每一种代码补全算法对该代码补全请求进行计算得到的潜在补全代码被用户采用的概率;
该处理模块320(例如,补全算法选择模块111和代码补全算法库113),还用于根据该每一种代码补全算法的潜在应用概率,确定该目标待补全代码片段的补全结果;
该收发模块310,还用于向该代码补全客户端发送该目标待补全代码片段的补全结果。
可选地,该处理模块320具体用于:
根据该每一种代码补全算法的潜在应用概率,从该多种代码补全算法中选择目标代码补全算法;
根据该目标代码补全算法,确定该目标待补全代码片段的补全结果,该补全结果包括补全代码。
可选地,该目标代码补全算法包括该多种代码补全算法中的部分代码补全算法,其中,该处理模块320具体用于:
根据该部分代码补全算法,确定该部分代码补全算法中的每一种代码补全算法计算得到的潜在补全代码;
合并和/或去重该部分代码补全算法计算得到的补全结果,得到该目标待补全代码片段的潜在补全代码。
可选地,该处理模块320具体用于:
在该每一种代码补全算法的潜在应用概率均低于预设概率阈值的情况下,该目标待补全代码片段的补全结果为空。
可选地,该处理模块320(例如,代码补全算法概率预测模块112中的概率预测模型生成单元),还用于根据所述多种代码补全算法和代码库中的一个或多个代码文件生成所述概率预测模型。
可选地,该处理模块320(例如,代码补全算法概率预测模块112中的概率预测模型生成单元)具体用于:
从代码库中的一个或多个代码文件采样多个待补全位置;
根据所述第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率;
根据所述多个待补全位置中的第一待补全位置,确定所述第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词;
根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率,生成所述概率预测模型,所述概率预测模型包括一个或多个映射关系,所述一个或多个映射关系包括所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率的映射关系。
可选地,该处理模块320(例如,代码补全算法概率预测模块112中的概率预测模型生成单元)具体用于:
根据所述第一代码文件的编程语言类型、所述第一待补全位置、所述第一代码文件中的待补全代码片段,确定第一代码补全算法计算得到的第一潜在补全代码;
根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率。
可选地,该处理模块320,还用于根据该第一代码文件中的待补全代码片段,确定该第一代码文件中的待补全代码片段的描述信息;
其中,该处理模块320具体用于:
根据该第一代码文件的编程语言类型、该第一代码文件中的待补全代码片段的前缀词、第一代码补全算法、该第一潜在补全代码被用户采用的概率和该第一代码文件中的待补全代码片段的描述信息,生成该概率预测模型。
可选地,该处理模块320,还用于根据该目标待补全代码片段,确定该目标待补全代码片段的描述信息;
其中,该处理模块320具体用于:
根据该目标待补全代码片段的编程语言类型、该目标待补全代码片段的前缀词、该概率预测模型和该目标待补全代码片段的描述信息,确定该每一种代码补全算法的潜在应用概率。
可选地,该描述信息包括待补全位置前的代码长度、当前行首的前S个词或字符、当前行的前M行代码包含的词数量的一致性中的至少一项,S,M均为正整数。
可选地,该处理模块320具体用于:
将该第一潜在补全代码中的匹配长度与该第一代码文件中该第一待补全位置之后的代码长度的比值作为该第一潜在补全代码被用户采用的概率。
可选地,该处理模块320具体用于:
将该目标待补全代码片段的待补全位置从后向前的N个词作为该目标待补全代码片段的前缀词,其中,N为正整数。
图4示出了本申请实施例提供的代码补全的装置400,该装置400可以为图2中所述的代码补全装置。该装置可以采用如图4所示的硬件架构。该装置可以包括处理器410和收发器430,可选地,该装置还可以包括存储器440,该处理器410、收发器430和存储器440通过内部连接通路互相通信。图3中的处理模块320所实现的相关功能可以由处理器410来实现,收发模块310所实现的相关功能可以由处理器410控制收发器430来实现。
可选地,处理器410可以是一个通用中央处理器(central processing unit,CPU),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),专用处理器,或一个或多个用于执行本申请实施例技术方案的集成电路。或者,处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。例如可以是基带处理器、或中央处理器。基带处理器可以用于对通信协议以及通信数据进行处理,中央处理器可以用于对代码补全的装置进行控制,执行软件程序,处理软件程序的数据。
可选地,该处理器410可以包括是一个或多个处理器,例如包括一个或多个中央处理单元(central processing unit,CPU),在处理器是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
该收发器430用于发送和接收数据和/或信号,以及接收数据和/或信号。该收发器可以包括发射器和接收器,发射器用于发送数据和/或信号,接收器用于接收数据和/或信号。
该存储器440包括但不限于是随机存取存储器(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程存储器(erasable programmable readonly memory,EPROM)、只读光盘(compact disc read-only memory,CD-ROM),该存储器440用于存储相关指令及数据。
存储器440用于存储程序代码和数据,可以为单独的器件或集成在处理器410中。
具体地,所述处理器410用于控制收发器与媒体服务器或广告管理服务器进行信息传输。具体可参见方法实施例中的描述,在此不再赘述。
在具体实现中,作为一种实施例,装置400还可以包括输出设备和输入设备。输出设备和处理器410通信,可以以多种方式来显示信息。例如,输出设备可以是液晶显示器(liquid crystal display,LCD),发光二级管(light emitting diode,LED)显示设备,阴极射线管(cathode ray tube,CRT)显示设备,或投影仪(projector)等。输入设备和处理器601通信,可以以多种方式接收用户的输入。例如,输入设备可以是鼠标、键盘、触摸屏设备或传感设备等。
可以理解的是,图4仅仅示出了代码补全的装置的简化设计。在实际应用中,该装置还可以分别包含必要的其他元件,包含但不限于任意数量的收发器、处理器、控制器、存储器等,而所有可以实现本申请的代码补全装置都在本申请的保护范围之内。
在一种可能的设计中,该装置400可以是芯片,例如可以为可用于代码补全装置中的通信芯片,用于实现代码补全装置中处理器410的相关功能。该芯片可以为实现相关功能的现场可编程门阵列,专用集成芯片,系统芯片,中央处理器,网络处理器,数字信号处理电路,微控制器,还可以采用可编程控制器或其他集成芯片。该芯片中,可选的可以包括一个或多个存储器,用于存储程序代码,当所述代码被执行时,使得处理器实现相应的功能。
本申请实施例还提供一种装置,该装置可以是代码补全装置,也可以是电路。该装置可以用于执行上述方法实施例中由代码补全装置所执行的动作。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
应理解,处理器可以是集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
可以理解,本申请实施例中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchronous link DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本申请的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本说明书中使用的术语“部件”、“模块”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,部件可以是但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过图示,在计算设备上运行的应用和计算设备都可以是部件。一个或多个部件可驻留在进程和/或执行线程中,部件可位于一个计算机上和/或分布在2个或更多个计算机之间。此外,这些部件可从在上面存储有各种数据结构的各种计算机可读介质执行。部件可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一部件交互的二个部件的数据,例如通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
还应理解,本文中涉及的第一、第二以及各种数字编号仅为描述方便进行的区分,并不用来限制本申请实施例的范围。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。其中,单独存在A或B,并不限定A或B的数量。以单独存在A为例,可以理解为具有一个或多个A。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (27)
1.一种代码补全的方法,其特征在于,包括:
接收来自代码补全客户端的代码补全请求,所述代码补全请求包括目标待补全代码片段、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的待补全位置;
根据所述目标待补全代码片段和所述目标待补全代码片段的待补全位置,确定所述目标待补全代码片段的前缀词;
根据概率预测模型、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率,所述潜在应用概率是指采用所述每一种代码补全算法对所述代码补全请求进行计算得到的潜在补全代码被用户采用的概率;
根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果;
向所述代码补全客户端发送所述目标待补全代码片段的补全结果。
2.根据权利要求1所述的方法,其特征在于,所述根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果包括:
根据所述每一种代码补全算法的潜在应用概率,从所述多种代码补全算法中选择目标代码补全算法;
根据所述目标代码补全算法,确定所述目标待补全代码片段的补全结果,所述补全结果包括补全代码。
3.根据权利要求2所述的方法,其特征在于,所述目标代码补全算法包括所述多种代码补全算法中的部分代码补全算法,其中,所述根据所述目标代码补全算法,确定目标待补全代码片段的补全结果包括:
根据所述部分代码补全算法,确定所述部分代码补全算法中的每一种代码补全算法计算得到的潜在补全代码;
合并和/或去重所述部分代码补全算法计算得到的潜在补全代码,得到所述目标待补全代码片段的补全结果。
4.根据权利要求1所述的方法,其特征在于,所述根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果包括:
在所述每一种代码补全算法的潜在应用概率均低于预设概率阈值的情况下,所述目标待补全代码片段的补全结果为空。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述方法还包括:
根据所述多种代码补全算法和代码库中的一个或多个代码文件生成所述概率预测模型。
6.根据权利要求5所述的方法,其特征在于,所述根据所述多种代码补全算法、代码库中的一个或多个代码文件生成所述概率预测模型的方法包括:
从代码库中的一个或多个代码文件采样多个待补全位置;
根据所述多个待补全位置中的第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率;
根据所述第一待补全位置,确定所述第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词;
根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率,生成所述概率预测模型,所述概率预测模型包括一个或多个映射关系,所述一个或多个映射关系包括所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率的映射关系。
7.根据权利要求6所述的方法,其特征在于,所述其特征在于,所述根据所述第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率包括:
根据所述第一代码文件的编程语言类型、所述第一待补全位置、所述第一代码文件中的待补全代码片段,确定第一代码补全算法计算得到的第一潜在补全代码;
根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率包括:
将所述第一潜在补全代码中的匹配长度与所述第一代码文件中所述第一待补全位置之后的代码长度的比值作为所述第一潜在补全代码被用户采用的概率。
9.根据权利要求6至8中任一项所述的方法,其特征在于,所述方法还包括:
根据所述第一代码文件中的待补全代码片段,确定所述第一代码文件中的待补全代码片段的描述信息;
其中,所述根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率,生成所述概率预测模型包括:
根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、第一代码补全算法、所述第一潜在补全代码被用户采用的概率和所述第一代码文件中的待补全代码片段的描述信息,生成所述概率预测模型。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
根据所述目标待补全代码片段,确定所述目标待补全代码片段的描述信息;
其中,所述根据概率预测模型、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率包括:
根据所述目标待补全代码片段的编程语言类型、所述目标待补全代码片段的前缀词、所述概率预测模型和所述目标待补全代码片段的描述信息,确定所述每一种代码补全算法的潜在应用概率。
11.根据权利要求9或10所述的方法,其特征在于,所述描述信息包括待补全位置前的代码长度、当前行首的前S个词或字符、当前行的前M行代码包含的词数量的一致性中的至少一项,S,M均为正整数。
12.根据权利要求1至11中任一项所述的方法,其特征在于,所述根据所述目标待补全代码片段和所述目标待补全代码片段的待补全位置,确定所述目标待补全代码片段的前缀词包括:
将所述目标待补全代码片段的待补全位置从后向前的N个词作为所述目标待补全代码片段的前缀词,其中,N为正整数。
13.一种代码补全的装置,其特征在于,包括:
收发模块,用于接收来自代码补全客户端的代码补全请求,所述代码补全请求包括目标待补全代码片段、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的待补全位置;
处理模块,用于根据所述目标待补全代码片段和所述目标待补全代码片段的待补全位置,确定所述目标待补全代码片段的前缀词;
所述处理模块,还用于根据概率预测模型、所述目标待补全代码片段的编程语言类型和所述目标待补全代码片段的前缀词,确定多种代码补全算法中的每一种代码补全算法的潜在应用概率,所述潜在应用概率是指采用所述每一种代码补全算法对所述代码补全请求进行计算得到的潜在补全代码被用户采用的概率;
所述处理模块,还用于根据所述每一种代码补全算法的潜在应用概率,确定所述目标待补全代码片段的补全结果;
所述收发模块,还用于向所述代码补全客户端发送所述目标待补全代码片段的补全结果。
14.根据权利要求13所述的装置,其特征在于,所述处理模块具体用于:
根据所述每一种代码补全算法的潜在应用概率,从所述多种代码补全算法中选择目标代码补全算法;
根据所述目标代码补全算法,确定所述目标待补全代码片段的补全结果,所述补全结果包括补全代码。
15.根据权利要求14所述的装置,其特征在于,所述目标代码补全算法包括所述多种代码补全算法中的部分代码补全算法,其中,所述处理模块具体用于:
根据所述部分代码补全算法,确定所述部分代码补全算法中的每一种代码补全算法计算得到的潜在补全代码;
合并和/或去重所述部分代码补全算法计算得到的潜在补全代码,得到所述目标待补全代码片段的补全结果。
16.根据权利要求13所述的装置,其特征在于,所述处理模块具体用于:
在所述每一种代码补全算法的潜在应用概率均低于预设概率阈值的情况下,所述目标待补全代码片段的补全结果为空。
17.根据权利要求13至16中任一项所述的装置,其特征在于,所述处理模块,还用于根据所述多种代码补全算法和代码库中的一个或多个代码文件生成所述概率预测模型。
18.根据权利要求17所述的装置,其特征在于,所述处理模块具体用于:
从代码库中的一个或多个代码文件采样多个待补全位置;
根据所述多个待补全位置中的第一待补全位置、所述第一待补全位置对应的第一代码文件,确定第一代码补全算法计算得到的第一潜在补全代码被用户采用的概率;
根据所述第一待补全位置,确定所述第一待补全位置对应的第一代码文件中的待补全代码片段的前缀词;
根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率,生成所述概率预测模型,所述概率预测模型包括一个或多个映射关系,所述一个或多个映射关系包括所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、所述第一代码补全算法和所述第一潜在补全代码被用户采用的概率的映射关系。
19.根据权利要求18所述的装置,其特征在于,所述其特征在于,所述处理模块具体用于:
根据所述第一代码文件的编程语言类型、所述第一待补全位置、所述第一代码文件中的待补全代码片段,确定第一代码补全算法计算得到的第一潜在补全代码;
根据所述第一代码文件中的所述第一待补全位置之后的代码和所述第一潜在补全代码,确定所述第一潜在补全代码被用户采用的概率。
20.根据权利要求19所述的装置,其特征在于,所述处理模块具体用于:
将所述第一潜在补全代码中的匹配长度与所述第一代码文件中所述第一待补全位置之后的代码长度的比值作为所述第一潜在补全代码被用户采用的概率。
21.根据权利要求18至20中任一项所述的装置,其特征在于,所述处理模块,还用于根据所述第一代码文件中的待补全代码片段,确定所述第一代码文件中的待补全代码片段的描述信息;
其中,所述处理模块具体用于:
根据所述第一代码文件的编程语言类型、所述第一代码文件中的待补全代码片段的前缀词、第一代码补全算法、所述第一潜在补全代码被用户采用的概率和所述第一代码文件中的待补全代码片段的描述信息,生成所述概率预测模型。
22.根据权利要求21所述的装置,其特征在于,所述处理模块,还用于根据所述目标待补全代码片段,确定所述目标待补全代码片段的描述信息;
其中,所述处理模块具体用于:
根据所述目标待补全代码片段的编程语言类型、所述目标待补全代码片段的前缀词、所述概率预测模型和所述目标待补全代码片段的描述信息,确定所述每一种代码补全算法的潜在应用概率。
23.根据权利要求21或22所述的装置,其特征在于,所述描述信息包括待补全位置前的代码长度、当前行首的前S个词或字符、当前行的前M行代码包含的词数量的一致性中的至少一项,S,M均为正整数。
24.根据权利要求13至23中任一项所述的装置,其特征在于,所述处理模块具体用于:
将所述目标待补全代码片段的待补全位置从后向前的N个词作为所述目标待补全代码片段的前缀词,其中,N为正整数。
25.一种系统,其特征在于,所述系统包括:如权利要求13-24中任一项所述的代码补全的装置和代码补全客户端。
26.一种代码补全的装置,其特征在于,包括处理器和存储器,所述存储器用于存储程序指令,所述处理器用于调用所述程序指令来执行权利要求1至12中任一项所述的方法。
27.一种计算机可读存储介质,其特征在于,所述计算机可读介质存储用于设备执行的程序代码,所述程序代码包括用于执行如权利要求1至12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607745.XA CN113867710A (zh) | 2020-06-30 | 2020-06-30 | 代码补全的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607745.XA CN113867710A (zh) | 2020-06-30 | 2020-06-30 | 代码补全的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113867710A true CN113867710A (zh) | 2021-12-31 |
Family
ID=78980868
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010607745.XA Pending CN113867710A (zh) | 2020-06-30 | 2020-06-30 | 代码补全的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113867710A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024027279A1 (zh) * | 2022-07-30 | 2024-02-08 | 华为技术有限公司 | 代码补全方法、装置及设备 |
CN117648079A (zh) * | 2024-01-29 | 2024-03-05 | 浙江阿里巴巴机器人有限公司 | 任务处理、代码补全、代码问答及任务处理模型训练方法 |
-
2020
- 2020-06-30 CN CN202010607745.XA patent/CN113867710A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024027279A1 (zh) * | 2022-07-30 | 2024-02-08 | 华为技术有限公司 | 代码补全方法、装置及设备 |
CN117648079A (zh) * | 2024-01-29 | 2024-03-05 | 浙江阿里巴巴机器人有限公司 | 任务处理、代码补全、代码问答及任务处理模型训练方法 |
CN117648079B (zh) * | 2024-01-29 | 2024-05-14 | 浙江阿里巴巴机器人有限公司 | 任务处理、代码补全、代码问答及任务处理模型训练方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399104B (zh) | 数据存储方法、数据存储装置、电子设备、存储介质 | |
EP3916630A1 (en) | Method and apparatus for identifying video | |
CN111247518B (zh) | 用于数据库分片的方法和系统 | |
CN110879854B (zh) | 使用超集树数据结构搜索数据 | |
US9524318B2 (en) | Minimizing result set size when converting from asymmetric to symmetric requests | |
CN108984553B (zh) | 缓存方法和装置 | |
CN111090628A (zh) | 一种数据处理方法、装置、存储介质及电子设备 | |
CN110209348B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN113867710A (zh) | 代码补全的方法和装置 | |
US11109085B2 (en) | Utilizing one hash permutation and populated-value-slot-based densification for generating audience segment trait recommendations | |
CN114817651B (zh) | 数据存储方法、数据查询方法、装置和设备 | |
CN107391528B (zh) | 前端组件依赖信息搜索方法及设备 | |
JP2020098593A (ja) | 列状データの不均一なページネーション | |
US11403017B2 (en) | Data compression method, electronic device and computer program product | |
CN114003818A (zh) | 页面推荐方法、装置、服务器及存储介质 | |
CN113687825A (zh) | 一种软件模块的构建方法、装置、设备及存储介质 | |
CN107643906B (zh) | 数据处理方法及装置 | |
CN115904240A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN114637499B (zh) | 可视化组件处理方法、装置、设备及介质 | |
CN115186738A (zh) | 模型训练方法、装置和存储介质 | |
CN115292008A (zh) | 用于分布式系统的事务处理方法、装置、设备及介质 | |
CN109308299B (zh) | 用于搜索信息的方法和装置 | |
CN113934894A (zh) | 基于指标树的数据显示方法、终端设备 | |
CN110647331A (zh) | 开发工具的获取方法及装置、存储介质、电子设备 | |
CN117271840B (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 |