[发明专利]一种基于层次上下文的API推荐方法有效
申请号: | 201910503332.4 | 申请日: | 2019-06-11 |
公开(公告)号: | CN110297657B | 公开(公告)日: | 2023-07-21 |
发明(设计)人: | 李必信;谢仁松;王璐璐;孔祥龙;廖力;周颖 | 申请(专利权)人: | 东南大学 |
主分类号: | G06F8/70 | 分类号: | G06F8/70 |
代理公司: | 南京众联专利代理有限公司 32206 | 代理人: | 杜静静 |
地址: | 210096 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 层次 上下文 api 推荐 方法 | ||
1.一种基于层次上下文的API推荐方法,其特征在于,所述方法包括以下步骤:
步骤1)分析调用关系,通过静态分析java程序字节码生成调用关系图和获取项目信息,其中调用关系图的节点表示API,用JVM中间语言表示,边表示API之间的调用关系;项目信息包括项目名称,第三方lib库名称;
步骤2)生成层次上下文信息,去除与API推荐无关的两种调用关系,并删除JDKAPI之间的调用关系来将调用关系图转化为层次上下文信息;
步骤3)生成API序列库,通过遍历层次上下文来抽取API序列,每个API序列体现了API的一种使用方法;
步骤4)抽取推荐点的上下文信息,包括推荐点API序列和推荐点类型,推荐点类型主要指JDK的类型;
步骤5)基于层次上下文推断模型来计算API推荐列表,根据推荐点类型及其上下文信息,利用基于层次上下文推断模型的方法找出候选API序列集合,最终得到推荐API列表;
所述步骤2)中,生成层次上下文方法的具体流程为:
a)遍历图中各个子图,去除构成环的多余的边,将调用关系图转化为多个调用关系树,这些树的不同层次构成了推荐需要的层次上下文信息;
b)利用项目package信息和第三方库信息,过滤掉APIj之间的调用关系,保留APIm调用APIm、APIm调用APIj两类关系信息,这些层次上下文将用于后续的API序列库的构建;
所述步骤3)中生成API序列库的方法的具体流程为:
对于步骤2)生成的层次上下文信息,它的每个节点是APIm或者APIj,且APIj都是叶子节点,以根节点为出发点,采用层次遍历的方法依次获得每个APIm子树的叶子节点序列,每个APIm的叶子节点序列就是一个APIj序列,APIm的个数等同于APIj序列的个数,所有的APIj序列构成API序列库,
所述步骤5)中基于层次上下文推断模型的计算方法的具体流程为:
对于两个API序列A和B:
(a)利用1981年Smith Waterman提出的局部字符串比较算法,计算出序列A和B中任意一对API的相似度值,其中API对设为ai,bj,ai是序列A中的一个APIj,i是ai在序列A中的序号;bj是序列B中的一个APIj,j是bj在序列B中的序号,API对相似度记作simi,j,根据预先设置的相似度阈值σ得到新的API对集合,这个集合中的API对相似度都大于阈值σ;
(b)根据API对集合构造API匹配关系图,匹配关系图是一个DAG图即有向无环图,图的结点是(a)步骤中的API对,同时设置一个虚拟的“开始”结点,用于后续的带权最长路径的计算,该结点与图中所有入度为0的节点相连,图的弧表示API对在匹配序列中的先后次序关系,弧的权重等于弧头的相似度值;
(c)根据API匹配关系图的最长路径计算序列相似度,计算匹配关系图的最长带权路径和最长带权路径长度,最终的API序列相似度为带权最长路径的平均相似度,计算公式如下:
(d)生成候选API序列集合和API推荐列表,根据(a)~(c)步骤计算推荐点上下文和API序列库中API序列的相似度值,取top-k的序列为候选API序列集合,再结合推荐点类型从候选API序列集合对推荐点API进行排序,选择top-kAPI作为最终API推荐列表。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于东南大学,未经东南大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910503332.4/1.html,转载请声明来源钻瓜专利网。