关于tensorflow.keras.preprocessing.text.Tokenizer分词器一些注意

关于tensorflow.keras.preprocessing.text.Tokenizer分词器一些注意

Tokenizer的一些常用方法如下:

起手式:

t=Tokenizer()   #创建一个分词器
t.fit_on_texts(text)  #将文本内容添加进来,生成词表

fit_on_texts的作用就是根据输入的文本列表生成一个大词典,保存在t里面,每个词有唯一一个不重复的索引。如果有新的语句,可直接通过t来转成对应的词索引列表。注意,同一个词空间,只能共用一个tokenizer,否则获得的此索引不统一,没有意义。

基本招式:

print(t.word_counts)  #每个词的数量
print(t.word_docs)    #每个词与数量的字典  {'xx':4,'yy':2}
print(t.word_index)   #每个词与在所有词中的索引位置

texts_to_sequences(text) #将词列表转成词索引列表

使用tensorflow.keras.preprocessing.text的分词器Tokenizer时,有几点注意.

1.Tokenizer的处理原理

使用fit_on_texts() 将我们要分词的文本内容输入进去,分词器会将里面所有的文本进行拆分,并且将所有拆分后的不重复词进行排序,形成一个词汇表。每一个词都对应一个独有的索引。

2.输入对象的格式

fit_on_texts(text) 中的text应该输入什么内容?

——是一个列表!每个元素是切分过后的词列表或者词文本
不能把一整段的字符串输入进去,否则分词器会将整个字符串视为一个大列表,而每一个词都是其中的一个元素。

错误示例:

text='作者 长篇大论 借用 详细 报告 数据处理 工作 计算结果 支持 其新'
t.fit_on_texts(text)
print(t.word_counts)
#得到
OrderedDict([('作', 2), ('者', 1), ('长', 1), ('篇', 1), ('大', 1), ('论', 1), ('借', 1), ('用', 1), ('详', 1), ('细', 1), ('报', 1), ('告', 1), ('数', 1), ('据', 1), ('处', 1), ('理', 1), ('工', 1), ('计', 1), ('算', 1), ('结', 1), ('果', 1), ('支', 1), ('持', 1), ('其', 1), ('新', 1)])

正确示例:

text_list=['作者 长篇大论 借用 详细 报告 数据处理 工作 计算结果 支持 其新',
           '总体 应该 二 星级宾馆 定 时间 比较 晚 这家 酒店 入住 时问 前台 黄山 城市 信息 说 知道 一个 入住 办理 二十几分钟 几个 房间 设施 陈旧 住 舒服']
tlist =Tokenizer()
tlist.fit_on_texts(text_list)
print(tlist.word_counts)
print(tlist.word_docs)
print(tlist.word_index)
#得到
OrderedDict([('作者', 1), ('长篇大论', 1), ('借用', 1), ('详细', 1), ('报告', 1), ('数据处理', 1), ('工作', 1), ('计算结果', 1), ('支持', 1), ('其新', 1), ('总体', 1), ('应该', 1), ('二', 1), ('星级宾馆', 1), ('定', 1), ('时间', 1), ('比较', 1), ('晚', 1), ('这家', 1), ('酒店', 1), ('入住', 2), ('时问', 1), ('前台', 1), ('黄山', 1), ('城市', 1), ('信息', 1), ('说', 1), ('知道', 1), ('一个', 1), ('办理', 1), ('二十几分钟', 1), ('几个', 1), ('房间', 1), ('设施', 1), ('陈旧', 1), ('住', 1), ('舒服', 1)])
defaultdict(<class 'int'>, {'长篇大论': 1, '报告': 1, '详细': 1, '作者': 1, '工作': 1, '支持': 1, '其新': 1, '计算结果': 1, '借用': 1, '数据处理': 1, '一个': 1, '前台': 1, '住': 1, '办理': 1, '信息': 1, '二十几分钟': 1, '舒服': 1, '晚': 1, '知道': 1, '黄山': 1, '定': 1, '入住': 1, '房间': 1, '这家': 1, '二': 1, '时问': 1, '时间': 1, '说': 1, '设施': 1, '几个': 1, '应该': 1, '城市': 1, '酒店': 1, '比较': 1, '星级宾馆': 1, '陈旧': 1, '总体': 1})
{'入住': 1, '作者': 2, '长篇大论': 3, '借用': 4, '详细': 5, '报告': 6, '数据处理': 7, '工作': 8, '计算结果': 9, '支持': 10, '其新': 11, '总体': 12, '应该': 13, '二': 14, '星级宾馆': 15, '定': 16, '时间': 17, '比较': 18, '晚': 19, '这家': 20, '酒店': 21, '时问': 22, '前台': 23, '黄山': 24, '城市': 25, '信息': 26, '说': 27, '知道': 28, '一个': 29, '办理': 30, '二十几分钟': 31, '几个': 32, '房间': 33, '设施': 34, '陈旧': 35, '住': 36, '舒服': 37}

3.列表的元素格式

上面我们看到输入一个文本列表,列表的元素是一个分词过后的字符串,且每个词之间都用空格分开。
那么是不是输出的元素必须是这种格式呢?
——没有,每个元素也可以是由词组成的列表。即[[‘xx’,‘yy’,‘zz’,…],[‘xx’,‘yy’,‘zz’,…]]这种形式也是可以的.但是由于文本处理时,我们经常使用pandas,而pandas存入某列的格式是不带list的,所以建议转成有空格拼接的长文本。

text_list=['作者 长篇大论 借用 详细 报告 数据处理 工作 计算结果 支持 其新',
           '总体 应该 二 星级宾馆 定 时间 比较 晚 这家 酒店 入住 时问 前台 黄山 城市 信息 说 知道 一个 入住 办理 二十几分钟 几个 房间 设施 陈旧 住 舒服']
text_list_list=[['作者', '长篇大论', '借用', '详细', '报告', '数据处理', '工作', '计算结果', '支持', '其新'],['总体','应该','二','星级宾馆','定','时间','比较','晚','这家','酒店','入住','时问','前台','黄山']]

tlist =Tokenizer()
tlist.fit_on_texts(text_list)
print(tlist.word_counts)
print(tlist.word_docs)
print(tlist.word_index)
slist=tlist.texts_to_sequences(text_list)
print(slist)


print('\n\n')
tlist_list =Tokenizer()
tlist_list.fit_on_texts(text_list_list)
print(tlist_list.word_counts)
print(tlist_list.word_docs)
print(tlist_list.word_index)
slist_list=tlist_list.texts_to_sequences(text_list_list)
print(slist_list)

#得到
OrderedDict([('作者', 1), ('长篇大论', 1), ('借用', 1), ('详细', 1), ('报告', 1), ('数据处理', 1), ('工作', 1), ('计算结果', 1), ('支持', 1), ('其新', 1), ('总体', 1), ('应该', 1), ('二', 1), ('星级宾馆', 1), ('定', 1), ('时间', 1), ('比较', 1), ('晚', 1), ('这家', 1), ('酒店', 1), ('入住', 2), ('时问', 1), ('前台', 1), ('黄山', 1), ('城市', 1), ('信息', 1), ('说', 1), ('知道', 1), ('一个', 1), ('办理', 1), ('二十几分钟', 1), ('几个', 1), ('房间', 1), ('设施', 1), ('陈旧', 1), ('住', 1), ('舒服', 1)])
defaultdict(<class 'int'>, {'数据处理': 1, '借用': 1, '报告': 1, '作者': 1, '计算结果': 1, '支持': 1, '其新': 1, '详细': 1, '长篇大论': 1, '工作': 1, '陈旧': 1, '信息': 1, '二十几分钟': 1, '星级宾馆': 1, '前台': 1, '一个': 1, '时间': 1, '酒店': 1, '定': 1, '黄山': 1, '舒服': 1, '几个': 1, '设施': 1, '知道': 1, '时问': 1, '晚': 1, '房间': 1, '办理': 1, '二': 1, '应该': 1, '住': 1, '城市': 1, '比较': 1, '说': 1, '入住': 1, '总体': 1, '这家': 1})
{'入住': 1, '作者': 2, '长篇大论': 3, '借用': 4, '详细': 5, '报告': 6, '数据处理': 7, '工作': 8, '计算结果': 9, '支持': 10, '其新': 11, '总体': 12, '应该': 13, '二': 14, '星级宾馆': 15, '定': 16, '时间': 17, '比较': 18, '晚': 19, '这家': 20, '酒店': 21, '时问': 22, '前台': 23, '黄山': 24, '城市': 25, '信息': 26, '说': 27, '知道': 28, '一个': 29, '办理': 30, '二十几分钟': 31, '几个': 32, '房间': 33, '设施': 34, '陈旧': 35, '住': 36, '舒服': 37}
[[2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 1, 22, 23, 24, 25, 26, 27, 28, 29, 1, 30, 31, 32, 33, 34, 35, 36, 37]]



OrderedDict([('作者', 1), ('长篇大论', 1), ('借用', 1), ('详细', 1), ('报告', 1), ('数据处理', 1), ('工作', 1), ('计算结果', 1), ('支持', 1), ('其新', 1), ('总体', 1), ('应该', 1), ('二', 1), ('星级宾馆', 1), ('定', 1), ('时间', 1), ('比较', 1), ('晚', 1), ('这家', 1), ('酒店', 1), ('入住', 1), ('时问', 1), ('前台', 1), ('黄山', 1)])
defaultdict(<class 'int'>, {'数据处理': 1, '借用': 1, '报告': 1, '作者': 1, '计算结果': 1, '支持': 1, '其新': 1, '详细': 1, '长篇大论': 1, '工作': 1, '应该': 1, '时问': 1, '时间': 1, '酒店': 1, '比较': 1, '晚': 1, '定': 1, '入住': 1, '二': 1, '黄山': 1, '总体': 1, '星级宾馆': 1, '这家': 1, '前台': 1})
{'作者': 1, '长篇大论': 2, '借用': 3, '详细': 4, '报告': 5, '数据处理': 6, '工作': 7, '计算结果': 8, '支持': 9, '其新': 10, '总体': 11, '应该': 12, '二': 13, '星级宾馆': 14, '定': 15, '时间': 16, '比较': 17, '晚': 18, '这家': 19, '酒店': 20, '入住': 21, '时问': 22, '前台': 23, '黄山': 24}
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]]
总结:

tensorflow.keras.preprocessing.text的Tokenizer分词器:

1.将输入的所有词存入一个有序的词汇表,每个词对应一个唯一的索引。

2.输入是一个文本列表,列表元素可以是词列表,或者以空格隔开的长文本。[[‘xx’,‘yy’,‘zz’,…],[‘xx’,‘yy’,‘zz’,…]] 或者[‘xx yy zz…’],['xx yy zz …]].推荐以空格拼接的长文本

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值