NLP任务中经常需要把词语转换成数字ID,然后又要统一文本长度,不够的填充0,多出的部分需要截断,keras里面自带了这样的功能模块如下。
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import Tokenizer
具体使用效果如下
from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import Tokenizer
mx_length = 10#文本最大长度为10
text = [['我','爱','中国'],
['我','爱','科学'],
['深度','学习','很','有趣'],
['机器','学习','常见','的','模型','有','SVM']]
print('文本内容=')
print(text)
tokenizer=Tokenizer() #创建一个Tokenizer对象
tokenizer.fit_on_texts(text)#直接读入文本进行词的ID获取
vocab=tokenizer.word_index #得到每个词的编号
x_train_word_ids=tokenizer.texts_to_sequences(text)#开始对text里面的每个汉字进行编号
print('编号结果=')
print(x_train_word_ids)
'''
padding='pre'表示从前面填充
padding='post'表示从后面填充
truncating='pre'表示从前面截断
truncating='post'表示从后面截断
'''
x_train_padded_seqs=pad_sequences(x_train_word_ids,maxlen=mx_length,padding='post',truncating='post') #将超过固定值的部分截掉,不足的用0填充
print('填充结果=')
print(x_train_padded_seqs)
运行结果