文本向量化的实现方式(1、one-hot编码;2、词嵌入)

深度学习模型不会接收原始文本作为输入,它只能处理数值张量。文本向量化是指将文本转换为数值张量的过程。文本向量化实现方式如下常见2种:

一、sklearn处理英文分词

import os
import joblib


# 1. 加载文本数据
data = []
labels = []
# 替换路径
file_root_path = r"C:\Users\cerebrumWeaver\Downloads\20news-19997\20_newsgroups"
for folder in os.listdir(file_root_path):
    folder_path = os.path.join(file_root_path, folder)
    if os.path.isdir(folder_path):
        for file in os.listdir(folder_path):
            file_path = os.path.join(folder_path, file)
            if os.path.isfile(file_path):
                with open(file_path, "r", encoding='ISO-8859-1') as f:	# 编码格式通过chardet库确认一下
                    text = f.read()
                    data.append(text)
                    labels.append(folder)

result = dict(data=data, labels=labels)
joblib.dump(result, r'D:\project\pycharm\tensorflow210\scikit_learn\joblib_files\20Newsgroups')

二、one-hot编码(独热编码)

one-hot编码是最常用、最基本的方法。此处不作纯python代码实现one-hot编码,而直接调用Keras深度学习API库,那是因为Keras库实现了许多重要的特性,比如从文本字符串中去除标点符号、只考虑文本字符串中出现频率最高的前N个常见词语(这是一种常用的限制,避免处理非常大的输入向量空间)。注意: 推荐使用Keras库而不是自己实现

keras实现代码:

from keras.preprocessing.text import Tokenizer


samples = ['大烩菜 的 定义 应该 是 路边摊 吧 ? 我 记得 他 师父 好像 就是 路边摊 。 谁 吃 个 烩菜 还 上 三 楼 呀',
  '这 应该 不 可能 , 毕竟 得 办 营业执照 , 应该 能 跟 小 火锅 一样 挺 一段时间 吧 , 坚持 不 了 两周 [ 捂脸 ] [ 捂脸 ] [ 捂脸 ] [ 捂脸 ] , 大 烩饭 便宜 才会 多 人 吃',
  '半个月 就 关门 了 , 赌 一把 卫龙 辣条',
  '超市 呢 不交待 了',
  '农村 三人行 开始 搞 起 “ 大烩菜 ” 了 ! 大家 猜 猜 这次 能够 坚持 多久 啊 ! \n “ 三人行 ” 创业 经历 了 太多 坎坷 , 屡 败 屡 战 啊 ! \n 1 、 横店 群演 , 失败 \n2 、 美团i外卖 , 失败 \n 3 、 火锅 店 , 失败 \n4 、 学 大车 , 失败 \n5 、 开 超市 , 失败\n6 、 卖 椰子 , 跑路\n7 、 进 厂 打工 , 失败 \n 这 三人 真是 “ 屡 败 屡 战 ” 的 典范 啊 ! 但是 现在 市场 的 萧条 大 环境 下 , 真 不 看好 他们 的 这次 创业 ! \n大胆 预测 : 坚持 不 了 一年 !']
tokenizer = Tokenizer(num_words=20, filters='!!“”"#¥$%&(())*+,,-。.、/::;;《<=》>??@【[\\】]……·^——_`{|}~\t\n')
tokenizer.fit_on_texts(samples)	# 分词操作
sequences = tokenizer.texts_to_sequences(samples)	# sequences的打印结果为word_index字典的values值
one_hot_results = tokenizer.texts_to_matrix(samples, mode='binary')	# one-hot操作,是最终输入模型的数值型张量。sequences和word_index变量只是用于验证和复原one-hot实现细节,帮助你更好的理解one-hot编码
word_index = tokenizer.word_index
word_index

word_index打印结果如下图:
在这里插入图片描述
从结果来看,word_index是字典类型,见名知其意,字典keys是词语,字典values是索引。samples列表变量中的5个字符串总共被切分成了110个词语并将他们按出现的频率作递减排序。其中Tokenizer类中的参数filters用于过滤掉samples列表变量中的5个字符串夹带的特殊符号,这里包含了逗号、问号、感叹号等中文符号以及换行符\n,故你在word_index字典打印结果中没有看到这些特殊符号的存在。Tokenizer类中的参数num_words决定了one_hot_results向量最后一个维度的长度为20,寓意只取word_index前20个高频词语,注意这里不包括第20个词语,故word_index只有前19个单词会在one_hot_results索引为1的位置起,在相应位置处标记1,没有为one_hot_results索引编号0指定单词

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值