博客
关于我
python对英文文本进行one—hot编码
阅读量:239 次
发布时间:2019-03-01

本文共 1489 字,大约阅读时间需要 4 分钟。

1.单词级的one-hot编码(numpy编写)

#单词级别的one-hot编码import numpy as npsamples=['this cat sat on the mat',"this dog ate my homework"]token_index={   }#构造一个空的索引集合for sample in samples:    for word in sample.split():#将句子拆分成一个一个单词        if word not in token_index:            token_index[word]=len(token_index)+1#为每个唯一单词指定一个唯一索引max_length=1#对样本进行分词,只考虑每个样本前max-length个单词results=np.zeros(shape=(len(samples),max_length,max(token_index.values())+1))#将结果保存在results中for i ,sample in enumerate(samples):    for j ,word in list(enumerate(sample.split()))[:max_length]:        index=token_index.get(word)        results[i,j,index]=1print(results)

结果:

从图中可以看出one-hot矩阵是(15,11)的,index为(this, cat, sat, on, the, mat, dog , ate,…)

列名为token_index
在这里插入图片描述

2.利用Keras实现one-hot编码(keras内置函数)

from keras_preprocessing.text import Tokenizersamples=['this cat sat on the mat',"this dog ate my homework"]tokenizer=Tokenizer(num_words=1000)#创建一个分词器,设置只考虑前1000个单词tokenizer.fit_on_texts(samples)#构建单词索引sequences = tokenizer.texts_to_sequences(samples)  # 将字符串转换为整数索引组成的列表one_hot_results = tokenizer.texts_to_matrix(samples,mode='binary') # 也可以直接得到 one-hot 二进制表示。这个分词器也支持除 one-hot 编码外的其他向量化模式word_index = tokenizer.word_index  # 找回单词索引print("sequences\n",sequences)print("word_index\n",word_index )print("one_hot_results[0]\n",one_hot_results[0])print(one_hot_results)

结果:

从图中可以看出利用keras获得的one-hot编码也是以获得的前1000个单词为列名,但每个行却是以每一句话作为一个样本,一个样本为一个(1,1000)的向量。

在这里插入图片描述

总结:在对原始文本数据进行one-hot编码,更推荐用Keras的内置函数,这个函数在面对复杂的文本时,可以有效的去除特殊字符、只考虑数据集中常见的N个字符等优点。

转载地址:http://mjpv.baihongyu.com/

你可能感兴趣的文章
MySQL数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>
mysql数据库扫盲,你真的知道什么是数据库嘛
查看>>
mysql数据库批量插入数据shell脚本实现
查看>>
MySQL数据库操作
查看>>
MySQL数据库故障排错
查看>>
MySQL数据库无法远程连接的解决办法
查看>>
mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
查看>>
MySQL数据库服务器端核心参数详解和推荐配置(一)
查看>>
mysql数据库死锁的产生原因及解决办法
查看>>
MySQL数据库的事务管理
查看>>
mysql数据库的备份与恢复
查看>>
Mysql数据库的条件查询语句
查看>>
MySQL数据库的高可用
查看>>
Mysql数据库相关各种类型的文件
查看>>
MYSQL数据库简单的状态检查(show processlist)
查看>>
MYSQL数据库简单的状态检查(show status)
查看>>
MySQL数据库系列
查看>>
MYSQL数据库自动本地/异地双备份/MYSQL增量备份
查看>>
mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
查看>>