Python如何向已有pickle文件写入新Tokenizer分词数据并合并词表
问题根源
- 你用追加模式将两个独立的Tokenizer序列化存入同一个pickle文件,
pickle.load()默认只会读取文件中第一个序列化对象,因此只能拿到第一段文本对应的词表 - 你为第二段文本新建了独立的Tokenizer实例,两个分词器的词表互相独立,没有做合并操作
- 你设置的
num_words=10仅作用于后续文本转序列时的保留词数量,不会限制word_index存储全量唯一token,无需调整该参数也可以实现需求
实现逻辑
你需要先读取已存储的旧分词器,直接在旧分词器的基础上拟合第二段文本,Tokenizer的fit_on_texts方法会自动将新增的唯一token追加到现有词表中,序号保持连续,之后再覆盖存储回pickle文件即可。
可运行代码
from tensorflow.keras.preprocessing.text import Tokenizer import pickle # 处理第一段文本,初始化分词器并存入文件 text1 = ['I was able to save the model to a file and load from a file.'] tokenizer_t1 = Tokenizer(num_words=10, lower=True) tokenizer_t1.fit_on_texts(text1) with open('file.pickle', 'wb') as handle: pickle.dump(tokenizer_t1, handle) # 读取验证第一段的词表 with open('file.pickle', 'rb') as handle: tokenizer_txt1 = pickle.load(handle) print("第一段词表: ", tokenizer_txt1.word_index) # 处理第二段文本,合并词表 text2 = ['Tokenizer class has a function to save data into JSON format. The accepted answer clearly demonstrates the tokenizer.'] # 第一步:读取已存储的旧分词器 with open('file.pickle', 'rb') as handle: old_tokenizer = pickle.load(handle) # 第二步:在旧分词器基础上拟合第二段文本,自动追加新token到词表 old_tokenizer.fit_on_texts(text2) # 第三步:将更新后的分词器覆盖存回原文件 with open('file.pickle', 'wb') as handle: pickle.dump(old_tokenizer, handle) # 验证合并后的词表 with open('file.pickle', 'rb') as handle: merged_tokenizer = pickle.load(handle) print("合并后词表: ", merged_tokenizer.word_index)
运行后输出的合并词表和你预期的一致,你预期里写的date为笔误,实际输出会是data对应序号17。
内容的提问来源于stack exchange,提问作者Ekanshu
相关产品推荐
相关产品推荐

