上一节已经生成了单个字和标注对应的文件,接下来就是将这些文件,拆分为训练集和测试集两部分。这里的拆分不单是文件选择的问题,还需要考虑后续加载数据集的问题。
难点分析
因为原始数据是OCR识别得到的,有错字、空格、换行等内容。而我们在模型训练时,是以句子为单位进行输入的,所以还会面临文档拆分为句子的难题。
显然,按照空格、句号、回车,这些直观的句子拆分方法是行不通的,因为可能会出现句子太长、一个实体被拆分到两句话中等问题。我们这里采用一个简单粗暴的方法,将多个文档合并为一个文件,看做一篇文档。
加载数据时,在按固定长度进行截取,当然,这样也会有实体被拆开的问题,到加载数据时再处理。
代码示例
1、添加配置项
# config.py
TRAIN_SAMPLE_PATH = './output/train_sample.txt'
TEST_SAMPLE_PATH = './output/test_sample.txt'
2、拆分方法
# data_process.py
# 拆分训练集和测试集
def split_sample(test_size=0.3):
files = glob(ANNOTATION_DIR + '*.txt')
random.seed(0)
random.shuffle(files)
n = int(len(files) * test_size)
test_files = files[:n]
train_files = files[n:]
# 合并文件
merge_file(train_files, TRAIN_SAMPLE_PATH)
merge_file(test_files, TEST_SAMPLE_PATH)
def merge_file(files, target_path):
with open(target_path, 'a') as file:
for f in files:
text = open(f).read()
file.write(text)
if __name__ == '__main__':
# 拆分训练集和测试集
split_sample()
本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/390