Skip to main content

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 代码语料库中的重复文件:

  1. tokenize使用Python 标准库的模块对代码语料库中的所有源代码文件进行标记。
  2. 通过仅选择标识符标记和删除语言关键字来预处理标记化的源文件。
  3. 使用 TF-IDF 方法将预处理的标记化文件转换为矢量表示。
  4. 执行k-最近邻搜索以查找k每个源代码文件的候选重复文件。接下来,通过考虑阈值过滤掉候选重复文件t。
  5. 假设相似性是可传递的,查找重复源代码文件的集群。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cd4py-0.1.0.tar.gz (6.8 kB 查看哈希)

已上传 source

内置分布

cd4py-0.1.0-py3-none-any.whl (20.2 kB 查看哈希)

已上传 py3