CD4Py:Python 的代码重复数据删除
项目描述
介绍
CD4Py是 Python 编程语言的重复代码删除工具。它检测接近且完全重复的源代码文件。要在源代码文件上训练机器学习模型,必须从数据集中识别和删除重复的源代码文件。否则,代码重复会显着影响基于机器学习的工具的实用性,尤其是在看不见的数据上。
快速安装
$ git clone https://github.com/saltudelft/CD4Py.git & cd CD4Py
$ pip install .
用法
$ cd4py --help
usage: cd4py [-h] --p P --od OD --ot OT [--d D] [--th TH] [--k K] [--tr TR]
Code De-Duplication for Python
optional arguments:
-h, --help show this help message and exit
--p P Path to Python projects
--od OD Output folder to store detected duplicate files.
--ot OT Output folder to store tokenized files.
--d D Dimension of TF-IDF vectors [default: 2048].
--th TH Threshold to identify duplicate files [default: 0.95].
--k K Number of nearest neighbor [default: 10].
--tr TR Number trees to build the index. More trees gives higher
precision but slower [default: 20].
例子
- 运行
CD4Py以识别 Python 数据集的重复文件
$ cd4py --p $PYHON_DATASET --ot $TOKENS --od py_dataset_duplicates.jsonl.gz --d 1024
替换$PYHON_DATASET为 Python 项目文件夹$TOKENS的路径以及存储标记化项目文件的路径。另外请注意,检测到的重复文件将存储在文件中py_dataset_duplicates.jsonl.gz。
- 以下代码示例显示了使用示例文件删除重复文件
py_dataset_duplicates.jsonl.gz:
from dpu_utils.utils.dataloading import load_jsonl_gz
import random
# Selects randomly a file from each cluster of duplicate files
clusters_rand_files = [l.pop(random.randrange(len(l))) for l in load_jsonl_gz('py_dataset_duplicates.jsonl.gz')]
duplicate_files = [f for l in load_jsonl_gz('py_dataset_duplicates.jsonl.gz') for f in l]
duplicate_files = set(duplicate_files).difference(set(clusters_rand_files))
方法
重复代码删除工具使用以下CD4Py过程来识别 Python 代码语料库中的重复文件:
tokenize使用Python 标准库的模块对代码语料库中的所有源代码文件进行标记。- 通过仅选择标识符标记和删除语言关键字来预处理标记化的源文件。
- 使用 TF-IDF 方法将预处理的标记化文件转换为矢量表示。
- 执行
k-最近邻搜索以查找k每个源代码文件的候选重复文件。接下来,通过考虑阈值过滤掉候选重复文件t。 - 假设相似性是可传递的,查找重复源代码文件的集群。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
cd4py-0.1.0.tar.gz
(6.8 kB
查看哈希)
内置分布
cd4py-0.1.0-py3-none-any.whl
(20.2 kB
查看哈希)