CN113900635A - 一种代码推荐方法及装置 - Google Patents
一种代码推荐方法及装置 Download PDFInfo
- Publication number
- CN113900635A CN113900635A CN202010642143.8A CN202010642143A CN113900635A CN 113900635 A CN113900635 A CN 113900635A CN 202010642143 A CN202010642143 A CN 202010642143A CN 113900635 A CN113900635 A CN 113900635A
- Authority
- CN
- China
- Prior art keywords
- word
- words
- code
- user
- prompt
- 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 68
- 230000011218 segmentation Effects 0.000 claims description 81
- 238000012163 sequencing technique Methods 0.000 claims description 6
- 238000012216 screening Methods 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 abstract description 98
- 238000010606 normalization Methods 0.000 abstract description 21
- 238000012423 maintenance Methods 0.000 abstract description 8
- 230000018109 developmental process Effects 0.000 description 106
- 230000008676 import Effects 0.000 description 29
- 230000008569 process Effects 0.000 description 21
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 241001669573 Galeorhinus galeus Species 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/34—Graphical or visual programming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/02—Input arrangements using manually operated switches, e.g. using keyboards or dials
- G06F3/023—Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
- G06F3/0233—Character input methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Machine Translation (AREA)
Abstract
本申请提供了一种代码推荐方法及装置。本申请可以可以实现将不同的用户或同一用户为同一软件项目开发的代码的语句风格、命名风格以及输入规范性等统一,方便后期维护,降低了后期维护的人工成本。另外,本申请可以自动根据为开发软件项目已输入的代码向用户推荐提示词,以使用户不需要花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,用户只需要按照推荐的提示词在开发平台中的当前输入的实时代码之后继续输入代码即可完成开发软件项目。由于省去了花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,从而可以降低用户的工作负担,以及,提高用户的开发效率。
Description
技术领域
本申请涉及互联网领域,特别涉及一种代码推荐方法及装置。
背景技术
当前,在开发较大规模的软件项目时,往往需要软件开发团队配合开发,开发团队中的不同的开发人员开发软件项目中的不同内容。其中,不同的开发人员在输入计算机程序代码时的输入语句风格、命名风格以及输入规范性等不尽相同。
在软件开发团队中,有时候可能会出现人员流动的情况,在老的开发人员离开软件开发团队之后,则就会有新的开发人员进入到软件开发团队中。
但是,新的开发人员在接手老的开发人员的工作之后,如果二者之间的输入语句风格、命名风格以及输入规范性等不相同,则新的开发人员首先需要花时间熟悉老的开发人员输入的内容的语句风格、命名风格以及输入规范性等,然后再基于老的开发人员输入的内容的语句风格、命名风格以及输入规范性等继续开发软件项目。
然而,这样会给新的开发人员带来较大的工作负担,且降低了开发软件项目的效率。
发明内容
为了提高开发软件项目的效率,本申请示出了一种代码推荐方法及装置。
第一方面,本申请示出了一种代码推荐方法,包括:
接收用户输入的代码,并按照预设规则对所述代码进行切分;
在切分结果中获得所述用户的光标位置所在行的行末词;
根据所述光标位置所在行的行末词,为用户推荐提示词。
在一个可选的实现方式中,所述方法还包括:
为所述切分结果建立实时词库;
则根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
在所述实时词库中查找提示权重与所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
在预先建立的单词索引表中查找提示权重与所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
获得所述光标位置所在行的分词结果;
在预先建立的ngram单词索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
获得所述光标位置所在行的分词结果;
在预先建立的ngram整行索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述方法还包括:
如果有多个提示词,则对所述多个提示词进行筛选和排序;
则所述为用户推荐提示词,包括:
为用户推荐排序后的至少两个提示词。
在一个可选的实现方式中,所述方法还包括:
获得历史代码;
对所述历史代码进行切分,得到历史代码的切分结果;
根据所述历史代码的切分结果建立代码用词词典;
根据所述代码用词词典建立所述单词索引表。
在一个可选的实现方式中,所述根据所述代码用词词典建立所述单词索引表,包括:
根据所述代码用词词典中的词的词频,计算所述词的提示权重;
根据所述词的提示权重建立所述单词索引表。
在一个可选的实现方式中,所述方法还包括:
获得历史代码;
对所述历史代码进行切分,得到历史代码的切分结果;
根据所述历史代码的切分结果建立ngram单词词表;
根据所述ngram单词词表建立所述ngram单词索引表和/或所述ngram整行索引表。
第二方面,本申请示出了一种代码推荐装置,包括:
接收模块,用于接收用户输入的代码,并按照预设规则对所述代码进行切分;
获得模块,用于在切分结果中获得所述用户的光标位置所在行的行末词;
推荐模块,用于根据所述光标位置所在行的行末词,为用户推荐提示词。
在一个可选的实现方式中,所述装置还包括:
建立模块,用于为所述切分结果建立实时词库;
所述推荐模块包括:
第一查找单元,用于在所述实时词库中查找提示权重与所述行末词相匹配的词,作为提示词;
第一推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第二查找单元,用于在预先建立的单词索引表中查找提示权重与所述行末词相匹配的词,作为提示词;
第二推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第一获得单元,用于获得所述光标位置所在行的分词结果;
第三查找单元,用于在预先建立的ngram单词索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第三推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第二获得单元,用于获得所述光标位置所在行的分词结果;
第四查找单元,用于在预先建立的ngram整行索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第四推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块,包括:
排序单元,用于如果有多个提示词,则对所述多个提示词进行筛选和排序;
第五推荐单元,用于为用户推荐排序后的至少两个提示词。
在一个可选的实现方式中,所述推荐模块还包括:
第三获得单元,用于获得历史代码;
第一切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第一建立单元,用于根据所述历史代码的切分结果建立代码用词词典;
第二建立单元,用于根据所述代码用词词典建立所述单词索引表。
在一个可选的实现方式中,所述第二建立单元包括:
计算子单元,用于根据所述代码用词词典中的词的词频,计算所述词的提示权重;
建立子单元,用于根据所述词的提示权重建立所述单词索引表。
在一个可选的实现方式中,所述推荐模块还包括:
第四获得单元,用于获得历史代码;
第二切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第三建立单元,用于根据所述历史代码的切分结果建立ngram单词词表;
第四建立单元,用于根据所述ngram单词词表建立所述ngram单词索引表和/或所述ngram整行索引表。
第三方面,本申请示出了一种电子设备,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如第一方面所述的代码推荐方法。
第四方面,本申请示出了一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如第一方面所述的代码推荐方法。
与现有技术相比,本申请实施例包括以下优点:
在本申请中,接收用户输入的代码,并按照预设规则对代码进行切分;在切分结果中获得用户的光标位置所在行的行末词;根据光标位置所在行的行末词,为用户推荐提示词。
其中,用户输入的代码可以包括用户为开发软件项目在开发平台中当前输入的实时代码,
根据用户输入的代码预测的提示词可以是实时代码和/或历史代码中已经出现过的词,历史代码包括在用户输入的实时代码之前用户或其他用户为开发软件项目已输入的历史代码。其中,用户为开发软件项目在开发平台中当前输入的实时代码中的最后一个词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,和/或,当前输入的实时代码中的最后M个相邻的词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,M为大于或等于2的整数。
基于输入代码的习惯,在能够满足软件项目的功能的情况下,用户可以选择提示词作为在当前输入的实时代码之后实际需要输入的代码,而可以不手动输入字符上与提示词不同、但功能上与提示词相同的词,从而可以使得用户在当前输入的实时代码之后输入的代码的语句风格、命名风格以及输入规范性等与实时代码和/或历史代码的语句风格、命名风格以及输入规范性等相同。
从而可以实现将不同的用户或同一用户为同一软件项目开发的代码的语句风格、命名风格以及输入规范性等统一,方便后期维护,降低了后期维护的人工成本。
另外,本申请可以自动根据为开发软件项目已输入的代码向用户推荐提示词,以使用户不需要花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,用户只需要按照推荐的提示词在开发平台中的当前输入的实时代码之后继续输入代码即可完成开发软件项目。
由于省去了花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,从而可以降低用户的工作负担,以及,提高用户的开发效率。
附图说明
图1是本申请一示例性实施例示出的一种代码推荐方法的流程示意图。
图2是本申请一示例性实施例示出的一种代码推荐装置的结构框图。
图3是本申请一实施例提供的装置的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请一种代码推荐方法的流程示意图,该方法应用于电子设备中,该方法可以包括:
在步骤S101中,接收用户输入的代码,并按照预设规则对代码进行切分。
在本申请中,电子设备可以在用户输入的代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在用户输入的代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为用户输入的代码中包括的多个词。
在本申请中,用户输入的代码可以包括用户为开发软件项目在开发平台中当前输入的实时代码。
其中,用户输入的代码可以为基于同一个计算机程序语言输入的代码。
在本申请中,在开发较大规模的软件项目时,往往需要由多个用户组成的开发团队一起配合开发该软件项目,开发团队中的不同的用户开发软件项目中的不同内容。
其中一个用户可以开发软件项目中的部分内容,为了开发软件项目中的该部分内容,用户可以在电子设备启动开发平台,然后在开发平台中输入用于开发该部分内容的代码。
其中,在用户在开发平台中输入用于开发软件项目中的该部分内容的代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
其中,用户在开发平台中输入用于开发该部分内容的代码的过程中,是在开发平台中串行地输入一个个词,在本申请中,在用户在开发平台中串行地输入一个个词的过程中,在任意时刻时,用户为开发软件项目而在开发平台中当前实时输入的全部词即为实时代码。例如,用于开发用户当前需要开发的该部分内容的代码可以看作实时代码。
在用户需要输入的下一个词时,为了能够使得用户输入的下一个词的语句风格、命名风格以及输入规范性等与历史代码的语句风格、命名风格以及输入规范性等相同,且与实时代码的语句风格、命名风格以及输入规范性等相同,在本申请中,在用户为开发软件项目而在开发平台中输入的代码的过程中,电子设备可以获取用户为开发软件项目而在开发平台中输入的代码,然后按照预设规则对用户输入的代码进行切分,再执行步骤S102。
在步骤S102中,在切分结果中获得用户的光标位置所在行的行末词。
在步骤S103中,根据光标位置所在行的行末词,为用户推荐提示词。
在本申请中,提示词可以包括一个词,或者,可以包括连续的至少两个词。
具体如何获取提示词可以参见之后所示的实施例,在此不做详述。
在本申请中,可以在开发平台中显示提示词,以供用户查看提示词,和/或,可以通过语音播报提示词,以供用户感知提示词。
在一个可能的实施例中,提示词可能为多个,但是用户实际上需要输入的往往是多个提示词中的一个,这样,可以确定各个提示词被用户本次选择使用的可能性,然后按照用户本次选择使用的可能性由高至低的顺序,向用户推荐各个提示词,例如,按照用户本次选择使用的可能性由高至低的顺序排序显示各个提示词等,以使用户可以更加方便地查看并选择需要输入的提示词。
其中,确定各个提示词被用户本次选择使用的可能性的方式具体可以参见之后的实施例,在此不做详述。
在本申请中,接收用户输入的代码,并按照预设规则对代码进行切分;在切分结果中获得用户的光标位置所在行的行末词;根据光标位置所在行的行末词,为用户推荐提示词。
其中,用户输入的代码可以包括用户为开发软件项目在开发平台中当前输入的实时代码。
根据用户输入的代码预测的提示词可以是实时代码和/或历史代码中已经出现过的词,历史代码包括在用户输入的实时代码之前用户或其他用户为开发软件项目已输入的历史代码。其中,用户为开发软件项目在开发平台中当前输入的实时代码中的最后一个词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,和/或,当前输入的实时代码中的最后M个相邻的词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,M为大于或等于2的整数。
基于输入代码的习惯,在能够满足软件项目的功能的情况下,用户可以选择提示词作为在当前输入的实时代码之后实际需要输入的代码,而可以不手动输入字符上与提示词不同、但功能上与提示词相同的词,从而可以使得用户在当前输入的实时代码之后输入的代码的语句风格、命名风格以及输入规范性等与实时代码和/或历史代码的语句风格、命名风格以及输入规范性等相同。
从而可以实现将不同的用户或同一用户为同一软件项目开发的代码的语句风格、命名风格以及输入规范性等统一,方便后期维护,降低了后期维护的人工成本。
另外,本申请可以自动根据为开发软件项目已输入的代码向用户推荐提示词,以使用户不需要花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,用户只需要按照推荐的提示词在开发平台中的当前输入的实时代码之后继续输入代码即可完成开发软件项目。
由于省去了花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,从而可以降低用户的工作负担,以及,提高用户的开发效率。
其中,如果是在开发平台中显示提示词,则在用户看到提示词之后,如果提示词为用户之后实际需要输入的词,则用户可以根据看到的提示词在开发平台中串行地手动输入提示词中的一个个字符,以实现在开发平台中输入提示词。
但是,有时候可能会由于疏忽而导致输入的字符有误,导致输入的提示词有误,后期在调试时会出现BUG,然后需要重新人工检测代码中的各个词,直至将有误的词修改正确为止,但是这样会降低开发软件项目的效率。
因此,为了提高开发软件的效率,需要避免出现用户输入的提示词中的字符有误的情况,为了避免出现用户输入的提示词中的字符有误的情况,则可以避免用户手动收入提示词中的字符,而可以直接选择推荐的提示词。
例如,用户可以在开发平台中输入对提示词的选择操作,电子设备接收用户对提示词的选择操作,然后可以根据该选择操作在开发平台中输入提示词,例如,在开发平台中的当前输入的实时代码之后自动输入提示词,如此不需要用户通过串行地手动输入一个个字符来实现在开发平台中输入提示词,从而可以提高用户在开发平台中输入代码的效率,只要推荐的提示词未出现错误,则在开发平台中输入的提示词就不会出现错误,从而可以避免后期调试时出现BUG,也就不需要重新人工检测代码,进而可以提高开发软件项目的效率。
在一个实施例中,用户输入的代码包括用户为开发软件项目在开发平台中当前输入的实时代码。
用户在开发平台中输入代码时,输入的代码往往是由多个独立的词组成的,例如,包括英文单词、数字以及英文字母以及特殊符号等,特殊符号包括空格、等于号、大于号、小于号、双引号、单引号以及括号等开发平台支持的符号等。
例如,假设用户需要在开发平台中输入一段代码:“const a=abcdefg”,其中,在上述代码中,“const”、“”、“a”、“=”以及“abcdefg”均为独立的词,其中,“”代表“const”与“a”之间的空格。
假设用户在开发平台中当前输入的实时代码包括“const a=abc”,此时,已输入完毕的词包括“const”、“”、“a”以及“=”。最后一个词“abc”为未输入完毕的词,也即,“abc”为实时代码中的未输入完毕的词。
如此,在本申请一个实施例中,在按照预设规则对代码进行切分之后,可以实时地为切分结果建立实时词库。
这样,在根据光标位置所在行的行末词为用户推荐提示词时,可以在实时词库中查找提示权重与行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词。
其中,为切分结果建立词库的过程,包括:
11)、对用户当前输入的实时代码分词,得到用户当前输入的实时代码中包括的多个词。
在本申请中,电子设备可以在用户当前输入的实时代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在用户当前输入的实时代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为当前输入的实时代码中包括的多个词。
12)、用户当前输入的实时代码中包括的多个词建立实时词库。
在本申请一个实施例中,可以将得到的多个词去重复,对于去重复之后的任意一个词,统计该词在用户当前输入的实时代码中的词频,然后根据该词在用户当前输入的实时代码中的词频,计算该词在用户当前输入的实时代码中的提示权重,例如,可以统计去重复后的各个词在用户当前输入的实时代码中的词频的总和,然后计算该词在用户当前输入的实时代码中的词频与去重复后的各个词在用户当前输入的实时代码中的词频的总和之间的比值,得到该词在用户当前输入的实时代码中的提示权重。然后将该词与该词在用户当前输入的实时代码中的提示权重组成对应表项,并存储在词与提示权重之间的第一对应关系中。对于去重复之后的其他每一个词,同样执行上述操作。
第一对应关系即为实时词库。其中,实时词库中的词包括用户当前输入的实时代码中的词。
另外,在用户实时输入代码的过程中,可以根据用户实时输入的新词更新第一对应关系。
例如,在用户实时输入代码的过程中,每当用户实时输入一个新词,则电子设备就会在第一对应关系中,实时更新用户实时输入的新词在用户当前输入的实时代码中的提示权重。
另外,在实时词库中查找提示权重与行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词,包括:
21)、在实时词库中,查找包括行末词的词。
22)、在查找到的词为一个的情况下,可以为用户推荐查找到的词。
例如,假设实时词库中的词包括:“const”“a”以及“abcdefg”等。用户当前输入的实时代码中的行末词为“abc”,则可以在“const”“a”以及“abcdefg”等中查找包括行末词“abc”的词,且查找到一个词:“abcdefg”。
如此,可以将查找到的词“abcdefg”作为提示词,之后可以向用户推荐提示词“abcdefg”,以供用户选择使用。
23)、在查找到的词为多个的情况下,可以根据各个词在用户当前输入的实时代码中的提示权重由大至小的顺序,为用户推荐查找到的词。
有时候在实时词库中的包括行末词的词可能为多个。
例如,假设实时词库中包括:“const”、“a”、“abcd”、“abcxed”以及“abcdefg”等,用户当前输入的实时代码中的行末词为“abc”,则可以在“const”“a”、“abcd”“abcxed”以及“abcdefg”等中查找包括行末词“abc”的词,且查找到的词为多个,例如:“abcd”、“abcxed”以及“abcdefg”等,如此,可以将“abcd”“abcxed”以及“abcdefg”等作为提示词。
此时,提示词就包括“abcd”、“abcxed”以及“abcdefg”等,之后可以向用户推荐提示词abcd”、“abcxed”以及“abcdefg”等,以供用户选择使用。
然而,在这种情况下,查找到的不同的词被用户本次选择使用的可能性不同。
其中,查找到的不同的词在用户当前输入的实时代码中的提示权重不同。
在查找到的词在用户当前输入的实时代码中的词频越高时,查找到的词在用户当前输入的实时代码中的提示权重越高,查找到的词是用户在输入代码时所需输入的词的可能性越大,也即,被用户本次选择使用的可能性越大。
在查找到的词在用户当前输入的实时代码中的词频越低时,查找到的词在用户当前输入的实时代码中的提示权重越低,查找到的词是用户在输入代码时所需输入的词的可能性越小,也即,被用户本次选择使用的可能性越小。
因此,为了更加方便用户查看并选择需要输入的词,在本申请另一实施例中,23)中的根据各个词在用户当前输入的实时代码中的提示权重由大至小的顺序,为用户推荐查找到的词,包括:
31)、获取查找到的多个词分别在当前输入的实时代码中的提示权重。
在本申请中,对于查找到多个词中的任意一个词,可以在实时词库中,也即,可以在词与提示权重之间的第一对应关系中,查找与该词相对应的提示权重,并作为该词在用户当前输入的实时代码中的提示权重。对于查找到的多个词中的其他每一个词,同样执行上述操作。如此得到查找到的多个词分别在用户当前输入的实时代码中的提示权重。
32)、至少根据提示权重对查找到的多个词排序。
在本申请一个实施例中,可以按照在用户当前输入的实时代码中的提示权重由高至低的顺序对查找到的多个词排序。
在本申请另一个实施例中,除了根据在用户当前输入的实时代码中的提示权重以外,还可以结合查找到的多个词分别在用户当前输入的实时代码中最后一次的出现位置等来对查找到的多个词排序。
其中,查找到的每一个词在用户当前输入的实时代码中最后一次的出现位置不同。
在用户当前输入的实时代码中的最后一次的出现位置距离行末词越近的查找到的词是用户之后所需输入的代码的可能性越大,也即,被用户本次选择使用的可能性越大。
在用户当前输入的实时代码中的最后一次的出现位置距离行末词越远的查找到的词是用户之后所需输入的代码的可能性越小,也即,被用户本次选择使用的可能性越小。
当然,本申请也可以根据查找到的多个词分别在用户当前输入的实时代码中的提示权重以及查找到的多个词的其他特征结合起来对查找到的多个词排序,本申请对具体的排序方式不做限定。
33)、按照排序后的顺序显示查找到的至少部分词。
在本申请中,有时候查找到的词较多,然而,通常情况下,用户需要输入的词往往位于排序后的前几个词中。
如果在开发平台中显示了查找到的所有词,则开发平台中很多的区域就会被用户不需要使用的词占据,有时候会影响用户在开发平台中正常输入代码,且会浪费显示资源。
因此,为了避免影响用户正常输入代码以及为了避免浪费显示资源,在本申请另一实施例中,在查找到的多个词的数量大于预设数量的情况下,可以按照排序后的顺序,在多个词中选择topQ个词,然后将选择的topQ个词按照排序后的顺序显示在开发平台中,其中,Q为大于或等于1的整数,Q也可以为预设数量,预设数量包括3、4或5等,本申请对此不做限定。
进一步地,如果用户在开发平台中选择了查找到的多个词中的其中一个词,则电子设备可以在词与提示权重之间的第一对应关系中,增加与选择的这个词相对应的提示权重,以实现更新这个词在用户当前输入的实时代码中的提示权重。
在为用户推荐提示词时,还可以使借助历史代码。其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
用户在开发平台中输入代码时,输入的代码往往是由多个独立的词组成的,例如,包括英文单词、数字以及英文字母以及特殊符号等,特殊符号包括空格、等于号、大于号、小于号、双引号、单引号以及括号等开发平台支持的符号等。
例如,假设用户需要在开发平台中输入一段代码:“const a=abcdefg”,其中,在上述代码中,“const”、“”、“a”、“=”以及“abcdefg”均为独立的词,其中,“”代表“const”与“a”之间的空格。
假设用户在开发平台中当前输入的实时代码包括“const a=abc”,此时,已输入完毕的词包括“const”、“”、“a”以及“=”。最后一个词“abc”为未输入完毕的词,也即,“abc”为实时代码中的未输入完毕的词。
如此,在本申请一个实施例中,事先可以建立单词索引表。
这样,在根据光标位置所在行的行末词为用户推荐提示词时,可以在预先建立的单词索引表中查找提示权重与行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词。
其中,建立单词索引表的过程,包括:
41)、获得历史代码。
其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
42)、对历史代码进行切分,得到历史代码的切分结果。
在本申请中,电子设备可以在历史代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在历史代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为历史代码中包括的多个词。
43)、根据历史代码的切分结果建立代码用词词典。
其中,可以将42)中切分得到的多个词去重复,去重复后的词可以组成用词词典。
44)、根据代码用词词典建立单词索引表。
在本申请一个实施例中,可以根据代码用词词典中的词的词频,计算各个词在历史代码中的提示权重,然后根据各个词在历史代码中的提示权重建立单词索引表。
例如,对于代码用词词典中的任意一个词,统计该词在历史代码中的词频,根据该词在历史代码中的词频,计算该词在历史代码中的提示权重,例如,可以统计代码用词词典中的各个词在历史代码中的词频的总和,然后计算该词在历史代码中的词频与代码用词词典中的各个词在历史代码中的词频的总和之间的比值,得到该词的在历史代码中提示权重。然后将该词与该词在历史代码中的提示权重组成对应表项,并存储在词与提示权重之间的第二对应关系中。对于代码用词词典中的其他每一个词,同样执行上述操作。
第二对应关系即为单词索引表。其中,单词索引表中的词包括历史代码中的词。
另外,也可以在用户实时输入代码的过程中,可以根据用户实时输入的新词更新第二对应关系。
例如,在用户实时输入代码的过程中,每当用户实时输入一个新词,则电子设备就会在第二对应关系中,实时更新用户实时输入的新词在历史代码中的提示权重。
另外,在预先建立的单词索引表中查找提示权重与行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词,包括:
51)、在单词索引表中,查找包括行末词的词。
52)、在查找到的词为一个的情况下,可以为用户推荐查找到的词。
例如,假设单词索引表中的词包括:“const”“a”以及“abcdefg”等。用户当前输入的实时代码中的行末词为“abc”,则可以在“const”“a”以及“abcdefg”等中查找包括行末词“abc”的词,且查找到一个词:“abcdefg”。
如此,可以将查找到的词“abcdefg”作为提示词,之后可以向用户推荐提示词“abcdefg”,以供用户选择使用。
53)、在查找到的词为多个的情况下,可以根据各个词在历史代码中的提示权重由大至小的顺序,为用户推荐查找到的词。
有时候在单词索引表中的包括行末词的词可能为多个。
例如,假设单词索引表中包括:“const”、“a”、“abcd”、“abcxed”以及“abcdefg”等,用户当前输入的实时代码中的行末词为“abc”,则可以在“const”“a”、“abcd”“abcxed”以及“abcdefg”等中查找包括行末词“abc”的词,且查找到的词为多个,例如:“abcd”、“abcxed”以及“abcdefg”等,如此,可以将“abcd”“abcxed”以及“abcdefg”等作为提示词。
此时,提示词就包括“abcd”、“abcxed”以及“abcdefg”等,之后可以向用户推荐提示词abcd”、“abcxed”以及“abcdefg”等,以供用户选择使用。
然而,在这种情况下,查找到的不同的词被用户本次选择使用的可能性不同。
其中,查找到的不同的词在历史代码中的提示权重不同。
在查找到的词在历史代码中的词频越高时,查找到的词在历史代码中的提示权重越高,查找到的词是用户在输入代码时所需输入的词的可能性越大,也即,被用户本次选择使用的可能性越大。
在查找到的词在历史代码中的词频越低时,查找到的词在历史代码中的提示权重越低,的查找到的词是用户在输入代码时所需输入的词的可能性越小,也即,被用户本次选择使用的可能性越小。
因此,为了更加方便用户查看并选择需要输入的词,在本申请另一实施例中,53)中的根据各个词在历史代码中的提示权重由大至小的顺序,为用户推荐查找到的词,包括:
61)、获取查找到的多个词分别在历史代码中的提示权重。
在本申请中,对于查找到多个词中的任意一个词,可以在单词索引表中,也即,可以在词与提示权重之间的第二对应关系中,查找与该词相对应的提示权重,并作为该词在历史代码中的提示权重。对于查找到的多个词中的其他每一个词,同样执行上述操作。如此得到查找到的多个词分别在历史代码中的提示权重。
62)、至少根据提示权重对查找到的多个词排序。
在本申请一个实施例中,可以按照在历史代码中的提示权重由高至低的顺序对查找到的多个词排序。
在本申请另一个实施例中,除了根据在历史代码中的提示权重以外,还可以结合查找到的多个词分别在历史代码中最后一次的出现位置等来对查找到的多个词排序。
其中,查找到的每一个词在历史代码中最后一次的出现位置不同。
在历史代码中的最后一次的出现位置距离行末词越近的查找到的词是用户之后所需输入的代码的可能性越大,也即,被用户本次选择使用的可能性越大。
在历史代码中的最后一次的出现位置距离行末词越远的查找到的词是用户之后所需输入的代码的可能性越小,也即,被用户本次选择使用的可能性越小。
当然,本申请也可以根据查找到的多个词分别在历史代码中的提示权重以及查找到的多个词的其他特征结合起来对查找到的多个词排序,本申请对具体的排序方式不做限定。
63)、按照排序后的顺序显示查找到的至少部分词。
在本申请中,有时候查找到的词较多,然而,通常情况下,用户需要输入的词往往位于排序后的前几个词中。
如果在开发平台中显示了查找到的所有词,则开发平台中很多的区域就会被用户不需要使用的词占据,有时候会影响用户在开发平台中正常输入代码,且会浪费显示资源。
因此,为了避免影响用户正常输入代码以及为了避免浪费显示资源,在本申请另一实施例中,在查找到的多个词的数量大于预设数量的情况下,可以按照排序后的顺序,在多个词中选择topP个词,然后将选择的topP个词按照排序后的顺序显示在开发平台中,其中,P为大于或等于1的整数,P也可以为预设数量,预设数量包括3、4或5等,本申请对此不做限定。
进一步地,如果用户在开发平台中选择了查找到的多个词中的其中一个词,则电子设备可以在词与提示权重之间的第二对应关系中,增加与选择的这个词相对应的提示权重,以实现更新这个词在历史代码中的提示权重。
在为用户推荐提示词时,还可以使借助历史代码。其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
用户在开发平台中输入代码时,输入的代码往往是由多个独立的词组成的,例如,包括英文单词、数字以及英文字母以及特殊符号等,特殊符号包括空格、等于号、大于号、小于号、双引号、单引号以及括号等开发平台支持的符号等。
在一个场景中,用户已经在开发平台中输入实时代码,需要继续输入词汇,以完成输入词汇。
例如,假设用户需要在开发平台中输入一段代码:“import*as React fromreact”,其中,在上述代码中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
假设用户在开发平台中当前输入的实时代码包括“import*as React from”。
如此,在本申请一个实施例中,在对历史代码进行切分,得到历史代码的切分结果之后,可以建立ngram单词索引表。
这样,在根据光标位置所在行的行末词为用户推荐提示词时,可以获得光标位置所在行的分词结果,在预先建立的ngram单词索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词。
其中,建立ngram单词索引表的过程,包括:
71)、获得历史代码。
其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
72)、对历史代码进行切分,得到历史代码的切分结果。
在本申请中,电子设备可以在历史代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在历史代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为历史代码中包括的多个词。
73)、根据历史代码的切分结果建立ngram单词词表。
例如,基于N-gram,将历史代码中的每相邻的N个词组成ngram单词。其中,N为大于1的整数。然后将得到的多个ngram单词组成ngram单词词表。
N可以为大于1的整数,例如N取4,则将历史代码中的每相邻的4个词组成ngram单词。
例如,历史代码包括:“import*as React from react”。
其中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
可以将“import”、“”、“*”以及“”组成ngram单词;将“”、“*”、“”以及“as”组成ngram单词,将“*”、“”、“as”以及“”组成ngram单词,将“”、“as”、“”以及“React”组成ngram单词,将“as”、“”、“React”以及“”组成ngram单词,将“”、“React”、“”以及“from”组成ngram单词,将“React”、“”、“from”以及“”组成ngram单词,将“”、“from”、“”以及“react”组成ngram单词等。
另外,N也可以取两个以上的数,例如N取4和5,则将历史代码中的每相邻的4个词组成ngram单词,以及,将历史代码中的每相邻的5个词组成ngram单词等。
74)、根据ngram单词词表建立ngram单词索引表。
在本申请一个实施例中,对于ngram单词词表中的任意一个ngram单词,可以在历史代码中查找位于该ngram单词之后、且与该ngram单词相邻的词。
然后在历史代码中统计该ngram单词分别与查找到的每一个词先后相邻的频次(出现次数),也即,对于查找到的任意一个词,统计该ngram单词位于该词之前且该ngram单词与该词相邻的情况在第二代码中的频次,然后可以根据该频次获取该词在历史代码中对应于该ngram单词的提示权重。例如,可以统计ngram单词词表中的各个ngram单词在历史代码中与各个词前后相邻的词频的总和,然后计算该ngram单词在历史代码中与该词前后相邻的词频,与,ngram单词词表中的各个ngram单词在历史代码中与各个词前后相邻的词频的总和之间的比值,得到该词在历史代码中对应于该ngram单词的提示权重。
然后将该ngram单词、该词与该提示权重组成对应表项,并存储在ngram单词、词与提示权重之间的第三对应关系中。对于查找到的其他每一个词,同样执行上述操作。
对于ngram单词词表中的其他每一个ngram单词,同样执行上述操作。
第三对应关系即为ngram单词索引表。其中,单词索引表中的ngram单词包括历史代码中的ngram单词。
另外,也可以在用户实时输入代码的过程中,可以根据用户实时输入的新词更新第三对应关系。
例如,在用户实时输入代码的过程中,每当用户实时输入一个新词,则电子设备就会在第三对应关系中,实时更新用户实时输入的新词的提示权重。
另外,为用户推荐提示词的过程,包括:
81)、获得光标位置所在行的分词结果。
基于N-gram获取包括光标位置所在行的代码中的N个相邻的词的N-gram单词;各个N-gram单词中的最后一个词为光标位置所在行的代码中的最后一个词,N为大于1的整数。
在本申请中,可以对光标位置所在行的代码分词,得到光标位置所在行的代码中包括的多个词。
在本申请中,电子设备可以在光标位置所在行的代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在光标位置所在行的代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为光标位置所在行的代码中包括的多个词。
然后获取光标位置所在行的代码中的最后一个文本,然后基于N-gram,从最后一个词开始,按照从后向前的顺序开始依次向前再选择至少一个词,然后将选择的词与光标位置所在行的代码中的最后一个词按照各自在光标位置所在行的代码中的顺序组成N-gram单词。
例如,假设用户需要在开发平台中输入一段代码:“import*as React fromreact”,其中,在上述代码中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
假设用户在开发平台中当前输入的实时代码包括“import*as React from”。
其中,假设以N等4为例,也即,N-gram单词除了包括光标位置所在行的代码中的最后一个文本“from”,还包括光标位置所在行的代码中的距离最后一个词最近的3个词“”、“React”以及“”,例如,N-gram单词为“React from”。
82)、在预先建立的ngram单词索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词。
在一个实施例中,在历史代码中查找到的位于ngram单词之后、且与ngram单词相邻的词为一种。
例如,假设历史代码包括“import*as React from react”,则可以在历史代码“import*as React from react”中查找位于ngram单词“React from”之后、且与ngram单词“React from”相邻的词“react”。
如此,可以将查找到的词“react”作为提示词,之后可以向用户推荐提示词“react”,以供用户选择使用。
然而,在另一个实施例中,有时候在历史代码中查找到的位于ngram单词之后、且与ngram单词相邻的词为多种。
例如,假设在历史代码包括:“import*as React from react”以及“import*asReact from REACT”。
则在历史代码“import*as React from react”以及“import*as React fromREACT”中均可以查找到ngram单词“React from”,且查找到的位于ngram单词“React from”之后、且与ngram单词“React from”相邻的词包括两种,分别为:“react”以及“REACT”。
如此,可以将“react”以及“REACT”作为提示词。
此时,提示词就包括“react”以及“REACT”,之后可以向用户推荐提示词“react”以及“REACT”等,以供用户选择使用。
然而,在这种情况下,查找到的不同的词被用户本次选择使用的可能性不同。
其中,查找到的不同的词在历史代码中位于ngram单词之后且与ngram单词相邻的频次不同,进而使得查找到的不同的词在历史代码中对应于ngram单词的提示权重不同。
在查找到的多种词中,在历史代码中位于ngram单词之后且与ngram单词相邻的频次越高的词是用户在输入代码时所需输入的词的可能性越大,也即,被用户本次选择使用的可能性越大。
或者说,在查找到的词在历史代码中对应于ngram单词的提示权重越高时,查找到的词是用户在输入代码时所需输入的词的可能性越大。
在查找到的多种词中,在历史代码中位于ngram单词之后且与ngram单词相邻的频次越低的词是用户在输入代码时所需输入的词的可能性越小,也即,被用户本次选择使用的可能性越小。
或者说,在查找到的词在历史代码中对应于ngram单词的提示权重越低时,查找到的词是用户在输入代码时所需输入的词的可能性越小。
因此,为了更加方便用户查看并选择需要输入的词,在本申请另一实施例中,82)中的在预先建立的ngram单词索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词,包括:
91)、在历史代码中,获取查找到的多种词在历史代码中分别对应于ngram单词的提示权重。
在本申请中,对于在历史代码中查找到的位于ngram单词之后、且与ngram单词相邻的任意一种词,可以在ngram单词、词与提示权重之间的第三对应关系中,查找与该ngram单词和该词相对应的提示权重,并作为该词在历史代码中对应于ngram单词的提示权重。
对于在历史代码中查找到的位于ngram单词之后、且与ngram单词相邻的其他每一种词,同样执行上述操作。如此得到查找到的多种词在历史代码中分别对应于ngram单词的提示权重。
92)、至少根据频次对查找到的多个词排序。
在本申请一个实施例中,可以按照在历史代码中对应于ngram单词的提示权重由高至低的顺序对查找到的多个词排序。
在本申请另一个实施例中,除了根据在历史代码中对应于ngram单词的提示权重以外,还可以结合查找到的多个词分别在历史代码中最后一次的出现位置等来对查找到的多个词排序。
其中,查找到的每一个词在历史代码中最后一次的出现位置不同。
在历史代码中的最后一次的出现位置距离行末词越近的查找到的词是用户之后所需输入的代码的可能性越大,也即,被用户本次选择使用的可能性越大。
在历史代码中的最后一次的出现位置距离行末词越远的查找到的词是用户之后所需输入的代码的可能性越小,也即,被用户本次选择使用的可能性越小。
当然,本申请也可以根据查找到的多个词的提示权重以及查找到的多个词的其他特征结合起来对查找到的多个词排序,本申请对具体的排序方式不做限定。
93)、按照排序后的顺序显示查找到的至少部分词。
在本申请中,有时候查找到的词较多,然而,通常情况下,用户需要输入的词往往位于排序后的前几个词中。
如果在开发平台中显示了查找到的所有词,则开发平台中很多的区域就会被用户不需要使用的词占据,有时候会影响用户在开发平台中正常输入代码,且会浪费显示资源。
因此,为了避免影响用户正常输入代码以及为了避免浪费显示资源,在本申请另一实施例中,在查找到的多个词的数量大于预设数量的情况下,可以按照排序后的顺序,在多个词中选择topE个词,然后将选择的topE个词按照排序后的顺序显示在开发平台中,其中,E为大于或等于1的整数,E也可以为预设数量,预设数量包括3、4或5等,本申请对此不做限定。
进一步地,如果用户在开发平台中选择了查找到的多个词中的其中一个词,则电子设备可以在ngram单词、词与提示权重之间的第三对应关系中,增加与ngram单词和选择的这个词相对应的提示权重,以实现更新这个词在历史代码中对应于ngram单词的提示权重。
在为用户推荐提示词时,还可以使借助历史代码。其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
用户在开发平台中输入代码时,输入的代码往往是由多个独立的词组成的,例如,包括英文单词、数字以及英文字母以及特殊符号等,特殊符号包括空格、等于号、大于号、小于号、双引号、单引号以及括号等开发平台支持的符号等。
在一个场景中,用户已经在开发平台中输入实时代码,需要继续输入词汇,以完成输入词汇。
例如,假设用户需要在开发平台中输入一段代码:“import*as React fromreact”,其中,在上述代码中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
假设用户在开发平台中当前输入的实时代码包括“import*as React from”。
如此,在本申请一个实施例中,在对历史代码进行切分,得到历史代码的切分结果之后,可以建立ngram整行索引表。
这样,在根据光标位置所在行的行末词为用户推荐提示词时,可以获得光标位置所在行的分词结果,在预先建立的ngram整行索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词,作为提示词,然后为用户推荐查找到的提示词。
其中,建立ngram整行索引表的过程,包括:
111)、获得历史代码。
其中,在用户在开发平台中本次输入的用于开发软件项目中的一部分内容的实时代码之前,用户可能已经开发了软件项目中的其他内容,和/或,其他用户可能已经开发了软件项目中的其他内容。用于开发软件项目中的其他内容的代码可以看作历史代码。历史代码已经被存储在电子设备中。
也即,历史代码可以包括在用户本次为开发软件项目在开发平台中输入实时代码之前,用户或者其他用户之前几次为开发软件项目在开发平台中已输入的代码。
112)、对历史代码进行切分,得到历史代码的切分结果。
在本申请中,电子设备可以在历史代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在历史代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为历史代码中包括的多个词。
113)、根据历史代码的切分结果建立ngram单词词表。
例如,基于N-gram,将历史代码中的每相邻的N个词组成ngram单词。其中,N为大于1的整数。然后将得到的多个ngram单词组成ngram单词词表。
N可以为大于1的整数,例如N取4,则将历史代码中的每相邻的4个词组成ngram单词。
例如,历史代码包括:“import*as React from react”。
其中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
可以将“import”、“”、“*”以及“”组成ngram单词;将“”、“*”、“”以及“as”组成ngram单词,将“*”、“”、“as”以及“”组成ngram单词,将“”、“as”、“”以及“React”组成ngram单词,将“as”、“”、“React”以及“”组成ngram单词,将“”、“React”、“”以及“from”组成ngram单词,将“React”、“”、“from”以及“”组成ngram单词,将“”、“from”、“”以及“react”组成ngram单词等。
另外,N也可以取两个以上的数,例如N取4和5,则将历史代码中的每相邻的4个词组成ngram单词,以及,将历史代码中的每相邻的5个词组成ngram单词等。
114)、根据ngram单词词表建立ngram整行索引表。
在本申请一个实施例中,对于ngram单词词表中的任意一个ngram单词,可以在历史代码中查找位于该ngram单词所在的行、且位于该ngram单词之后的整行的词,也即,在历史代码中的该ngram单词所在的行中,位于该ngram单词之后的所有词。
然后在历史代码中统计该ngram单词与该整行的词先后相邻的频次(出现次数),也即,统计该ngram单词位于该整行的词之前且二者属于同一行的情况在历史代码中的频次,然后可以根据该频次获取该整行的词对应于该ngram单词的提示权重,例如,可以统计ngram单词词表中的各个ngram单词在历史代码中与位于其之后的整行的词的词频的总和,然后计算该ngram单词在历史代码中与该整行的词前后相邻的词频,与,ngram单词词表中的各个ngram单词在历史代码中与各个整行的词前后相邻的词频的总和之间的比值,得到该整行的词在历史代码中对应于该ngram单词的提示权重。
然后将该ngram单词、该整行的词与该提示权重组成对应表项,并存储在ngram单词、整行的词与提示权重之间的第四对应关系中。
对于ngram单词词表中的其他每一个ngram单词,同样执行上述操作。
第四对应关系即为ngram整行索引表。其中,整行索引表中的ngram单词包括历史代码中的ngram单词。
另外,也可以在用户实时输入代码的过程中,可以根据用户实时输入的新词更新第四对应关系。
例如,在用户实时输入代码的过程中,每当用户实时输入一个新词,则电子设备就会在第四对应关系中,实时更新用户实时输入的新词的提示权重。
另外,为用户推荐提示词的过程,包括:
121)、获得光标位置所在行的分词结果。
基于N-gram获取包括光标位置所在行的代码中的N个相邻的词的N-gram单词;各个N-gram单词中的最后一个词为光标位置所在行的代码中的最后一个词,N为大于1的整数。
在本申请中,可以对光标位置所在行的代码分词,得到光标位置所在行的代码中包括的多个词。
在本申请中,电子设备可以在光标位置所在行的代码中查表特殊符号,特殊符号包括:空格、等于号、大于号、小于号、双引号、单引号以及括号等。然后可以在光标位置所在行的代码中,筛选相邻的两个特殊符号之间的词,然后将筛选出的词与特殊符号作为光标位置所在行的代码中包括的多个词。
然后获取光标位置所在行的代码中的最后一个文本,然后基于N-gram,从最后一个词开始,按照从后向前的顺序开始依次向前再选择至少一个词,然后将选择的词与光标位置所在行的代码中的最后一个词按照各自在光标位置所在行的代码中的顺序组成N-gram单词。
例如,假设用户需要在开发平台中输入一段代码:“import*as React fromreact”,其中,在上述代码中,“import”、“”、“*”、“”、“as”、“”、“React”、“”、“from”、“”以及“react”均为独立的词。“”代表代码中的空格。
假设用户在开发平台中当前输入的实时代码包括“import*as React from”。
其中,假设以N等4为例,也即,N-gram单词除了包括光标位置所在行的代码中的最后一个文本“from”,还包括光标位置所在行的代码中的距离最后一个词最近的3个词“”、“React”以及“”,例如,N-gram单词为“React from”。
122)、在预先建立的ngram整行索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词。
在一个实施例中,在历史代码中查找到的位于ngram单词之后的整行的词为一种。
例如,假设历史代码包括“import*as React from react”,则可以在历史代码“import*as React from react”中查找位于ngram单词“React from”之后的整行的词“react”。
如此,可以将查找到的整行的词“react”作为提示词,之后可以向用户推荐提示词“react”,以供用户选择使用。
然而,在另一个实施例中,有时候在历史代码中查找到的位于ngram单词之后的整行的词为多种。
例如,假设在历史代码包括:“import*as React from react”以及“import*asReact from REACT”。
则在历史代码“import*as React from react”以及“import*as React fromREACT”中均可以查找到ngram单词“React from”,且查找到的位于ngram单词“React from”之后的整行的词包括两种,分别为:“react”以及“REACT”。
如此,可以将“react”以及“REACT”作为提示词。
此时,提示词就包括“react”以及“REACT”,之后可以向用户推荐提示词“react”以及“REACT”等,以供用户选择使用。
然而,在这种情况下,查找到的不同的整行的词被用户本次选择使用的可能性不同。
其中,查找到的不同的整行的词在历史代码中位于ngram单词之后且与ngram单词同一行的频次不同,进而使得查找到的不同的整行的词在历史代码中对应于ngram单词的提示权重不同。
在查找到的多种词中,在历史代码中位于ngram单词之后且与ngram单词同一行的频次越高的整行的词是用户在输入代码时所需输入的词的可能性越大,也即,被用户本次选择使用的可能性越大。
或者说,在查找到的整行的词在历史代码中对应于ngram单词的提示权重越高时,查找到的整行的词是用户在输入代码时所需输入的词的可能性越大。
在查找到的多种词中,在历史代码中位于ngram单词之后且与ngram单词同一行的频次越低的整行的词是用户在输入代码时所需输入的词的可能性越小,也即,被用户本次选择使用的可能性越小。
或者说,在查找到的整行的词在历史代码中对应于ngram单词的提示权重越低时,查找到的整行的词是用户在输入代码时所需输入的词的可能性越小。
因此,为了更加方便用户查看并选择需要输入的整行的词,在本申请另一实施例中,122)中的在预先建立的ngram整行索引表中查找提示权重与光标位置所在行的分词结果和行末词相匹配的词,包括:
131)、在历史代码中,获取查找到的多种整行的词在历史代码中分别对应于ngram单词的提示权重。
在本申请中,对于在历史代码中查找到的位于ngram单词之后且与ngram单词同一行的任意一种整行的词,可以在ngram单词、整行的词与提示权重之间的第三对应关系中,查找与该ngram单词和该整行的词相对应的提示权重,并作为该整行的词在历史代码中对应于ngram单词的提示权重。
对于在历史代码中查找到的位于ngram单词之后、且与ngram单词同一行的其他每一种整行的词,同样执行上述操作。如此得到查找到的多种整行的词在历史代码中分别对应于ngram单词的提示权重。
132)、至少根据频次对查找到的多个词排序。
在本申请一个实施例中,可以按照在历史代码中对应于ngram单词的提示权重由高至低的顺序对查找到的多个整行的词排序。
在本申请另一个实施例中,除了根据在历史代码中对应于ngram单词的提示权重以外,还可以结合查找到的多个整行的词分别在历史代码中最后一次的出现位置等来对查找到的多个整行的词排序。
其中,查找到的每一个整行的词在历史代码中最后一次的出现位置不同。
在历史代码中的最后一次的出现位置距离行末词越近的查找到的整行的词是用户之后所需输入的代码的可能性越大,也即,被用户本次选择使用的可能性越大。
在历史代码中的最后一次的出现位置距离行末词越远的查找到的整行的词是用户之后所需输入的代码的可能性越小,也即,被用户本次选择使用的可能性越小。
当然,本申请也可以根据查找到的多个整行的词的提示权重以及查找到的多个词的其他特征结合起来对查找到的多个词排序,本申请对具体的排序方式不做限定。
133)、按照排序后的顺序显示查找到的至少部分整行的词。
在本申请中,有时候查找到的整行的词较多,然而,通常情况下,用户需要输入的词往往位于排序后的前几个整行的词中。
如果在开发平台中显示了查找到的所有整行的词,则开发平台中很多的区域就会被用户不需要使用的词占据,有时候会影响用户在开发平台中正常输入代码,且会浪费显示资源。
因此,为了避免影响用户正常输入代码以及为了避免浪费显示资源,在本申请另一实施例中,在查找到的多个整行的词的数量大于预设数量的情况下,可以按照排序后的顺序,在多个整行的词中选择topE个整行的词,然后将选择的topE个整行的词按照排序后的顺序显示在开发平台中,其中,E为大于或等于1的整数,E也可以为预设数量,预设数量包括3、4或5等,本申请对此不做限定。
进一步地,如果用户在开发平台中选择了查找到的多个整行的词中的其中一个词,则电子设备可以在ngram单词、整行的词与提示权重之间的第四对应关系中,增加与ngram单词和选择的这个整行的词相对应的提示权重,以实现更新在历史代码中这个整行的词对应于ngram单词的提示权重。
在本申请另一实施例中,如果有多个提示词,则对多个提示词进行筛选和排序;则为用户推荐提示词,包括:为用户推荐排序后的至少两个推荐提示词。
在本申请另一实施例中,本申请在向用户推荐提示词时,可以将前述实施例的查找到的词汇总。汇总后的词中至少可以按照在各自所在的实施例中确定出的提示权重由高至低的顺序排序,然后选择排序后的前X个提示词推荐给用户,X为大于或等于1的整数,例如,X为4、5或6等,本申请对X的具体数值不做限定。
参照图2,示出了本申请一种代码推荐装置的实施例的结构框图,具体可以包括如下模块:
接收模块001,用于接收用户输入的代码,并按照预设规则对所述代码进行切分;
获得模块002,用于在切分结果中获得所述用户的光标位置所在行的行末词;
推荐模块003,用于根据所述光标位置所在行的行末词,为用户推荐提示词。
在一个可选的实现方式中,所述装置还包括:
建立模块,用于为所述切分结果建立实时词库;
所述推荐模块包括:
第一查找单元,用于在所述实时词库中查找提示权重与所述行末词相匹配的词,作为提示词;
第一推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第二查找单元,用于在预先建立的单词索引表中查找提示权重与所述行末词相匹配的词,作为提示词;
第二推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第一获得单元,用于获得所述光标位置所在行的分词结果;
第三查找单元,用于在预先建立的ngram单词索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第三推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块包括:
第二获得单元,用于获得所述光标位置所在行的分词结果;
第四查找单元,用于在预先建立的ngram整行索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第四推荐单元,用于为所述用户推荐查找到的提示词。
在一个可选的实现方式中,所述推荐模块,包括:
排序单元,用于如果有多个提示词,则对所述多个提示词进行筛选和排序;
第五推荐单元,用于为用户推荐排序后的至少两个提示词。
在一个可选的实现方式中,所述推荐模块还包括:
第三获得单元,用于获得历史代码;
第一切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第一建立单元,用于根据所述历史代码的切分结果建立代码用词词典;
第二建立单元,用于根据所述代码用词词典建立所述单词索引表。
在一个可选的实现方式中,所述第二建立单元包括:
计算子单元,用于根据所述代码用词词典中的词的词频,计算所述词的提示权重;
建立子单元,用于根据所述词的提示权重建立所述单词索引表。
在一个可选的实现方式中,所述推荐模块还包括:
第四获得单元,用于获得历史代码;
第二切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第三建立单元,用于根据所述历史代码的切分结果建立ngram单词词表;
第四建立单元,用于根据所述ngram单词词表建立所述ngram单词索引表和/或所述ngram整行索引表。
在本申请中,接收用户输入的代码,并按照预设规则对代码进行切分;在切分结果中获得用户的光标位置所在行的行末词;根据光标位置所在行的行末词,为用户推荐提示词。
其中,用户输入的代码可以包括用户为开发软件项目在开发平台中当前输入的实时代码,
根据用户输入的代码预测的提示词可以是实时代码和/或历史代码中已经出现过的词,历史代码包括在用户输入的实时代码之前用户或其他用户为开发软件项目已输入的历史代码。其中,用户为开发软件项目在开发平台中当前输入的实时代码中的最后一个词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,和/或,当前输入的实时代码中的最后M个相邻的词与提示词前后相邻的情况在实时代码和/或历史代码中已经出现过,M为大于或等于2的整数。
基于输入代码的习惯,在能够满足软件项目的功能的情况下,用户可以选择提示词作为在当前输入的实时代码之后实际需要输入的代码,而可以不手动输入字符上与提示词不同、但功能上与提示词相同的词,从而可以使得用户在当前输入的实时代码之后输入的代码的语句风格、命名风格以及输入规范性等与实时代码和/或历史代码的语句风格、命名风格以及输入规范性等相同。
从而可以实现将不同的用户或同一用户为同一软件项目开发的代码的语句风格、命名风格以及输入规范性等统一,方便后期维护,降低了后期维护的人工成本。
另外,本申请可以自动根据为开发软件项目已输入的代码向用户推荐提示词,以使用户不需要花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,用户只需要按照推荐的提示词在开发平台中的当前输入的实时代码之后继续输入代码即可完成开发软件项目。
由于省去了花时间熟悉之前为开发软件项目已输入的代码的语句风格、命名风格以及输入规范性等,从而可以降低用户的工作负担,以及,提高用户的开发效率。
本申请实施例还提供了一种非易失性可读存储介质,该存储介质中存储有一个或多个模块(programs),该一个或多个模块被应用在设备时,可以使得该设备执行本申请实施例中各方法步骤的指令(instructions)。
本申请实施例提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得电子设备执行如上述实施例中一个或多个所述的方法。本申请实施例中,所述电子设备包括服务器、网关、子设备等,子设备为物联网设备等设备。
本公开的实施例可被实现为使用任意适当的硬件,固件,软件,或及其任意组合进行想要的配置的装置,该装置可包括服务器(集群)、终端设备如IoT设备等电子设备。
图3示意性地示出了可被用于实现本申请中所述的各个实施例的示例性装置1300。
对于一个实施例,图3示出了示例性装置1300,该装置具有一个或多个处理器1302、被耦合到(一个或多个)处理器1302中的至少一个的控制模块(芯片组)1304、被耦合到控制模块1304的存储器1306、被耦合到控制模块1304的非易失性存储器(NVM)/存储设备1308、被耦合到控制模块1304的一个或多个输入/输出设备1310,以及被耦合到控制模块1306的网络接口1312。
处理器1302可包括一个或多个单核或多核处理器,处理器1302可包括通用处理器或专用处理器(例如图形处理器、应用处理器、基频处理器等)的任意组合。在一些实施例中,装置1300能够作为本申请实施例中所述网关等服务器设备。
在一些实施例中,装置1300可包括具有指令1314的一个或多个计算机可读介质(例如,存储器1306或NVM/存储设备1308)以及与该一个或多个计算机可读介质相合并被配置为执行指令1314以实现模块从而执行本公开中所述的动作的一个或多个处理器1302。
对于一个实施例,控制模块1304可包括任意适当的接口控制器,以向(一个或多个)处理器1302中的至少一个和/或与控制模块1304通信的任意适当的设备或组件提供任意适当的接口。
控制模块1304可包括存储器控制器模块,以向存储器1306提供接口。存储器控制器模块可以是硬件模块、软件模块和/或固件模块。
存储器1306可被用于例如为装置1300加载和存储数据和/或指令1314。对于一个实施例,存储器1306可包括任意适当的易失性存储器,例如,适当的DRAM。在一些实施例中,存储器1306可包括双倍数据速率类型四同步动态随机存取存储器(DDR4SDRAM)。
对于一个实施例,控制模块1304可包括一个或多个输入/输出控制器,以向NVM/存储设备1308及(一个或多个)输入/输出设备1310提供接口。
例如,NVM/存储设备1308可被用于存储数据和/或指令1314。NVM/存储设备1308可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(HDD)、一个或多个光盘(CD)驱动器和/或一个或多个数字通用光盘(DVD)驱动器)。
NVM/存储设备1308可包括在物理上作为装置1300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问可不必作为该设备的一部分。例如,NVM/存储设备1308可通过网络经由(一个或多个)输入/输出设备1310进行访问。
(一个或多个)输入/输出设备1310可为装置1300提供接口以与任意其他适当的设备通信,输入/输出设备1310可以包括通信组件、拼音组件、传感器组件等。网络接口1312可为装置1300提供接口以通过一个或多个网络通信,装置1300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信,例如接入基于通信标准的无线网络,如WiFi、2G、3G、4G、5G等,或它们的组合进行无线通信。
对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器(例如,存储器控制器模块)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑封装在一起以形成***级封装(SiP)。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器1302中的至少一个可与控制模块1304的一个或多个控制器的逻辑集成在同一模具上以形成片上***(SoC)。
在各个实施例中,装置1300可以但不限于是:服务器、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)等终端设备。在各个实施例中,装置1300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,装置1300包括一个或多个摄像机、键盘、液晶显示器(LCD)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(ASIC)和扬声器。
本申请实施例提供了一种电子设备,包括:一个或多个处理器;和,其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如本申请中一个或多个所述的代码推荐方法。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本申请实施例是参照根据本申请实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种代码推荐方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (20)
1.一种代码推荐方法,其特征在于,包括:
接收用户输入的代码,并按照预设规则对所述代码进行切分;
在切分结果中获得所述用户的光标位置所在行的行末词;
根据所述光标位置所在行的行末词,为用户推荐提示词。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为所述切分结果建立实时词库;
则根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
在所述实时词库中查找提示权重与所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
3.根据权利要求1所述的方法,其特征在于,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
在预先建立的单词索引表中查找提示权重与所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
4.根据权利要求1所述的方法,其特征在于,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
获得所述光标位置所在行的分词结果;
在预先建立的ngram单词索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
5.根据权利要求1所述的方法,其特征在于,所述根据所述光标位置所在行的行末词,为用户推荐提示词,包括:
获得所述光标位置所在行的分词结果;
在预先建立的ngram整行索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
为所述用户推荐查找到的提示词。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述方法还包括:
如果有多个提示词,则对所述多个提示词进行筛选和排序;
则所述为用户推荐提示词,包括:
为用户推荐排序后的至少两个提示词。
7.根据权利要求3所述的方法,其特征在于,所述方法还包括:
获得历史代码;
对所述历史代码进行切分,得到历史代码的切分结果;
根据所述历史代码的切分结果建立代码用词词典;
根据所述代码用词词典建立所述单词索引表。
8.根据权利要求7所述的方法,其特征在于,所述根据所述代码用词词典建立所述单词索引表,包括:
根据所述代码用词词典中的词的词频,计算所述词的提示权重;
根据所述词的提示权重建立所述单词索引表。
9.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
获得历史代码;
对所述历史代码进行切分,得到历史代码的切分结果;
根据所述历史代码的切分结果建立ngram单词词表;
根据所述ngram单词词表建立所述ngram单词索引表和/或所述ngram整行索引表。
10.一种代码推荐装置,其特征在于,包括:
接收模块,用于接收用户输入的代码,并按照预设规则对所述代码进行切分;
获得模块,用于在切分结果中获得所述用户的光标位置所在行的行末词;
推荐模块,用于根据所述光标位置所在行的行末词,为用户推荐提示词。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
建立模块,用于为所述切分结果建立实时词库;
所述推荐模块包括:
第一查找单元,用于在所述实时词库中查找提示权重与所述行末词相匹配的词,作为提示词;
第一推荐单元,用于为所述用户推荐查找到的提示词。
12.根据权利要求10所述的装置,其特征在于,所述推荐模块包括:
第二查找单元,用于在预先建立的单词索引表中查找提示权重与所述行末词相匹配的词,作为提示词;
第二推荐单元,用于为所述用户推荐查找到的提示词。
13.根据权利要求10所述的装置,其特征在于,所述推荐模块包括:
第一获得单元,用于获得所述光标位置所在行的分词结果;
第三查找单元,用于在预先建立的ngram单词索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第三推荐单元,用于为所述用户推荐查找到的提示词。
14.根据权利要求10所述的装置,其特征在于,所述推荐模块包括:
第二获得单元,用于获得所述光标位置所在行的分词结果;
第四查找单元,用于在预先建立的ngram整行索引表中查找提示权重与所述光标位置所在行的分词结果和所述行末词相匹配的词,作为提示词;
第四推荐单元,用于为所述用户推荐查找到的提示词。
15.根据权利要求9-14中任一项所述的装置,其特征在于,所述推荐模块,包括:
排序单元,用于如果有多个提示词,则对所述多个提示词进行筛选和排序;
第五推荐单元,用于为用户推荐排序后的至少两个提示词。
16.根据权利要求12所述的装置,其特征在于,所述推荐模块还包括:
第三获得单元,用于获得历史代码;
第一切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第一建立单元,用于根据所述历史代码的切分结果建立代码用词词典;
第二建立单元,用于根据所述代码用词词典建立所述单词索引表。
17.根据权利要求16所述的装置,其特征在于,所述第二建立单元包括:
计算子单元,用于根据所述代码用词词典中的词的词频,计算所述词的提示权重;
建立子单元,用于根据所述词的提示权重建立所述单词索引表。
18.根据权利要求13或14所述的装置,其特征在于,所述推荐模块还包括:
第四获得单元,用于获得历史代码;
第二切分单元,用于对所述历史代码进行切分,得到历史代码的切分结果;
第三建立单元,用于根据所述历史代码的切分结果建立ngram单词词表;
第四建立单元,用于根据所述ngram单词词表建立所述ngram单词索引表和/或所述ngram整行索引表。
19.一种电子设备,其特征在于,所述电子设备包括:
处理器;和
存储器,其上存储有可执行代码,当所述可执行代码被执行时,使得所述处理器执行如权利要求1-9中一个或多个所述的代码推荐方法。
20.一个或多个机器可读介质,其上存储有可执行代码,当所述可执行代码被执行时,使得处理器执行如权利要求1-9中一个或多个所述的代码推荐方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010642143.8A CN113900635A (zh) | 2020-07-06 | 2020-07-06 | 一种代码推荐方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010642143.8A CN113900635A (zh) | 2020-07-06 | 2020-07-06 | 一种代码推荐方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113900635A true CN113900635A (zh) | 2022-01-07 |
Family
ID=79186702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010642143.8A Pending CN113900635A (zh) | 2020-07-06 | 2020-07-06 | 一种代码推荐方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113900635A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150378692A1 (en) * | 2014-06-30 | 2015-12-31 | Microsoft Corporation | Code recommendation |
CN105981005A (zh) * | 2013-12-13 | 2016-09-28 | 纽昂斯通信有限公司 | 使用统计语言模型改进文本输入 |
CN110673836A (zh) * | 2019-08-22 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 一种代码补全方法、装置、计算设备及存储介质 |
US20200097261A1 (en) * | 2018-09-22 | 2020-03-26 | Manhattan Engineering Incorporated | Code completion |
CN111198620A (zh) * | 2018-11-20 | 2020-05-26 | 北京搜狗科技发展有限公司 | 一种呈现输入候选项的方法、装置和设备 |
-
2020
- 2020-07-06 CN CN202010642143.8A patent/CN113900635A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105981005A (zh) * | 2013-12-13 | 2016-09-28 | 纽昂斯通信有限公司 | 使用统计语言模型改进文本输入 |
US20150378692A1 (en) * | 2014-06-30 | 2015-12-31 | Microsoft Corporation | Code recommendation |
CN106462399A (zh) * | 2014-06-30 | 2017-02-22 | 微软技术许可有限责任公司 | 代码推荐 |
US20200097261A1 (en) * | 2018-09-22 | 2020-03-26 | Manhattan Engineering Incorporated | Code completion |
CN111198620A (zh) * | 2018-11-20 | 2020-05-26 | 北京搜狗科技发展有限公司 | 一种呈现输入候选项的方法、装置和设备 |
CN110673836A (zh) * | 2019-08-22 | 2020-01-10 | 阿里巴巴集团控股有限公司 | 一种代码补全方法、装置、计算设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
TAM NGUYEN 等: "Personalized Code Recommendation", 《2019 IEEE INTERNATIONAL CONFERENCE ON SOFTWARE MAINTENANCE AND EVOLUTION (ICSME)》, 5 December 2019 (2019-12-05), pages 313 - 317 * |
杨博 等: "智能代码补全研究综述", 《软件学报》, 31 May 2020 (2020-05-31), pages 1206 - 1223 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7953692B2 (en) | Predicting candidates using information sources | |
CN111310440B (zh) | 文本的纠错方法、装置和*** | |
JP5379138B2 (ja) | 領域辞書の作成 | |
CN108932320B (zh) | 文章搜索方法、装置及电子设备 | |
US10402474B2 (en) | Keyboard input corresponding to multiple languages | |
CN110162778B (zh) | 文本摘要的生成方法及装置 | |
CN113204621B (zh) | 文档入库、文档检索方法,装置,设备以及存储介质 | |
CN104881397B (zh) | 缩写词扩展方法和装置 | |
JP2015517711A (ja) | 検索クエリキーワードを使用した、アプリケーションインターフェースの完成 | |
WO2013127060A1 (en) | Techniques for transliterating input text from a first character set to a second character set | |
CN112417848A (zh) | 语料生成方法、装置及计算机设备 | |
CN105824436A (zh) | 一种字符输入方法以及输入法*** | |
CN111435406A (zh) | 一种纠正数据库语句拼写错误的方法和装置 | |
CN111339166A (zh) | 基于词库的匹配推荐方法、电子装置及存储介质 | |
CN111708911B (zh) | 搜索方法、装置、电子设备及计算机可读存储介质 | |
CN111368506A (zh) | 文本处理方法及装置 | |
CN111597118A (zh) | 测试用例生成方法、装置、计算机设备及存储介质 | |
CN104281275A (zh) | 一种英文的输入方法和装置 | |
CN107329964A (zh) | 一种文本处理方法及装置 | |
CN111666417B (zh) | 生成同义词的方法、装置、电子设备以及可读存储介质 | |
CN111797614B (zh) | 文本处理方法及装置 | |
CN106953937B (zh) | 一种统一资源定位符url转换方法及装置 | |
US20180157744A1 (en) | Comparison table automatic generation method, device and computer program product of the same | |
CN113900635A (zh) | 一种代码推荐方法及装置 | |
CN109165065B (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 |