CN110297628B - 一种基于同源相关性的api推荐方法 - Google Patents
一种基于同源相关性的api推荐方法 Download PDFInfo
- Publication number
- CN110297628B CN110297628B CN201910502764.3A CN201910502764A CN110297628B CN 110297628 B CN110297628 B CN 110297628B CN 201910502764 A CN201910502764 A CN 201910502764A CN 110297628 B CN110297628 B CN 110297628B
- Authority
- CN
- China
- Prior art keywords
- api
- recommendation
- homology
- apis
- score2
- 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.)
- Active
Links
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于同源相关性的API(Application Programming Interface,应用程序接口)推荐方法,在得到新的API推荐需求之后,首先,根据余弦相似度从历史信息库中筛选出前k个相似的历史信息,提取这k个历史信息所对应的API,根据这些API出现频率计算推荐分数Score1。其次,按照推荐分数Score1的大小对API标记权重,计算同一第三方库中API总权重,通过归一化得到API同源影响分数Score2。最后,API推荐分数Score1和同源影响分数Score2进行求和,获得API推荐分数Score,进行API推荐。本推荐技术考虑API同源相关性,更符合实际编程场景需要,提高开发和维护效率,系统安全性更高。
Description
技术领域
本发明涉及评估方法,具体涉及一种基于同源相关性的API推荐方法,属于API推荐技术领域。
背景技术
API(Application Programming Interface,即应用程序编程接口)推荐是代码推荐领域的一个重要部分,随着第三方库的增多,其包含的功能也越来越丰富,在开发项目的过程中,第三方库的使用可以减少项目中的代码量,进而减少代码测试的工作量。但是由于第三方库中庞大的API数量,开发人员在选择合适的API方法时需要阅读相关介绍文档以及查看相关示例代码,需要花费大量的时间来选择合适的API方法,因此自动API推荐对提高软件开发效率,增加第三方库的有效使用具有重要意义。
API推荐的方法主要有利用k近邻或者循环神经网络或者其他机器学习方法进行训练,这种方法是通过把代码中的方法转化为API向量,通过机器学习后进行推荐。另外针对在项目测试演进过程中,根据需求进行API推荐,也有根据历史信息和API文档描述进行API推荐的方法,但其在基于需求推荐的过程中并没有考虑同源API的使用,忽视了编程人员习惯使用同一第三方库API的问题,使得开发效率降低,维护成本较高。
发明内容
本发明正是针对现有技术中存在的问题,提供一种基于同源相关性的API推荐方法,该方法利用余弦相似度,进行历史信息对应方法推荐分析和同源API对推荐过程影响分析。结合API同源相关性对API进行推荐,解决API推荐中第三方库引用较多的问题,提高开发效率,降低维护成本,系统安全性更高。
为了实现上述目的,本发明的技术方案如下,一种基于同源相关性的API推荐方法,包括如下步骤:
步骤1)获得相似历史信息:通过余弦相似度计算获得新需求和历史信息之间的相似度值,获取相似度排名前k的历史信息;
步骤2)获得API推荐分数Score1:在排名前k的历史信息中,计算每个API的推荐分数Score1;
步骤3)获得API同源影响分数Score2:根据步骤2)的推荐分数Score1对API进行排序,并标记每个API权重,根据API找到对应第三方库,计算同一第三方库(即同源)中API的总权重,通过归一化得到API同源影响分数Score2;
步骤4)API推荐:将步骤2)得到的API的推荐分数Score1和步骤3)得到的API同源影响分数Score2进行求和得到API推荐分数Score。根据得到的推荐分数Score进行API推荐,推荐分数越高越优先推荐。
公式:Score=Score1+Score2。
本发明首先根据余弦相似度从历史信息库中筛选出前k个相似的历史信息,提取这k个历史信息所对应的API,根据这些API出现频率计算推荐分数Score1。其次,按照推荐分数Score1的大小对API标记权重,计算同一第三方库中API总权重,通过归一化得到API同源影响分数Score2。最后,API推荐分数Score1和同源影响分数Score2进行求和,获得API推荐分数Score,进行API推荐。
本发明方法所述步骤1)中,新需求来自用户输入,用符号NewQ表示,NewQ中包含字段{new_description},new_description代表新需求对应描述。历史信息库来自项目与事务跟踪工具,历史信息的集合{Q1,Q2,…,Qm},Qi中的字段为{description,methods},(1≤i≤m)。description代表历史信息对应描述,methods代表历史信息对应方法的集合。通过计算new_description和所有历史信息的description之间的余弦相似度,获得相似度排名前k的历史信息(k>0,k为整数,k为用户输入)。
本发明方法所述步骤2)中对于名为m的API,其推荐分数Score1(m)的计算方法为:
公式:
其中,Countm表示前k个相似历史信息中m出现的次数,k表示选择相似历史信息的数目。
本发明方法所述步骤3)中API同源影响分数Score2具体计算流程为:
(a)根据推荐分数Score1从大到小将API进行排序,标记其权重为n,n-1……(逐次减一),n为API总个数。如果API对应的Score1相同则权重也标记相同。
(b)计算相同第三方库(即同源)的API权重之和,将得到的所有权重之和进行归一化,得到同源影响分数Score2。
相同第三方库(即同源)的API权重之和计算方法为:
公式:Sumtt=∑Weighttt
其中,Sumtt表示名为tt的第三方库中API权重之和,Weighttt表示tt中每个API的权重
同源影响分数Score2计算方法为:
公式:
其中,Score2(m)表示名为m的API的同源影响分数Score2,Sumlibm中libm表示m所在的第三方库,Sumlibm表示该第三方库中API的权重之和,∑Sumlib表示所有第三方库的总权重。
相对于现有技术,本发明具有如下优点,本发明结合历史信息对应方法推荐分析和同源API对推荐过程影响分析,具体优点如下:
(1)推荐过程更严谨合理,推荐结果更符合编程人员习惯。编程人员在使用API时习惯使用相同第三方库的API,因此在推荐过程中结合API同源相关性的影响进行API推荐,推荐结果更准确,也更利于编程人员使用API;
(2)提高开发和维护效率,因为同源API之间契合度高、兼容性好,所以基于同源相关性的API推荐方法,在开发过程中可以有效提高开发效率,更易于测试和维护;
(3)系统的安全性更高,同源API内聚度更高,而且可避免引入过多的第三方库,数据对象更多的在同源API中流动,信息泄露可能性降低,可提高系统安全性。
附图说明
图1是本发明方法的流程图。
具体实施方式:
为了加深对本发明的理解,下面结合附图对本实施例做详细的说明。
实施例1:参见图1,一种基于同源相关性的API推荐方法,所述方法包括以下步骤:
步骤1)获得相似历史信息:通过余弦相似度计算获得新需求和历史信息之间的相似度值,获取相似度排名前k的历史信息。新需求来自用户输入,用符号NewQ表示,NewQ中包含字段{new_description},new_description代表新需求对应描述。历史信息库来自项目与事务跟踪工具,历史信息的集合{Q1,Q2,…,Qm},Qi中的字段为{description,methods},(1≤i≤m)。description代表历史信息对应描述,methods代表历史信息对应方法的集合。通过计算new_description和所有历史信息的description之间的余弦相似度,获得相似度排名前k的历史信息(k>0,k为整数,k为用户输入)。相似度计算如下,通过TF-IDF计算将新需求new_description和历史信息description转化成向量表示,即Vnew_description(NewQ),Vdescription(Qi),然后计算两者的余弦相似度即SimHISTORY(NewQ,Qi);
公式:SimHISTORY(NewQ,Qi)=Cosine(Vnew_description(NewQ),VDescription(Qi),)
步骤2)获得API推荐分数Score1:在排名前k的历史信息中,计算每个API的推荐分数Score1。对于名为m的API,其推荐分数Score1(m)的计算方法为:
公式:
其中,Countm表示前k个相似历史信息中m出现的次数,k表示选择相似历史信息的数目。
步骤3)获得API同源影响分数Score2:根据步骤2)的推荐分数Score1对API进行排序,并标记每个API权重,根据API找到对应第三方库,计算同一第三方库(即同源)中API的总权重,通过归一化得到API同源影响分数Score2。API同源影响分数Score2具体计算流程为:
(a)根据推荐分数Score1从大到小将API进行排序,标记其权重为n,n-1……(逐次减一),n为API总个数。如果API对应的Score1相同则权重也标记相同。
(b)计算相同第三方库(即同源)的API权重之和,将得到的所有权重之和进行归一化,得到同源影响分数Score2。
相同第三方库(即同源)的API权重之和计算方法为:
公式:Sumtt=∑Weighttt
其中,Sumtt表示名为tt的第三方库中API权重之和,Weighttt表示tt中每个API的权重
同源影响分数Score2计算方法为:
公式:
其中,Score2(m)表示名为m的API的同源影响分数Score2,Sumlibm中libm表示m所在的第三方库,Sumlibm表示该第三方库中API的权重之和,∑Sumlib表示所有第三方库的总权重。
步骤4)API推荐:将步骤2)得到的API的推荐分数Score1和步骤3)得到的API同源影响分数Score2进行求和得到API推荐分数Score。根据得到的推荐分数Score进行API推荐,推荐分数越高越优先推荐。
公式:Score=Score1+Score2。
具体应用实施例:
为了方便描述,我们假定有如下简化的应用实例:新需求和历史信息如下所示:
新需求NewQ:
{description:KMS client/server should implement support forgenerating encrypted keys and decrypting them via the REST API beingintroduced by HADOOP-10719.}
历史信息库:
根据我们前面提到的推荐步骤,依次实施:
第一步,计算新需求和历史信息的余弦相似度,得到相似度排名前k的历史信息,本例中得到的排名前三的历史信息为:
第二步,获得API推荐分数Score1,API m的推荐分数Score1(m)的计算方法为:
公式:
按此方法计算得到的API对应Score1如表1。
表1.API及对应Score1值
API | Score1 |
LogFactory.getLog | 1 |
Response.ok | 1 |
Base64.encodeBase64String | 0.67 |
Base64.decodeBase64 | 0.67 |
Preconditions.checkArgument | 0.67 |
FilterConfig.getServletContext | 0.33 |
Preconditions.checkNotNull | 0.33 |
IOUtils.copy | 0.33 |
第三步:获得API同源影响分数Score2。
首先,根据第二步的推荐分数Score1对API进行排序,标记其权重为n,n-1……逐次减一,n为API总个数。如果API对应的Score1相同则权重也标记相同,根据此方法得到的权重为:
表2.API及对应权重
API | 权重 |
LogFactory.getLog | 8 |
Response.ok | 8 |
Base64.encodeBase64String | 7 |
Base64.decodeBase64 | 7 |
Preconditions.checkArgument | 7 |
FilterConfig.getServletContext | 6 |
Preconditions.checkNotNull | 6 |
IOUtils.copy | 6 |
然后,根据API找到对应第三方库,计算相同第三方库中API的权重之和,将得到的所有权重之和进行归一化,得到同源影响分数Score2。
按照此方法得到相同第三方库中API的权重之和及归一化结果为:
表3.API、API权重及对应第三方库
第三方库 | API | 权重 |
commons-logging | LogFactory.getLog | 8 |
servlet-api | Response.ok | 8 |
commons-codec | Base64.encodeBase64String | 7 |
commons-codec | Base64.decodeBase64 | 7 |
guava | Preconditions.checkArgument | 7 |
servlet-api | FilterConfig.getServletContext | 6 |
guava | Preconditions.checkNotNull | 6 |
commons-io | IOUtils.copy | 6 |
表4.第三方库及对应权重
第三方库 | 权重之和 | 归一化 |
commons-logging | 8 | 0.15 |
servlet-api | 14 | 0.25 |
commons-codec | 14 | 0.25 |
guava | 13 | 0.24 |
commons-io | 6 | 0.11 |
根据上述步骤得到同源影响大小Score2。按照此方法得到API对应分数Score2为:
表5.API及对应Score2值
第四步:根据第二步得到的推荐分数Score1和第三步得到的API同源影响分数Score2进行API推荐,推荐分数越高越优先推荐。
将Score1和Score2之和作为最后API的推荐分数Score。
公式:Score=Score1+Score2
根据此方法得到API对应推荐分数Score为:
表6.API及对应推荐分数Score值
API | Score1 | Score2 | Score |
LogFactory.getLog | 1 | 0.15 | 1.15 |
Response.ok | 1 | 0.25 | 1.25 |
Base64.encodeBase64String | 0.67 | 0.25 | 0.92 |
Base64.decodeBase64 | 0.67 | 0.25 | 0.92 |
Preconditions.checkArgument | 0.67 | 0.24 | 0.91 |
FilterConfig.getServletContext | 0.33 | 0.25 | 0.58 |
Preconditions.checkNotNull | 0.33 | 0.24 | 0.57 |
IOUtils.copy | 0.33 | 0.11 | 0.44 |
按照此方法推荐的API序列为:
Response.ok
LogFactory.getLog
Base64.encodeBase64String
Base64.decodeBase64
Preconditions.checkArgument
FilterConfig.getServletContext
Preconditions.checkNotNull
IOUtils.copy
需要说明的是上述实施例,并非用来限定本发明的保护范围,在上述技术方案的基础上所作出的等同变换或替代均落入本发明权利要求所保护的范围。
Claims (1)
1.一种基于同源相关性的API推荐方法,其特征在于,所述方法包括以下步骤:
步骤1)获得相似历史信息,通过余弦相似度计算获得新需求和历史信息之间的相似度值,获取相似度排名前k的历史信息;
步骤2)获得API推荐分数Score1:在排名前k的历史信息中,提取历史信息中的API,根据API出现频率,计算每个API的推荐分数Score1;
步骤3)获得API同源影响分数Score2:根据步骤2)的推荐分数Score1对API进行排序,并标记每个API权重,根据API找到对应第三方库,计算同一第三方库(即同源)中API的总权重,通过归一化得到每个API的同源影响分数Score2;
步骤4)API推荐:将步骤2)得到的API的推荐分数Score1和步骤3)得到的API同源影响分数Score2进行求和得到API推荐分数Score;根据得到的推荐分数Score进行API推荐,推荐分数越高越优先推荐:
公式:Score=Score1+Score2,
所述步骤1)中,新需求来自用户输入,用符号NewQ表示,NewQ中包含字段{new_description},new_description代表新需求对应描述,历史信息库来自项目与事务跟踪工具,历史信息的集合{Q1,Q2,…,Qm},Qi中的字段为{description,methods},(1≤i≤m),description代表历史信息对应描述,methods代表历史信息对应方法的集合,通过计算new_description和所有历史信息的description之间的余弦相似度,获得相似度排名前k的历史信息,其中,k>0,k为整数,k为用户输入;
所述步骤2)中对于名为m的API,其推荐分数Score1(m)的计算方法为:公式:
其中,Countm表示前k个相似历史信息中m出现的次数,k表示选择相似历史信息的数目;
所述步骤3)中API同源影响分数Score2具体计算流程为:
(a)根据推荐分数Score1从大到小将API进行排序,标记其权重为n,n-1,……(逐次减一),n为API总个数,如果API对应的Score1相同则权重也标记相同;
(b)计算相同第三方库(即同源)的API权重之和,将得到的所有权重之和进行归一化,得到同源影响分数Score2;
相同第三方库(即同源)的API权重之和计算方法为:
公式:Sumtt=∑Weighttt
其中,Sumtt表示名为tt的第三方库中API权重之和,Weighttt表示tt中每个API的权重
同源影响分数Score2计算方法为:
公式:
其中,Score2(m)表示名为m的API的同源影响分数Score2,Sumlibm中libm表示m所在的第三方库,Sumlibm表示该第三方库中API的权重之和,∑Sumlib表示所有第三方库的总权重。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910502764.3A CN110297628B (zh) | 2019-06-11 | 2019-06-11 | 一种基于同源相关性的api推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910502764.3A CN110297628B (zh) | 2019-06-11 | 2019-06-11 | 一种基于同源相关性的api推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110297628A CN110297628A (zh) | 2019-10-01 |
CN110297628B true CN110297628B (zh) | 2023-07-21 |
Family
ID=68027846
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910502764.3A Active CN110297628B (zh) | 2019-06-11 | 2019-06-11 | 一种基于同源相关性的api推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110297628B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110806861B (zh) * | 2019-10-10 | 2021-10-08 | 南京航空航天大学 | 一种结合用户反馈信息的api推荐方法及终端 |
CN112269946A (zh) * | 2020-11-06 | 2021-01-26 | 南京航空航天大学 | 一种协同过滤并权衡数据信息的api推荐方法与装置 |
CN117111916A (zh) * | 2023-10-19 | 2023-11-24 | 天津赛象科技股份有限公司 | 基于ai和模块化框架的接口代码自动生成方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104995650A (zh) * | 2011-12-27 | 2015-10-21 | 汤姆森路透社全球资源公司 | 用于使用源于社交媒体的数据和情绪分析来生成复合索引的方法及系统 |
CN109844781A (zh) * | 2016-10-24 | 2019-06-04 | 甲骨文国际公司 | 用于从日志文件识别处理流并使流可视化的系统和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8656365B2 (en) * | 2011-09-01 | 2014-02-18 | Infosys Limited | Systems, methods, and computer-readable media for measuring quality of application programming interfaces |
US10212031B2 (en) * | 2016-06-22 | 2019-02-19 | Amazon Technologies, Inc. | Intelligent configuration discovery techniques |
CN107479879B (zh) * | 2017-07-28 | 2021-09-14 | 扬州大学 | 一种面向软件功能维护的api及其使用推荐方法 |
-
2019
- 2019-06-11 CN CN201910502764.3A patent/CN110297628B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104995650A (zh) * | 2011-12-27 | 2015-10-21 | 汤姆森路透社全球资源公司 | 用于使用源于社交媒体的数据和情绪分析来生成复合索引的方法及系统 |
CN109844781A (zh) * | 2016-10-24 | 2019-06-04 | 甲骨文国际公司 | 用于从日志文件识别处理流并使流可视化的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110297628A (zh) | 2019-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110297628B (zh) | 一种基于同源相关性的api推荐方法 | |
Liu et al. | Mitigating confounding bias in recommendation via information bottleneck | |
Zhang et al. | Optimizing top-n collaborative filtering via dynamic negative item sampling | |
CN107220845B (zh) | 用户复购概率预测/用户质量确定方法、装置及电子设备 | |
CN108322317B (zh) | 一种账号识别关联方法及服务器 | |
JP5627820B1 (ja) | 文書分析システム及び文書分析方法並びに文書分析プログラム | |
US10891631B2 (en) | Framework for generating risk evaluation models | |
US11537905B2 (en) | Inference-based assignment of data type to data | |
CN116932909A (zh) | 模型的推荐方法、装置、处理器以及电子设备 | |
CN110929169A (zh) | 基于改进Canopy聚类协同过滤算法的职位推荐方法 | |
CN113742763A (zh) | 一种基于政务敏感数据混淆加密方法及系统 | |
Wang | Research on bank marketing behavior based on machine learning | |
CN110197078B (zh) | 数据处理方法、装置、计算机可读介质及电子设备 | |
CN110930106A (zh) | 线上面试系统的信息处理方法、装置和系统 | |
CN116382647A (zh) | 一种基于大数据的软件开发管理系统及方法 | |
WO2015118619A1 (ja) | 文書分析システム及び文書分析方法並びに文書分析プログラム | |
CN115391460A (zh) | 一种基于区块链平台的企业数据处理方法 | |
JP5815911B1 (ja) | 文書分析システム、文書分析システムの制御方法、および、文書分析システムの制御プログラム | |
Guo et al. | Fair Learning to Rank with Distribution-free Risk Control | |
JP7345744B2 (ja) | データ処理装置 | |
CN112860150B (zh) | 基于大数据分析的用户页面操作提示方法及装置 | |
CN113704640B (zh) | 用户常驻地址的预测方法、装置、电子设备及存储介质 | |
TWI829558B (zh) | 保護資料摘要的聯邦學習系統及其方法 | |
Hernández-Castro et al. | Breaking CaptchaStar using the BASECASS methodology | |
US11816246B2 (en) | Modeling techniques to classify data sets containing personal identifiable information comprising numerical identifiers |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |