一种基于查询语句的情境感知API推荐方法及终端技术

技术编号:26169911 阅读:26 留言:0更新日期:2020-10-31 13:35
本发明专利技术公开了一种基于查询语句的情境感知API推荐方法及终端,步骤如下:从Github收集Java项目并进行筛选;针对Java文件构建抽象语法树提取方法注释、方法名、API以及情境信息;根据查询语句数据集构建语言模型,根据用户当前查询语句检索历史相似的查询;利用检索到的历史相似的查询与用户当前查询语句构建张量;提取用户当前编程代码信息,即情境元组,利用Smith‑Waterman算法进行情境匹配,选择出与用户当前情境最相似的情境,然后根据张量里的元素值的大小排序API推荐给用户。与现有技术相比,本发明专利技术将情境信息融入到基于查询语句的API推荐,使其能把更相关的API推荐给用户。

【技术实现步骤摘要】
一种基于查询语句的情境感知API推荐方法及终端
本专利技术属于代码推荐
,具体涉及一种基于查询语句的情境感知API推荐方法及终端。
技术介绍
应用程序编程接口(API)是构建大规模软件系统的基本构建块。由于API库中含有大量的API,开发人员往往并不能全部掌握,当面对一个不熟悉的编程任务时,通常会通过查询的方式寻找需要使用的API。现有研究提出各种各样的API推荐方法来实现高效的开发。这些API推荐方法通常根据输入可以分为两类:有显示查询和无显示查询。有显示查询的方法通常需要良好的设计的查询语句来捕获用户的编程意图,这种方法被定义为一个信息检索方法,它将查询语句转化为一个词向量,然后使用文本匹配的方法来寻找最匹配的API。由于自然语言和代码之间的词法差异,通常会使用额外的构件包括API文档,API调用图,问答网站中的帖子等辅助API推荐。无显示查询由于没有显示查询作为输入,因此必须利用情境信息来推断用户需要使用哪些API,情境信息一般包括周围的代码片段,API调用图等。现实中一个很常见的现象是开发人员在已经完成了一个编程任务的部分代码后,由于不知道如何编写下面的代码,通过查询语句寻找正确的API继续编程。现有的API推荐方法要么依赖于查询语句,要么依赖于已经编写的代码片段。然而这些方法有时不能推荐出用户真正想要的API。比如下述查询语句:Copyafileinjava,该查询语句在编程情境已经明确使用高效字符缓冲流(java.io.BufferedReader,java.io.BufferedWriter)来完成时,该查询语句推荐出来的API可能是java.io.FileReader.read,并不能帮助用户完成编程任务。而单纯利用情境信息,有时无法捕捉用户的编程意图,当情境信息很少甚至没有时,根本无法推荐出用户想要的API。因此,本专利技术拟将情境信息融入到基于查询语句的API推荐任务进行优化。针对标准的基于查询语句的推荐,一种典型的方法就是使用一个矩阵表示查询语句和API的二元关系。然而,随着情境信息的引入,本专利技术采用三阶张量来表示查询语句,API,情境的三元关系。采用张量分解的方法对缺失值进行填补,从而根据当前用户查询语句以及情境将相关API推荐给用户。
技术实现思路
针对于上述现有技术的不足,本专利技术的目的在于提供一种基于查询语句的情境感知API推荐方法及终端,以解决现有技术中推荐结果列表中的API与情境不匹配的问题。本专利技术利用情境信息提高基于查询语句的API推荐的准确性。为达到上述目的,本专利技术采用的技术方案如下:本专利技术的一种基于查询语句的情境感知API推荐方法,步骤如下:(1)从Github收集Java项目并进行筛选;针对Java文件构建抽象语法树提取方法注释、方法名、API以及情境信息;(2)根据查询语句数据集构建语言模型,根据用户输入的查询语句检索历史相似的查询;(3)利用检索到的历史相似的查询与用户输入的查询语句构建张量,并采用非负张量分解对缺失值进行填补;(4)针对用户当前编程环境采用步骤(1)提取情境信息的方法提取用户当前编程代码信息,即情境元组,利用Smith-Waterman算法进行情境匹配,选择出与用户当前情境最相似的情境,然后根据张量里的元素值的大小排序API推荐给用户。优选地,所述步骤(1)具体包括:对从Github收集到的Java项目去除低质量的项目(即项目星标数为0),提取java项目中的java文件,针对每一个Java文件利用EclipseJDT构建抽象语法树,从中提取方法注释,方法名,API以及情境信息。优选地,所述步骤(1)具体还包括:方法注释:提取方法注释的第一句话作为用户的查询语句;方法名:将其按照Java方法名命名规则“驼峰”命名法对其进行分解;API:针对Java方法调用API进行推荐,提取Java方法调用的API;情境信息:情境信息指编程人员在编写一个编程任务(即一个Java方法定义)过程中的方法体内的上下文信息;通过遍历方法体的抽象语法树,用Java包名.类名的形式表示提取Java类的实例化,用Java包名.类名.方法名的形式表示提取到的Java方法调用,以及用自定义的映射控制结点与字符的编码表来表示提取到的控制API调用的结点来对情境信息编码;情境信息用一个字符串表示。优选地,所述步骤(2)中根据查询语句构建语言模型,具体包括:对步骤(1)提取到的查询语句分词和提取词干后采用word2vec训练词向量并计算每个词idf值,从而构建一个语言模型。其中,逆文档频率(idf)是一个词语普遍重要性的度量,某一特定词语的idf计算公式如下:优选地,所述步骤(2)中根据用户当前查询语句检索历史相似的查询,具体包括:将方法名加入到查询语句后,检索历史相似的查询;对历史查询语句进行遍历,计算当前查询语句与历史查询语句的相似度,计算公式如下:其中,querySim(Q1,Q2)表示两个查询语句Q1和Q2之间的相似度;wordSim(Q1,Q2)表示查询Q1中所有单词与查询Q2之间的相似度;同理,wordSim(Q2,Q1)表示查询Q2中所有单词与Q1之间的相似度:其中,ω1表示查询Q1中的单词,ω2表示查询Q2中的单词;idf(ω1)表示单词ω1的idf值,idf(ω2)表示单词ω2的idf值;将单词ω1与单词ω2的相似度记为sim(ω1,ω2),simmax(ω1,Q2)是单词ω1与查询Q2中单词相似度的最大值,即sim(ω1,ω2)的最大值;同理,将单词ω2与单词ω1的相似度记为sim(ω2,ω1),simmax(ω2,Q1)是单词ω2与查询Q1中单词相似度的最大值,即sim(ω2,ω1)的最大值;sim(ω1,ω2)和sim(ω2,ω1)的余弦相似度计算公式如下:其中,表示单词ω1的向量,表示单词ω2的向量,表示单词ω1的向量的模,表示单词ω2的向量的模。根据相似度计算公式,将检索到的最相似的Top-k个历史查询用来构建张量。优选地,所述步骤(3)具体包括:根据检索到的历史相似的查询和当前的查询语句以及情境信息所构成的三元组<查询语句,API,情境>集合Rsim根据如下公式构建张量:其中,q代表经过分词和提取词干后的查询语句,a代表API,c代表情境。优选地,所述步骤(4)具体包括:利用Smith-Waterman算法查询到两个情境序列C和D的局部最大匹配序列,局部最大匹配序列的长度记为SLength(C,D),根据如下公式计算序列C和D的相似度:其中,SLength(·)表示序列·的长度,利用序列相似度计算公式计算得到与当前的编程情境最相似的历史情境,然后根据张量里面元素值的大小对API进行排序,推荐给用户。本专利技术还提供一种基于查询语句的情境感知API推荐终端,包括:一个或多个处理器;<本文档来自技高网
...

【技术保护点】
1.一种基于查询语句的情境感知API推荐方法,其特征在于,步骤如下:/n(1)从Github收集Java项目并进行筛选;针对Java文件构建抽象语法树提取方法注释、方法名、API以及情境信息;/n(2)根据查询语句数据集构建语言模型,根据用户输入的查询语句检索历史相似的查询;/n(3)利用检索到的历史相似的查询与用户输入的查询语句构建张量,并采用非负张量分解对缺失值进行填补;/n(4)针对用户当前编程环境采用步骤(1)提取情境信息的方法提取用户当前编程代码信息,即情境元组,利用Smith-Waterman算法进行情境匹配,选择出与用户当前情境最相似的情境,然后根据张量里的元素值的大小排序API推荐给用户。/n

【技术特征摘要】
1.一种基于查询语句的情境感知API推荐方法,其特征在于,步骤如下:
(1)从Github收集Java项目并进行筛选;针对Java文件构建抽象语法树提取方法注释、方法名、API以及情境信息;
(2)根据查询语句数据集构建语言模型,根据用户输入的查询语句检索历史相似的查询;
(3)利用检索到的历史相似的查询与用户输入的查询语句构建张量,并采用非负张量分解对缺失值进行填补;
(4)针对用户当前编程环境采用步骤(1)提取情境信息的方法提取用户当前编程代码信息,即情境元组,利用Smith-Waterman算法进行情境匹配,选择出与用户当前情境最相似的情境,然后根据张量里的元素值的大小排序API推荐给用户。


2.根据权利要求1所述的基于查询语句的情境感知API推荐方法,其特征在于,所述步骤(1)具体包括:对从Github收集到的Java项目去除低质量的项目,提取java项目中的java文件,针对每一个Java文件利用EclipseJDT构建抽象语法树,从中提取方法注释,方法名,API以及情境信息。


3.根据权利要求2所述的基于查询语句的情境感知API推荐方法,其特征在于,所述步骤(1)具体还包括:
方法注释:提取方法注释的第一句话作为用户的查询语句;
方法名:将其按照Java方法名命名规则驼峰命名法对其进行分解;
API:针对Java方法调用API进行推荐,提取Java方法调用的API;
情境信息:通过遍历方法体的抽象语法树,用Java包名.类名的形式表示提取Java类的实例化,用Java包名.类名.方法名的形式表示提取到的Java方法调用,以及用自定义的映射控制结点与字符的编码表来表示提取到的控制API调用的结点来对情境信息编码。


4.根据权利要求1所述的基于查询语句的情境感知API推荐方法,其特征在于,所述步骤(2)中根据查询语句构建语言模型,具体包括:对步骤(1)提取到的查询语句分词和提取词干后采用word2vec训练词向量并计算每个词idf值,从而构建一个语言模型。


5.根据权利要求1所述的基于查询语句的情境感知API推荐方法,其特征在于,所述步骤(2)中根据用户当前查询语句检索历史相似的查询,具体包括:将方法名加入到查询语句后,检索历史相似的查询;对历史查询语句进行遍历,计算当前查询语句与历史查询语句的相似度,计算公式如下:<...

【专利技术属性】
技术研发人员:周宇陈晨王永超黄志球
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1