https://blog.csdn.net/qq_16234613/article/details/79436941
from keras.preprocessing import text
from keras.preprocessing.text import Tokenizer
text1='some thing to eat'
text2='some some thing to drink'
text3='thing to eat food'
texts=[text1, text2, text3]
# keras.preprocessing.text.text_to_word_sequence(text,
# filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n',
# lower=True,
# split=" ")
print(text.text_to_word_sequence(text3))
# 将一行文本使用hash原理转成one-hot形式,不是按照字典形式进行的映射
# keras.preprocessing.text.one_hot(text,
# n,
# filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n',
# lower=True,
# split=" ")
print(text.one_hot(text2,20)) #n表示编码值在1到n之间
print(text.one_hot(text2,5))
#result
Using TensorFlow backend.
['thing', 'to', 'eat', 'food']
[6, 6, 1, 2, 18]
[3, 3, 2, 4, 4]
tokenizer = Tokenizer(num_words=4) #num_words:None或整数,个人理解就是对统计单词出现数量后选择次数多的前n个单词,后面的单词都不做处理。
tokenizer.fit_on_texts(texts)
print("1=", tokenizer.texts_to_sequences(texts)) # 使用字典将对应词转成index。shape为 (文档数,每条文档的长度)
print( "2=",tokenizer.texts_to_matrix(texts)) # 转成one-hot,与前面的不同。shape为[len(texts),num_words]
print( "3=",tokenizer.word_counts) #单词在所有文档中的总数量,如果num_words=4,应该选择some thing to
print( "4=",tokenizer.word_docs) #单词出现在文档中的数量
print("5=", tokenizer.word_index) #单词对应的index
print( "6=",tokenizer.index_docs) #index对应单词出现在文档中的数量
#result
1= [[1, 2, 3], [1, 1, 2, 3], [2, 3]]
2= [[0. 1. 1. 1.]
[0. 1. 1. 1.]
[0. 0. 1. 1.]]
3= OrderedDict([('some', 3), ('thing', 3), ('to', 3), ('eat', 2), ('drink', 1), ('food', 1)])
4= defaultdict(<class 'int'>, {'eat': 2
, 'thing': 3, 'some': 2, 'to': 3, 'drink': 1, 'food': 1})
5= {'some': 1, 'thing': 2, 'to': 3, 'eat': 4, 'drink': 5, 'food': 6}
6= defaultdict(<class 'int'>, {4: 2, 2: 3, 1: 2, 3: 3, 5: 1, 6: 1})
三、属性详解
word_counts
:字典,将单词(字符串)映射为它们在训练期间出现的次数。仅在调用fit_on_texts之后设置。
word_docs
:字典,将单词(字符串)映射为它们在训练期间所出现的文档或文本的数量。仅在调用fit_on_texts之后设置。
word_index
:字典,将单词(字符串)映射为它们的排名或者索引。仅在调用fit_on_texts之后设置。
document_count
:整数。分词器被训练的文档(文本或者序列)数量。仅在调用fit_on_texts或fit_on_sequences之后设置。
https://zhuanlan.zhihu.com/p/138054335