用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的輸入數據的目錄%

即可以得到相應的輸出。是不是很方便?感覺這個工具確實也是造福人類啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章