# 清洗数据脚本 **Repository Path**: goalaaa/clean-data-script ## Basic Information - **Project Name**: 清洗数据脚本 - **Description**: 脚本主要用于大模型语料的采样和各种清洗任务 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-03-30 - **Last Updated**: 2024-03-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据清洗多任务脚本 [TOC] ## 一、 项目背景 脚本主要用于大模型语料的采样和各种清洗任务 ## 二、使用方法 1.修改main函数中的目录 ```python # 预训练目录 root_dir = '' # 采样结果目录 sample_dir = '' ``` 2.在tasks列表中添加任务 例: ```python # # 中文数据集 # { # 'func': 'wudao',//将要使用的功能方法 # 'path': 'chinese-corpus/WuDaoCorpus2.0_base_200G',//子目录 # 'sample': { # # 'n': 10, # 'frac': 0.005,//采样比例 # }, # }, ``` ## 三、项目函数 本项目包含以下用于数据处理的函数: ### Function 1:`wudao(filename, sample, dest_file)` 该函数用于处理JSON文件并提取其中的 'content' 列。参数包括: - `filename`:JSON文件的路径。 - `sample`:样本参数,用于指定抽样的方式和数量。 - `dest_file`:处理结果的目标文件名。 函数功能如下: 1. 使用 `pd.read_json` 方法读取JSON文件并转换为DataFrame。 2. 检查DataFrame中是否存在 'content' 列,并确保DataFrame不为空。 3. 根据指定的样本参数对DataFrame进行抽样。 4. 去除含有缺失值的行。 5. 将提取的 'content' 列保存到目标文件。 ### Function 2:`en_zh_corpus(filename, sample, dest_file)` 该函数用于处理包含英文和中文对应的语料库文件。参数包括: - `filename`:语料库文件的路径。 - `sample`:样本参数,用于指定抽样的方式和数量。 - `dest_file`:处理结果的目标文件名。 函数功能如下: 1. 使用 `pd.read_csv` 方法读取语料库文件,并指定分隔符和列名。 2. 检查DataFrame是否为空,如果为空则返回。 3. 对DataFrame进行去重操作,去除重复的中文和英文对。 4. 进行文本清洗和处理,包括去除停用词和敏感词等。 5. 将清洗后的结果保存到目标文件。 ### Function 3:`redpajama(filename, sample, dest_file)` 该函数用于处理包含文本数据的JSON文件。参数包括: - `filename`:JSON文件的路径。 - `sample`:样本参数,用于指定抽样的方式和数量。 - `dest_file`:处理结果的目标文件名。 函数功能如下: 1. 使用 `pd.read_json` 方法读取JSON文件并转换为DataFrame。 2. 检查DataFrame中是否存在 'text' 列,并确保DataFrame不为空。 3. 根据指定的样本参数对DataFrame进行抽样。 4. 去除含有缺失值的行。 5. 将提取的 'text' 列保存到目标文件。 ### Function 4: `qingbao_zh_sangfor(filename, sample, dest_file)` 该函数用于处理包含中文文本的文件。参数包括: - `filename`:文件的路径。 - `sample`:样本参数,用于指定抽样的方式和数量。 - `dest_file`:处理结果的目标文件名。 函数功能如下: 1. 使用 `open` 方法打开文件并按行读取文本内容。 2. 定义一组正则表达式模式,用于匹配需要删除的文本部分。 3. 使用 `CleanData` 类进行文本清洗,包括去除停用词和规则处理。 4. 逐行处理文本内容,根据正则表达式模式删除指定的文本部分。 5. 将处理后的文本行保存到列表中。 6. 将列表中的文本行连接成最终的文本字符串。 7. 使用另一组正则表达式模式删除文本中的参考文献部分。 8. 将最终的文本行按行进行去重,并将结果保存到目标文件中。 ### Function 5: `qingbao_zh_common(filename, sample, dest_file)` 该函数用于处理包含中文文本的文件。参数包括: - `filename`:文件的路径。 - `sample`:样本参数,用于指定抽样的方式和数量。 - `dest_file`:处理结果的目标文件名。 函数功能如下: 1. 检查文件大小,如果小于500字节则返回。 2. 检查文件扩展名,如果不是txt文件则返回。 3. 使用 `CleanData` 类获取敏感词和停用词列表。 4. 使用 `open` 方法打开文件并读取全部文本内容。 5. 使用正则表达式删除参考文献部分。 6. 使用 `CleanData` 类进行文本清洗,包括去除敏感词和规则处理。 7. 使用正则表达式模式删除指定的文本部分。 8. 使用 `CleanData` 类进行文本清洗,包括去除停用词和规则处理。 9. 将处理后的文本行保存到列表中。 10. 将列表中的文本行连接成最终的文本字符串。 11. 将最终的文本行按行进行去重,并将结果保存到目标文件中。 ### Function 6: `qingbao_zh_jsonl(filename, sample, dest_file)` 该函数用于处理包含中文文本的 JSONL 文件。参数包括: - `filename`:文件路径。 - `sample`:用于指定抽样方法和数量的样本参数。 - `dest_file`:处理结果的目标文件名。 功能: 1. 检查文件是否以 `.jsonl` 结尾,如果不是,则返回。 2. 使用 `pd.read_json` 函数读取 JSONL 文件为 DataFrame。 3. 检查 DataFrame 是否为空或是否缺少 'content' 列,如果是,则返回。 4. 对 DataFrame 进行去重和删除空值操作。 5. 提取 'content' 列的文本内容并转换为列表。 6. 初始化 `CleanData` 类和敏感词列表。 7. 使用 `HarvestText` 初始化 `ht` 对象。 8. 遍历文本内容列表,进行一系列处理步骤: - 清除参考文献引用部分。 - 清除中文标题部分。 - 清除图表部分。 - 清除 HTML 元素。 - 进行敏感词过滤。 - 进行基础清洗操作。 - 进行标点符号过滤。 - 进行纯数字过滤。 - 进行非中英文字符过滤。 - 进行纯数字/单词过滤。 - 过滤长度小于等于5的文本。 9. 将处理结果写入目标文件。 10. 输出日志信息。 ### Function 7: qingbao_zh_Function(filename, sample, dest_file) 该函数用于处理包含中文文本的 TXT 文件。参数和功能与 `qingbao_zh_jsonl` 函数类似,不同之处在于读取文件和处理文本内容的方式略有不同。 该项目还包含以下敏感词列表文件: - `色情类.txt` - `中文广告.txt` - `中文黑名单.txt` ### Function 8: `qingbao_en_jsonl(filename, sample, dest_file)` 该函数用于处理包含英文文本的 JSONL 文件。参数包括: - `filename`:文件路径。 - `sample`:样本参数,用于指定抽样方法和数量。 - `dest_file`:处理结果的目标文件名。 功能: 1. 检查文件是否以 `.jsonl` 结尾或文件名中是否包含 'rdot.org',如果是,则返回。 2. 使用 `pd.read_json` 函数读取 JSONL 文件为 DataFrame。 3. 检查 DataFrame 是否为空或是否缺少 'content' 列,如果是,则返回。 4. 对 DataFrame 进行去重和删除空值操作。 5. 提取 'content' 列的文本内容并转换为列表。 6. 初始化 `CleanData` 类。 7. 初始化 `HarvestText` 对象。 8. 遍历文本内容列表,进行一系列处理步骤: - 清除参考文献引用部分。 - 清除英文标题部分。 - 清除图表部分。 - 清除 HTML 元素。 - 进行基础清洗操作。 - 进行标点符号过滤。 - 过滤长度小于等于5的文本。 9. 将处理结果写入目标文件。 10. 输出日志信息。 ### function 9: `mss_pdf_zh(filename, sample, dest_file)` 该函数用于处理包含中文文本的 PDF 文件。参数和功能与 `qingbao_en_jsonl` 函数类似,不同之处在于读取文件和处理文本内容的方式略有不同。 ### function 10: `mss_pdf_instruction(filename, sample, dest_file)` 该函数用于处理包含中文文本的 PDF 文件。参数包括: - `filename`:文件路径。 - `sample`:样本参数,用于指定抽样方法和数量。 - `dest_file`:处理结果的目标文件名。 功能: 1. 检查文件是否以 `.pdf` 结尾,如果不是,则返回。 2. 使用 `pdfplumber.open` 函数打开 PDF 文件,并遍历每一页提取文本内容。 3. 将提取的文本内容连接为一个字符串。 4. 使用正则表达式去除版权声明和免责声明。 5. 使用正则表达式提取漏洞名称、漏洞详情信息和修复建议,并存储在 `json_info` 字典中。 6. 使用 `jsonlines.open` 函数将 `json_info` 写入目标文件。 7. 输出日志信息。 ### function 11: `qingbao(filename, sample, dest_file)` 该函数用于处理包含 JSONL 格式的文件(含有 'content' 列)。参数包括: - `filename`:文件路径。 - `sample`:样本参数,用于指定抽样方法和数量。 - `dest_file`:处理结果的目标文件名。 功能: 1. 使用 `pd.read_json` 函数读取 JSONL 文件为 DataFrame。 2. 检查 DataFrame 是否为空或是否缺少 'content' 列,如果是,则返回。 3. 样本抽样 4. 删除 DataFrame 中的空值。 5. 将 'content' 列的文本内容写入目标文件。 6. 输出日志信息。 ### function 12: `lanjun_jsonl(filename, sample, dest_file)` 该函数用于处理包含 JSONL 格式的文件(含有 'content' 列)。参数和功能与 `qingbao` 函数类似,不同之处在于进行了样本抽样和超时处理。 ### function 13: `sec_txt(filename, sample, dest_file)` 该函数用于处理包含 CSV 格式的文件(含有一列文本内容)。参数包括: - `filename`:文件路径。 - `sample`:样本参数,用于指定抽样方法和数量。 - `dest_file`:处理结果的目标文件名。 功能: 1. 使用 `pd.read_csv` 函数读取 CSV 文件为 DataFrame。 2. 设置 DataFrame 的列名为 'content'。 3. 样本抽样 4. 检查 DataFrame 是否为空或是否缺少 'content' 列,如果是,则返回。 5. 删除 DataFrame 中的空值。 6. 将 'content' 列的文本内容写入目标文件。 7. 输出日志信息。