# 数据预处理:将一条句子分词得到一个个的词
import pandas
import jieba
import pandas as pd
from config import Config
# 1- 加载配置文件
config = Config()
def preprocessing(datapath):
# 1- 读取对应的文件
df = pd.read_csv(datapath,sep="\t",encoding="UTF-8",names=["text","label"])
# 2- 对text句子进行分词,并且只取前30个词
"""
代码解释:
jieba.lcut(line):对句子分词得到List列表,里面放的是一个个词
jieba.lcut(line)[:30]:对上面的List列表进行切片,只保留前30个词
" ".join(jieba.lcut(line)[:30]):将List列表中的元素以空格隔开存储到DF中
离群点(异常点)
"""
df["words"] = df["text"].apply(lambda line: " ".join(jieba.lcut(line)[:30]))
# print(df.head())
# 3- 将处理后的DF写入文件进行存储
"""
to_csv参数解释:
header:是否将字段名称作为第一行写入到文件中。推荐设置为True
index:是否将DF中的索引写入到文件中。如果index有业务层面的含义,推荐设置为True;否则就是False
mode:文件的写入模式。这里是为了防止代码重复跑,然后数据出现重复的问题,因此设置为覆盖写w
"""
# 3.1- 训练集
if "train" in datapath:
df.to_csv(config.process_train_datapath, sep=",", header=True, index=False, mode="w", encoding="UTF-8")
print("train数据预处理完成,保存成功")
# 3.2- 测试集
if "test" in datapath:
df.to_csv(config.process_test_datapath, sep=",", header=True, index=False, mode="w", encoding="UTF-8")
print("test数据预处理完成,保存成功")
# 3.1- 训练集
if "dev" in datapath:
df.to_csv(config.process_dev_datapath, sep=",", header=True, index=False, mode="w", encoding="UTF-8")
print("dev数据预处理完成,保存成功")
def preprocessing_plus(task_type,datapath):
# 1- 读取对应的文件
df = pd.read_csv(datapath,sep="\t", encoding="UTF-8", names=["text","label"])
# 2- 对text句子进行分词,并且只取前30个词
df["words"] = df["text"].apply(lambda line: " ".join(jieba.lcut(line)[:30]))
# 3- 将处理后的DF写入文件进行存储
if task_type in datapath:
df.to_csv(config.process_datapath_dict.get(task_type), sep=",", header=True, index=False, mode="w", encoding="UTF-8")
print(f"{task_type}数据预处理完成,保存成功")
if __name__ == '__main__':
# 2- 获得训练集、测试集、验证集的数据路径;调用数据预处理函数
# ------------------ 普通版写法 ------------------
# 2.1- 训练集的处理
datapath = config.train_datapath
preprocessing(datapath)
# 2.2- 测试集的处理
datapath = config.test_datapath
preprocessing(datapath)
# 2.3- 验证集的处理
datapath = config.dev_datapath
preprocessing(datapath)
# ------------------ 优化版写法 ------------------
# for task_type,datapath in config.original_datapath_dict.items():
# preprocessing_plus(task_type,datapath)