这里仅仅选用了其中的唐诗部分进行训练:chinese-poetry/全唐诗/
原始数据:
在原始数据中包含作者,内容,标题,id四个部分,这里使用内容进行训练
数据预处理
首先将所有唐诗的诗句合并成一个长文本
import numpy as np
import json
import torch
import os
import pkuseg
# 读取 json 文件
def get_json(path):
with open(path, 'r', encoding='utf-8') as f:
data = json.load(f)
return data
# 对 ./tang/ 文件夹下的所有 json 文件进行遍历
# 获取文件夹下的所有文件名
def get_file_name(path):
file_name = []
for root, dirs, files in os.walk(path):
for file in files:
file_name.append(file)
return file_name
file_name_ls = get_file_name('./tang/')
ret_ls = []
for file_name in file_name_ls:
ls = get_json('./tang/' + file_name)
n_ls = len(ls)
for i in range(n_ls):
para = ls[i]['paragraphs']
para = ''.join(para)
ret_ls.append(para)
n_poet = len(ret_ls) # 一共 57607 首诗歌
# 全部合并成一个 string
str_all = ''.join(ret_ls)
接着对其分词,我这里里使用了torchtext库,在代码中使用了collections.Counter
和torchtext.vocab.Vocab
来构建中文字符级别的词汇表,并将文本转换为整数序列。
在这段代码中,首先定义了一个字符级别的分词器chinese_char_tokenizer
,它将文本拆分为单个字符。接下来,使用该分词器对所有文本进行分词处理,并使用Counter
统计