CN112269946B - 一种协同过滤并权衡数据信息的api推荐方法与装置 - Google Patents
一种协同过滤并权衡数据信息的api推荐方法与装置 Download PDFInfo
- Publication number
- CN112269946B CN112269946B CN202011228952.0A CN202011228952A CN112269946B CN 112269946 B CN112269946 B CN 112269946B CN 202011228952 A CN202011228952 A CN 202011228952A CN 112269946 B CN112269946 B CN 112269946B
- Authority
- CN
- China
- Prior art keywords
- api
- similarity
- interface
- statement
- item
- 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
- 238000000034 method Methods 0.000 title claims abstract description 33
- 238000001914 filtration Methods 0.000 title claims abstract description 20
- 238000005303 weighing Methods 0.000 title abstract description 8
- 230000006870 function Effects 0.000 claims description 19
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 6
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 230000000694 effects Effects 0.000 abstract description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 72
- 238000004364 calculation method Methods 0.000 description 7
- 230000004913 activation Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9536—Search customisation based on social or collaborative filtering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9535—Search customisation based on user profiles and personalisation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种协同过滤并权衡数据信息的API推荐方法与装置,方法包括:获取当前开发项目的所有调用关系信息,包括项目中已开发部分的声明和声明中调用的API接口;根据处理过后的调用关系,从代码数据库中先推荐出与当前开发项目相似的三个项目,再从三个相似项目中的所有声明中获取与当前在开发声明相似度超过阈值的声明,再由相似声明集合中的所有API接口作为候选列表;最后由这些声明中所含有的调用进行协同过滤评分,为用户推荐所需接口。本发明在进行代码推荐时考虑使用了代码之间的调用关系信息,引入的近邻因子根据相似声明与调用数量上的关系,协调了协调过滤推荐时声明与调用对最后评分结果的影响,能够获得更好的推荐效果。
Description
技术领域
本发明涉及代码推荐领域,具体涉及一种考虑代码调用关系的协同过滤并权衡数据信息的API推荐方法与装置。
背景技术
API是指应用程序编程接口,能够为程序员快速复用已有的库中的函数功能,简化代码的开发过程。而在使用API的过程中,庞大的API数目往往令程序员手足无措,就算在库中已有程序员所需实现功能的接口,程序员往往不知道这个接口的名称而不得不从新自己写一遍实现。而基于调用关系的API推荐技术能够根据已经开发代码的上下文信息进行判断,为用户推荐合适的API。
代码间的调用关系指的是指的是整个项目中对各个声明的调用以及声明下队各个接口的调用。如下面的代码所示:
其中这一整个findByIdentifier函数就可以看做为一个声明,而许多个这样声明则组成了我们的整个开发项目,而在这声明中使用了许多个API接口,例如log.severe、entityManager.getCriteriaBuilder、log.find等等。我们的目的就是要根据已经开发的一部分代码,根据上下文间调用的关系来推荐接下来开发者可能需要用到的API。
由粗粒度到细粒度API推荐包括以下几个步骤:
(1)对项目间的相似度计算
(2)对声明间的相似度计算
(3)对候选列表API的协同过滤评分
在对项目间的相似计算中往往会因为部分调用的影响权值过大而对整体的相似性进行了误判造成推荐的不准确,而声明间的相似度计算往往采取推荐固定k个相似声明,而往往实际情况中与各个声明较为相似的声明数量不是固定的,固定选取k个会造成对相似度较高的声明的遗漏或将相似度极地的声明也选作为相似声明。而在最后对API的推荐评分中,权重的固定没有考虑到相似声明与推荐API具体数量的关系,这往往会造成低效的推荐。
发明内容
发明目的:针对现有技术的不足,本发明的目的在于提供一种协同过滤并权衡数据信息的API推荐方法与装置,提高推荐的准确性,使用户能够更好的使用推荐的API。
技术方案:为实现上述发明目的,本发明采用如下技术方案:
一种协同过滤并权衡数据信息的API推荐方法,包括如下步骤:
(1)获取当前开发项目的所有调用关系信息,包括项目中已开发部分的声明和声明中调用的API接口;
(2)将代码数据库中已有的项目的所有API接口编号,计算代码数据库中已有的项目与当前开发项目的相似度,数据库中相似度前三的项目作为候选集,再获取相似项目中的所有声明,计算这些声明与当前开发的声明的相似度,进行重排序,最后获取相似度超过阈值μ的声明,再由相似声明集合中的所有API接口作为候选列表;
(3)根据候选列表中的所有API接口,计算近邻因子权重和API推荐评分并进行排序,为用户推荐所需接口。
作为优先,所述方法根据如下数据处理步骤生成代码数据库:
从Java应用程序项目中抽取Java文件,解析每个Java文件,提取其中的函数名与Java文件间的调用关系,并且提取函数中调用其他函数的函数名,并且保留层次的API调用关系,并进行格式化存储在数据库中;
收集格式化API的结构信息,包括:项目名称,项目调用的声明名称,声明调用的API接口名称。
作为优先,所述方法根据如下公式计算项目间的相似度:
其中,p表示当前正在开发的项目,q表示计算与当前项目相似度的代码数据库中的项目,n表示代码数据库中所有API接口的种类数,其中φt表示编号为t的接口在当前项目p中的权重,ωt表示编号为t的接口在项目q中的权重;tf为当前项目调用编号为t的接口的次数,k、b为BM25中的给定参数,L为当前项目调用接口数量与平均项目调用接口数量的比值,为逆文本频度算法,at为数据库中调用过t接口的项目数,|P|为数据库中的项目总数。
作为优先,所述方法根据如下公式计算声明间的相似度:
其中,d为当前正在开发的声明,e为相似项目中待计算相似度的声明,F()表示声明中所有调用接口的集合。
作为优先,所述方法根据如下数据处理步骤计算API的评分:
topsim(d)={e|sim(d,e)>μ}
根据如下公式计算候选集中的API评分:
其中,Rp,d,i为当前开发者正在开发的项目p中的声明d对API接口i推荐的评分,Re,i为声明e对API接口i调用的次数,为声明e对其调用的所有API接口的平均调用次数,Rd,j为声明d对API接口j调用的次数,/>为筛选出的相似声明对接口j的平均调用次数,λ为近邻因子,/>m为相似声明数量,n为候选列表的API接口数量;List(i)为候选列表中与API接口i相似的接口集合,API接口i,j的相似度为i,j对应的API文档的语义相似度。
基于相同的发明构思,本发明提供的一种协同过滤并权衡数据信息的API推荐装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的一种协同过滤并权衡数据信息的API推荐方法。
有益效果:本发明在进行代码推荐时考虑使用了代码之间的调用关系信息,并且使用到了BM25与改进的KNN进行优化,BM25使用在查找相似项目的过程中相较于传统的TF-IDF使得单个调用对相似度影响控制在一定范围内从而能得到一个更加兼顾全体影响而非单个影响的相似度值,并且在选取相似声明的过程中使用了阈值进行控制而非传统的KNN,增加了相似选取的准确度,引入的近邻因子λ则根据相似声明与调用数量上的关系,协调了协调过滤推荐时声明与调用对最后评分结果的影响,使得推荐的API与当前正在开发项目之间的关联度更高,用户能够获得更好的推荐效果。
附图说明
图1为本发明实施例的方法流程图。
具体实施方式
下面结合附图和具体实施例对本发明做进一步说明。
如图1所示,本发明实施例公开的一种协同过滤并权衡数据信息的API推荐方法主要涉及两个阶段,数据处理阶段和推荐阶段,其核心在于推荐阶段。
在数据处理阶段,输入是从开源软件托管平台Github收集的开源Java应用程序项目,输出是代码数据库中我们筛选出的几个可能开发者要用到的API调用,该代码数据库的构建是:从Java应用程序项目中抽取Java文件,解析每个Java文件,提取其中的函数名与Java文件间的调用关系,并且提取函数中调用其他函数的函数名,并且保留层次的API调用关系,并进行格式化存储在数据库中;收集格式化API的结构信息,包括:项目名称,项目调用的声明名称,声明调用的API接口名称。其具体步骤如下:
1)从Java应用程序项目中抽取Java文件并将它们存储在存储库中。
2)解析每个Java文件,抽取其中的函数名与API接口名称。
3)格式化的结构信息,其中包括:该项目的项目名,项目下属的声明名称,以及声明中调用的API接口名称。形如:
com/sun/activation/registries/MimeTypeFile/parseEntry(java.lang.String)#java/lang/String/length()
4)对于数据库中的各个已有记录进行筛选,去除所有重复的记录。
在推荐阶段的搜索过程中,主要包括:
(1)获取当前开发项目的所有调用关系信息,比如已开发部分调用的函数,这一部分函数我们称之为声明,而这些声明又会调用许多API接口,因此我们将获取正在开发项目的整个项目-声明-接口的三层调用关系。
(2)将代码数据库中已有的项目的所有API接口编号,计算代码数据库中已有的项目与当前开发项目的相似度,数据库中相似度前三的项目作为候选集,再获取相似项目中的所有声明,计算这些声明与当前开发的声明的相似度,进行重排序,最后获取相似度超过阈值μ的声明,再由相似声明集合中的所有API接口作为候选列表。
具体地,本步骤中根据如下调整后的余弦相似度公式计算代码数据库中项目与当前项目的相似度:
其中,p表示当前正在开发的项目,q表示计算与当前项目相似度的代码数据库中的项目,n表示代码数据库中所有API接口的种类数,其中φt表示编号为t的接口在当前项目p中的权重;tf为当前项目调用编号为t的接口的次数,k、b为BM25中的给定参数,我们根据Lucence的常用经验值设置k=1.2,b=0.75,L为当前项目调用数量与平均项目调用接口数量的比值,为逆文本频度算法,at为数据库中调用过t接口的项目数,|P|为数据库中的项目总数。同样的,ωt表示接口t在项目q中的权重,算法与φt相同。
根据如下公式计算声明间相似度:
其中,d为当前正在开发的声明,e为相似项目中待计算相似度的声明,F()表示声明中所有调用接口的集合。
根据如下公式选取相似的声明集合:
topsim(d)={e|sim(d,e)>μ}
其中,μ为代码数据库中所有声明间的平均相似度。
(3)根据候选列表中的所有API接口,计算近邻因子权重和API推荐评分并进行排序,为用户推荐所需接口。
具体地,根据如下公式计算候选集中的API评分:
其中,Rp,d,i为当前开发者正在开发的项目p中的声明d对API接口i推荐的评分,Re,i为声明e对API接口i调用的次数,为声明e对其调用的所有调用的平均调用次数,Rd,j为声明d对API接口j调用的次数,/>为筛选出的相似声明对接口j的平均调用次数。λ为近邻因子,可以根据实际情况选取,我们为了平衡声明集合与调用集合对推荐评分的权重,选取λ的计算公式如下,m为相似声明数量,n为候选列表的API接口数量:
其中,API接口i,j的相似度计算公式如下:
sim(i,j)=LSI(idoc,jdoc)
其中,LSI(Latent Semantic Indexing)为第三方的潜在语义相似度处理工具,idoc,jdoc分别为API接口i,j对应的API文档,LSI能够计算出API文档的相似度。List(i)为候选列表中与API接口i相似的接口集合。其公式如下:
List(i)={j|sim(i,j)>μ'}
其中,μ'为API接口间的平均相似度。
本步骤中,在计算权重重新排序阶段主要包括:
1)根据筛选出的相似声明与候选列表API的数量计算出加权参数λ。
2)根据λ的权重对候选列表的API进行协同过滤并且获得各个API的最终评分。
3)根据评分降序选取前N个API。
4)最后将所有结果按照排序分数从高到低进行排列,最终反馈给用户。
本发明使用BM25方法来控制单一变量的影响程度,以及使用阈值选取若干个相似度相近的声明,这一步在传统KNN的基础上做出了优化而能打到更好的实际效果,最后利用动态的参数来决定声明与调用信息在最后推荐评分中的权值。BM25是一种用来评价搜索词和文档之间相关性的算法,它是一种基于概率检索模型提出的算法。它是一种在TF-IDF基础上进一步进行优化的算法,能够使得单个变量的影响值控制在一定范围内,使得得出的代码之间的相似度能更加概括整个上下文所有信息的影响而不是仅仅被单个相关性特别高的调用影响。而BM25算法一般是使用在文本的相似度计算中,为了能够将其运用在代码推荐的过程中,我们将其进行了一定程度的转换和转变以能适应代码推荐的任务。而使用根据数据库中声明的样本计算出的阈值μ来选取相似声明相较于传统KNN能够更好的保证选取出的声明之间的相似性。根据动态的加权参数λ由具体的相似声明与候选API数量的差异来决定协同过滤的权重究竟是以相似声明间信息的影响为主还是API间信息的影响为主。
基于相同的发明构思,本发明实施例公开的一种协同过滤并权衡数据信息的API推荐装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被加载至处理器时实现上述的协同过滤并权衡数据信息的API推荐方法。
Claims (3)
1.一种协同过滤并权衡数据信息的API推荐方法,其特征在于,包括如下步骤:
(1)获取当前开发项目的所有调用关系信息,包括项目中已开发部分的声明和声明中调用的API接口;
(2)将代码数据库中已有的项目的所有API接口编号,计算代码数据库中已有的项目与当前开发项目的相似度,数据库中相似度前三的项目作为候选集,再获取相似项目中的所有声明,计算这些声明与当前开发的声明的相似度,进行重排序,最后获取相似度超过阈值μ的声明,再由相似声明集合中的所有API接口作为候选列表;
(3)根据候选列表中的所有API接口,计算近邻因子权重和API推荐评分并进行排序,为用户推荐所需接口;
所述方法根据如下公式计算项目间的相似度:
其中,p表示当前正在开发的项目,q表示计算与当前项目相似度的代码数据库中的项目,n表示代码数据库中所有API接口的种类数,其中表示编号为t的接口在当前项目p中的权重,ωt表示编号为t的接口在项目q中的权重;tf为当前项目调用编号为t的接口的次数,k、b为BM25中的给定参数,L为当前项目调用接口数量与平均项目调用接口数量的比值,为逆文本频度算法,at为数据库中调用过t接口的项目数,|P|为数据库中的项目总数;
所述方法根据如下公式计算声明间的相似度:
其中,d为当前正在开发的声明,e为相似项目中待计算相似度的声明,F()表示声明中所有调用接口的集合;
所述方法根据如下数据处理步骤计算API的评分:
topsim(d)={e|sim(d,e)>μ}
根据如下公式计算候选集中的API评分:
其中,Rp,d,i为当前开发者正在开发的项目p中的声明d对API接口i推荐的评分,Re,i为声明e对API接口i调用的次数,为声明e对其调用的所有API接口的平均调用次数,Rd,j为声明d对API接口j调用的次数,/>为筛选出的相似声明对接口j的平均调用次数,λ为近邻因子,/>m为相似声明数量,n为候选列表的API接口数量;list(i)为候选列表中与API接口i相似的接口集合,API接口i,j的相似度为i,j对应的API文档的语义相似度。
2.根据权利要求1所述的协同过滤并权衡数据信息的API推荐方法,其特征在于,所述方法根据如下数据处理步骤生成代码数据库:
从Java应用程序项目中抽取Java文件,解析每个Java文件,提取其中的函数名与Java文件间的调用关系,并且提取函数中调用其他函数的函数名,并且保留层次的API调用关系,并进行格式化存储在数据库中;
收集格式化API的结构信息,包括:项目名称,项目调用的声明名称,声明调用的API接口名称。
3.一种协同过滤并权衡数据信息的API推荐装置,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述计算机程序被加载至处理器时实现根据权利要求1-2任一项所述的一种协同过滤并权衡数据信息的API推荐方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011228952.0A CN112269946B (zh) | 2020-11-06 | 2020-11-06 | 一种协同过滤并权衡数据信息的api推荐方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011228952.0A CN112269946B (zh) | 2020-11-06 | 2020-11-06 | 一种协同过滤并权衡数据信息的api推荐方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112269946A CN112269946A (zh) | 2021-01-26 |
CN112269946B true CN112269946B (zh) | 2024-05-24 |
Family
ID=74345962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011228952.0A Active CN112269946B (zh) | 2020-11-06 | 2020-11-06 | 一种协同过滤并权衡数据信息的api推荐方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112269946B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297628A (zh) * | 2019-06-11 | 2019-10-01 | 东南大学 | 一种基于同源相关性的api推荐方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11263062B2 (en) * | 2019-02-06 | 2022-03-01 | Fujitsu Limited | API mashup exploration and recommendation |
-
2020
- 2020-11-06 CN CN202011228952.0A patent/CN112269946B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110297628A (zh) * | 2019-06-11 | 2019-10-01 | 东南大学 | 一种基于同源相关性的api推荐方法 |
Non-Patent Citations (1)
Title |
---|
基于服务相似度的API服务推荐方法研究;李泽平;;贵州师范学院学报(第06期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112269946A (zh) | 2021-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108717470B (zh) | 一种具有高准确度的代码片段推荐方法 | |
CN109344230B (zh) | 代码库文件生成、代码搜索、联结、优化以及移植方法 | |
Moussiades et al. | PDetect: A clustering approach for detecting plagiarism in source code datasets | |
US8244766B2 (en) | Applying a model of a persona to search results | |
JP4746439B2 (ja) | 文書検索サーバおよび文書検索方法 | |
US20060248067A1 (en) | Method and system for providing a shared search index in a peer to peer network | |
CN107479879B (zh) | 一种面向软件功能维护的api及其使用推荐方法 | |
CN116431837B (zh) | 基于大型语言模型和图网络模型的文档检索方法和装置 | |
CN112883030A (zh) | 数据收集方法、装置、计算机设备和存储介质 | |
Yonai et al. | Mercem: Method name recommendation based on call graph embedding | |
US20110264642A1 (en) | Dynamic computation engine in search stack | |
CN112269946B (zh) | 一种协同过滤并权衡数据信息的api推荐方法与装置 | |
JP4199193B2 (ja) | 関連情報管理方法、プログラム及び装置 | |
JP3806820B1 (ja) | 電子ファイル関連強度自動算出プログラム | |
CN116894495A (zh) | 用注释增强机器学习管道的方法、计算机可读介质和系统 | |
JP2020160494A (ja) | 情報処理装置、文書管理システム及びプログラム | |
JP5613536B2 (ja) | 利用者の要求に応じて動的にもっとも適したイメージを抽出して提供するための方法、システム及びコンピューター判読可能な記録媒体 | |
JP2019133534A (ja) | 併合方法、併合装置、および併合プログラム | |
WO2017175247A1 (en) | Method and system for generating content from search results rendered by a search engine | |
CN112817569A (zh) | 一种面向分析的数据快速映射方法、设备及存储介质 | |
Asaduzzaman et al. | PARC: Recommending API methods parameters | |
WO2002033592A1 (en) | Multikeyed table implementable on a personal digital assistant | |
CN112214494A (zh) | 检索方法及装置 | |
JP5389683B2 (ja) | 重要キーワード抽出装置及び方法及びプログラム | |
Chen et al. | Analyzing User Behavior History for constructing user profile |
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 |