快速检测源代码Corpus中重复代码的工具Near-Duplicate Code Detector的简单使用方法(以Win10为例)

使用这个工具是为了响应Reviewer的建议,另外我也看到一些新的arXiv论文中用到了这个工具,例如这篇:

Buratti, Luca, Saurabh Pujar, Mihaela Bornea, Scott McCarley, Yunhui Zheng, Gaetano Rossiello, Alessandro Morari et al. "Exploring Software Naturalness throughNeural Language Models." arXiv preprint arXiv:2006.12641 (2020).

不得不说,Reviewer们有时候也很与时俱进啊!这个工具对应的论文是这篇:

Allamanis, Miltiadis. "The adverse effects of code duplication in machine learning models of code." In Proceedings of the 2019 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, pp. 143-153. 2019.

按照论文中的介绍,在进行machine learning或deep learning相关的源码分析的时候,应该去掉重复的源码corpus。工具的链接是:https://github.com/Microsoft/near-duplicate-code-detector

其实工具的使用还是很简单的,按照其README.md中的介绍,首先应该对源代码进行tokenize,可以使用tokenizers目录下的各种语言对应的工具,由于我需要处理的是Java,所以简单试了一下Java工具。可以看到:https://github.com/microsoft/near-duplicate-code-detector/tree/master/tokenizers/java,Java工具也是用Java写的,并且是个maven项目。所以在eclipse中:import——Existing Maven Projects——然后定位到含有pom.xml文件的目录下,就可以正常导入了。

README.md中并没有写怎么运行这个tokenizer,但其源代码里很清楚写了:"Usage <projectsFolder> <outputFolder> true|false",所以运行的时候,需要设置如下参数:

%源代码目录% %Tokenize输出目录% true或者false

最后一个boolean变量对应onlyIdentifiers,具体含义大家可以看看源码。运行完之后就可以在指定的输出目录生成一个类似于org.jsonl.gz的压缩文件,把这个压缩文件拷贝到:near-duplicate-code-detector-master\DuplicateCodeDetector目录下,并放在某个目录中,例如我放在了Ant-1.7这个目录下。然后cmd定位到这个目录下,运行:

dotnet run DuplicateCodeDetector.csproj --dir=Ant-1.7

需要注意的是,这里首先需要安装dotnet SDK 2.1,我在这一步又踩了一个坑:https://blog.csdn.net/qysh123/article/details/107910328,另外需要注意的是,如果安装新版本,如.NET core SDK 3.1,也是不能正常运行的(看来向下兼容还是有问题啊),会报类似于下面这样的错:

It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '2.1.0' was not found.
  - The following frameworks were found:
      3.1.6 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

成功运行后就会生成:DuplicateCodeDetector.csproj.json 这个文件,具体含义大家一看便知。

就简单总结这么多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值