函数原型
tf.keras.preprocessing.text.Tokenizer(
num_words=None,
filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
lower=True,
split=' ',
char_level=False,
oov_token=None,
document_count=0,
**kwargs
)
函数说明
Tokenizer函数用于创建一个分词器对象tokenizer。参数num_words用于表示应该保持的最大的单词数,如果小于输入数据所构成词汇表的不同的单词数,则一部分单词会被删掉。默认值为None,表示应该保持的单词数和词汇表的一致。
参数filters表示应该被过滤的单词或者字符。参数lower表示输入的大写字母是否应该转换成小写字母,默认为True。参数split表示用于分词的分隔符,默认情况下,文本变成以空格分隔的单词序列(单词可能包括 ’ 字符)。
参数char_level表示是对一个单词进行分割还是对一个字符进行分割,默认为True,表示对一个字符进行分割。
参数oov_token如果给定,它将被添加到 word_index 并用于在 text_to_sequence 调用期间替换词汇表外的单词。
tokenizer对象具有以下常用属性和方法:
1、fit_on_texts(texts):根据文本来更新内部词汇表,如果texts为一个字符串,那么结果都将按照字符划分;如果texts为一个字符串列表,比如[“hello world”]、[“hello”, “world”],则如果设置char_level=False,分词器按照单词划分。
2、get_config():获取分词器的配置,里面有word_index、index_word、word_docs、index_docs、document_count、word_counts等常用的信息。
3、sequences_to_texts(sequences):将数字序列转换成文本,形式为[[4], [3], [2], [2]]或者[[4, 3, 2, 2]]的列表或者numpy数组。
4、texts_to_sequences(texts):将文本转换成数字序列。
5、word_index:一个将文本映射为数字的字典
6、index_word:一个将数字映射为文本的字典
函数使用
# 根据字符划分
# 创建一个分词器
>>> tokenizer = tf.keras.preprocessing.text.Tokenizer()
>>> text = "hello tensorflow"
# 根据文本更新内部分词器信息
>>> tokenizer.fit_on_texts(text)
# 获取配置信息
>>> config = tokenizer.get_config()
>>> config
{
'num_words': None,
'filters': '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n',
'lower': True,
'split': ' ',
'char_level': False,
'oov_token': None,
'document_count': 16,
'word_counts': '{"h": 1, "e": 2, "l": 3, "o": 3, "t": 1, "n": 1, "s": 1, "r": 1, "f": 1, "w": 1}',
'word_docs': '{"h": 1, "e": 2, "l": 3, "o": 3, "t": 1, "n": 1, "s": 1, "r": 1, "f": 1, "w": 1}',
'index_docs': '{"4": 1, "3": 2, "1": 3, "2": 3, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1, "10": 1}',
'index_word': '{"1": "l", "2": "o", "3": "e", "4": "h", "5": "t", "6": "n", "7": "s", "8": "r", "9": "f", "10": "w"}',
'word_index': '{"l": 1, "o": 2, "e": 3, "h": 4, "t": 5, "n": 6, "s": 7, "r": 8, "f": 9, "w": 10}'
}
# 获取word_index字典
>>> tokenizer.word_index
'{"l": 1, "o": 2, "e": 3, "h": 4, "t": 5, "n": 6, "s": 7, "r": 8, "f": 9, "w": 10}'
# 有时需要获取词汇表的vocab_size
>>> vocab_size = len(tokenizer.word_index)
>>> vacab_size
10
# 文本转换成序列
>>> seq = tokenizer.texts_to_sequences("hello")
>>> seq
[[4], [3], [1], [1], [2]]
# 序列转换成文本,三种情况
>>> texts = tokenizer.sequences_to_texts([[4],[3],[1],[1],[2]])
>>> texts
['h', 'e', 'l', 'l', 'o']
>>> texts = tokenizer.sequences_to_texts([[4, 3, 1, 1, 2]])
>>> texts
['h e l l o']
>>> texts = tokenizer.sequences_to_texts(np.array([[4, 3, 1, 1, 2]]))
>>> texts
['h e l l o']
# 根据单词划分
>>> tokenizer = tf.keras.preprocessing.text.Tokenizer()
>>> texts = "hello tensorflow"
>>> text_list = tf.keras.preprocessing.text.text_to_word_sequence(texts)
>>> text_list
['hello', 'tensorflow']
>>> tokenizer.fit_on_texts(text_list)
>>> tokenizer.texts_to_sequences(text_list)
[[1], [2]]
>>> tokenizer.texts_to_sequences([texts])
[[1, 2]]
>>> tokenizer.word_index
{'hello': 1, 'tensorflow': 2}
# 设置参数oov_token
>>> tokenizer = tf.keras.preprocessing.text.Tokenizer(oov_token="mask")
>>> tokenizer.fit_on_texts(text_list)
>>> tokenizer.sequences_to_texts([[1, 2]])
['mask hello']
>>> tokenizer.word_index
{'mask': 1, 'hello': 2, 'tensorflow': 3}
|