上一节已经生成了单个字和标注对应的文件,接下来就是将这些文件,拆分为训练集和测试集两部分。这里的拆分不单是文件选择的问题,还需要考虑后续加载数据集的问题。

难点分析

因为原始数据是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