用astminer生成code2vec输入数据格式的方法

code2vec(项目GitHub:https://github.com/tech-srl/code2vec)是发表在POPL 2019上的论文:

Alon, Uri, Meital Zilberstein, Omer Levy, and Eran Yahav. "code2vec: Learning distributed representations of code." Proceedings of the ACM on Programming Languages 3, no. POPL (2019): 1-29.

发表以来也确实受到了很多关注,例如ASE 2019上就至少有两篇论文做的是follow up的工作(虽然都是在一定程度上批评,但也说明了其影响力):

Jiang, Lin, Hui Liu, and He Jiang. "Machine Learning Based Recommendation of Method Names: How Far are We." In 2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE), pp. 602-614. IEEE, 2019.

Kang, Hong Jin, Tegawendé F. Bissyandé, and David Lo. "Assessing the Generalizability of Code2vec Token Embeddings." In 2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE), pp. 1-12. IEEE, 2019.

今天简单总结一下怎么用现有工具来生成code2vec的输入数据,用的是astminer这个工具:

https://github.com/JetBrains-Research/astminer

这个工具实际上也有对应的论文,之前的名字还是叫PathMiner:

Kovalenko, Vladimir, Egor Bogomolov, Timofey Bryksin, and Alberto Bacchelli. "PathMiner: a library for mining of path-based representations of code." In 2019 IEEE/ACM 16th International Conference on Mining Software Repositories (MSR), pp. 13-17. IEEE, 2019.

个人感觉改了的名字还是好一些。我这里总结一下在Windows上的运行方法:

下载其Zip或者git clone后,在其目录下运行:

gradle shadowJar

注意这里Gradle的版本需要在5.5以上。然后我们在build\shadow目录下可以看到生成了一个lib-0.5.jar的jar包(有可能由于版本号不同,名字稍有差别),实际上我们直接运行这个jar包就可以得到输出了。

不过由于astminer的ReadMe.md里写的是运行sh脚本,我这里再简单说说在Windows下运行sh脚本的方法,其实有很多朋友也总结过了:

https://blog.csdn.net/weixin_42376686/article/details/82391410

我们在git的bin目录下找到sh.exe,例如我的是在这里:D:\Program Files\Git\bin

双击运行,然后定位到astminer的目录,这里有个小问题需要注意一下,例如我的astminer目录在这里:D:\Projects\astminer,如果我直接输入:

cd D:\Projects\astminer

就会报:bash: cd: D:Projectsastminer: No such file or directory

可以看到原因很简单,没有识别Windows下的分隔符,所以应该输入的是:

cd D:\\Projects\\astminer

然后就可以按照github上的说明运行:

./gradlew shadowJar

然后再运行:

./cli.sh code2vec

以及必要参数就可以生成code2vec需要的数据了。看到这里似乎一定要在Linux下运行,但实际上我们看看cli.sh的内容,发现它只是运行了上面那个jar包:

#!/bin/bash

java -jar build/shadow/lib-0.5.jar "$@"

所以我们其实直接运行上面的jar包也能得到一样的结果,所以我们直接在windows cmd中运行:

java -jar lib-0.5.jar code2vec --lang cpp --project %源代码的目录% --output %需要生成的code2vec的输入数据的目录%

即可以得到相应的输出。是不是很方便?感觉这个工具确实也是造福人类啊。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值