keras + tensorflow —— 文本处理

0. 语料获取

  • amazon s3 获取:

    txtpath = keras.utils.get_file('nietzche.txt', 
    	origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt')
    text = open(txtpath).read().lower()
    

1. 文本的 one-hot 编码

  • from keras.preprocessing.text import Tokenizer

    # 编码如下的两行文本
    samples = ['The cat sat on the mat.', 'The dog ate my homework']
    
    tokenizer = Tokenizer(num_words=1000)	# 用长度为 1000 的词汇集编码文本
    tokenizer.fit_on_text(samples)
    sequences = tokenizer.texts_to_sequences(samples)
    	# [[1, 2, 3, 4, 1, 5], [1, 6, 7, 8, 9]]
    	# 1 ⇒ dog, 2 ⇒ cat, 3 ⇒ cat, 4 ⇒ on ...
    tokenizer.word_index
    
    	{'the': 1,
    	 'cat': 2,
    	 'sat': 3,
    	 'on': 4,
    	 'mat': 5,
    	 'dog': 6,
    	 'ate': 7,
    	 'my': 8,
    	 'homework': 9}
    	
    one_hot_mat = tokenizer.texts_to_matrix(samples, mode='binary')
    # array([[0., 1., 1., ..., 0., 0., 0.],
            [0., 1., 0., ..., 0., 0., 0.]])
    one_hot_mat.shape
    	# (2, 1000)
    
    

2. 数据集的整理

  • keras 内置的 imdb 数据集为例:

    from keras.datasets import imdb
    
    max_features = 1000		# 构建长度为 1000 的字典	
    max_len = 20			# 一条记录的最大单词数目
    
    (X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=max_features)
    	# X_train, X_test:均为 list 构成的一维数组,之所以不是二维数组,在于每一条记录长度不一致;
    
    from keras.preprocessing import sequence
    X_train = sequence.pad_sequences(X_train, max_len)
    X_test = sequence.pad_sequences(X_test, max_len)
    	# 此时 X_train、X_test 均为二维数组,
    	# 对于各自原始的行长度大于 20 的,截断保留后 20 位,长度小于 20 的在前补0
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值