-
需求:将所有文件下的A类数据的训练集、验证集和测试集分别整合到一起,B类数据的训练集、验证集和测试集分别整合到一起。
-
将要处理的数据文件放至data文件下,数据处理完成后存放至match_data文件下。
数据格式如下:
-
导入所需要的包
import os
import json
from tqdm import tqdm
- 文件路径及目录相关操作
data_path = "data/" # 根路径
path_list = os.listdir(data_path) # 获取根路径下的文件目录
print(path_list)
- 分别定义用于存放各类数据的列表
# 分别定义用于存放各类数据的列表
train_data_a = []
val_data_a = []
train_data_b = []
val_data_b = []
test_data_a = []
test_data_b = []
- 对单句进行处理
# 对单句进行处理
def process(sentence):
sentence = sentence.replace(" ", "") # 去空格操作
sentence = sentence.lower() # 小写化操作
return sentence
- 将数据写入新文件的操作
# 将数据写入新文件操作
def write_data(path, data):
with open(path, "w", encoding="utf-8") as fw: # 打开指定文件
for ele in data: # 按行写入数据
ele = [_.replace("\t", "") for _ in ele] # 去掉每一行的制表符
fw.write("\t".join(ele) + "\n") # 每行中的每列数据用制表符分割,每行末尾添加换行符
- 循环遍历数据文件,分别对各类数据文件进行操作
# 分别对各类文件进行处理
for dir_name in listdir_names: # 遍历文件名列表
# 处理训练集文件
with open(data_path + dir_name + "/train.txt", "r", encoding="utf-8") as fr: # 分别打开各文件夹中的训练集文件
for line in tqdm(fr): # 按行读取文件内容
data = json.loads(line.strip()) # 按行将数据加载成json格式
if "A" in dir_name: # 按A、B类分别存放数据
train_data_a.append((process(data["source"]), process(data["target"]), process(data["labelA"])))
else:
train_data_b.append((process(data["source"]), process(data["target"]), process(data["labelB"])))
# 处理验证集文件
with open(data_path + dir_name + "/valid.txt", "r", encoding="utf-8") as fr:
for line in tqdm(fr):
data = json.loads(line.strip())
if "A" in dir_name:
valid_data_a.append((process(data["source"]), process(data["target"]), process(data["labelA"])))
else:
valid_data_b.append((process(data["source"]), process(data["target"]), process(data["labelB"])))
# 处理测试集文件
with open(data_path + dir_name + "/test_with_id.txt", "r", encoding="utf-8") as fr:
for line in tqdm(fr):
data = json.loads(line.strip())
if "A" in dir_name:
test_data_a.append((process(data["source"]), process(data["target"]), process(data["id"])))
else:
test_data_b.append((process(data["source"]), process(data["target"]), process(data["id"])))
- 打印数据列表的长度
# 打印数据列表的长度
print(len(train_data_a))
print(len(train_data_b))
print(len(valid_data_a))
print(len(valid_data_b))
print(len(test_data_a))
print(len(test_data_b))
- 将处理后的新数据分别写入各自文件
# 将处理后的新数据分别写入各自文件
write_data("./match_data/train_A.txt", train_data_a)
write_data("./match_data/train_B.txt", train_data_b)
write_data("./match_data/valid_A.txt", valid_data_a)
write_data("./match_data/valid_B.txt", valid_data_b)
write_data("./match_data/test_A.txt", test_data_a)
write_data("./match_data/test_B.txt", test_data_b)
- 整合后的数据格式如下:
- 下篇笔记记录的是如何将本篇笔记处理后的数据再处理成bert的输入数据格式。