代码中加入了padding功能,如果句子长度不够的话,会用0填充不足的序列
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='3'
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer
#Tokenizer:令牌生成器
from tensorflow.keras.preprocessing.sequence import pad_sequences
#导入padding功能
sentences = [
'I love my dog',
'I love my cat',
'You love my dog!',
'Do you think my dog is amazing?'
#注意前面的语句都只有四个单词,所以这一句有点长
]
tokenizer = Tokenizer(num_words=100,oov_token='<OOV>')
#创建令牌生成器的实例,被动参数编号指向它
#(这里的原理为将I标记为1,love标记为2,my标记为3,dog标记为4,cat标记为5)
#使用100的编号有点大,因为此数据中只有五个不同的单词
#这里新添加了'<OOV>',用于对不在单词索引中的单词进行处理
#额外的一个'<OOV>'字符串标记为1
tokenizer.fit_on_texts(sentences)
#使用适合的方法进行训练sentences
word_index = tokenizer.word_index
#令牌生成器提供了一个单词索引属性,该属性返回包含键值对的字典,关键为单词,
#该值为单词的标记
sequences = tokenizer.texts_to_sequences(sentences)
#sequences标记从文本到序列的内容
padded = pad_sequences(sequences,padding='post',maxlen=5)
#这样的话 如果我的语料长度大于5,我将会损失句子的内容,默认值为pre
#如果将末尾切掉的话使用padded = pad_sequences(sequences,padding='post',truncating='post',maxlen=5)
#填充序列
print(word_index)
print(sentences)
print(padded)
#将句子进行填充
#显示我的句子被编码为整数列表的过程
#它可以根据它所设置的单词集对它们进行编码,从适合文本的那本书中学到了东西
test_data = [
'i really love my dog',
'my dog loves my manatee'
]
test_seq = tokenizer.texts_to_sequences(test_data)
print(test_seq)
padded = pad_sequences(test_seq,maxlen=10)
print(padded)
'''
对应的内容为[[0 0 0 0 0 5 1 3 2 4]
[0 0 0 0 0 2 4 1 2 1]],因为默认的padding在前面增加空格,所以
长度不足10的前面添加0
'''