文章目录
python 文本处理小结-供自己复习使用(对应“1127_文本处理之 one-hot 编码”)
1. 问题及概念
1.1 文本表示
文本表示最基础的怕是最基础的 one-hot 编码,基础的东西有利于我们从源头和本质上进行思考。比如,现在给一堆文本数据给你,你会如何思考将文本信息传递出去并让计算机识别?
text = ['Today is Friday, it is Sunny.',
'And yesterday is Thursday, it was cloudy.',
'Tomorrow is Saturday, it will be Sunny too.']
——单词作为文本的最小单位,我们自然而然的会想到从单词入手。
的确,自然语言就是一套用来表达含义的系统,在这套系统中,词,就是表义的基本单元。
词向量 被用来表示词的向量或表征,也可被认为是词的特征向量。
在大的方向上,有两种思路:One-hot 词向量的表示方法 和 word2vec 词向量的表示方法,这先总结前者。顺带提一下,这种把词映射为实数域向量的技术叫做词嵌入(word embedding)。
1.2 one-hot 表达
所谓 one-hot 词向量,就是用一个很长的向量来表示一个词,向量的长度为词典的大小N,向量的分量只有一个1,其他全为0,1的位置对应该词在词典中的索引。直观理解如下:
1.2.1 直观理解:
# 直观理解:
['Toeday', 'is', 'Friday'] # 就可以这样表示:
today = [1, 0, 0]
is_ = [0, 1, 0]
Friday = [0, 0 ,1]
## 需注意一点,平时我们句子中的单词很可能是可能重复的!
1.2.2 本质理解:
这里可以将有信息价值的单词当做这个文本的“特征”,
那么如果文本中有k个不重复的单词,我们可以初略地认为该文本有 k 个”特征“;
特征组成了文本的“语料库”;
所以我们编码的目的:就是为这些不重复的单词进行编码。
2. 代码
接下来,以一个具体的、从头到尾的完整例子来仔细看看 如何使用one-hot 编码对文本进行编码。(纯属个人的思路)
记住上面所说的一点,既然词向量是特征,那么它必定不能重复。
2.1 代码思路
- 文本
text = ['Today is Friday it is Sunny',
'And yesterday is Thursday it was cloudy']
- 语料库
先找出所有文档本中不重复的单词(总数记为N),放在一起, 并以出现的先后顺序(也可以按照首字母排序)作为语料库,如下图所示
# 语料库长这样:
corpus = ['Today', 'is', 'Friday', 'it', 'Sunny', 'And', 'Yesterday', 'Thursday', 'was', 'cloudy']
N = len(corpus)
print('语料库的大小为 {}'.format(N))
- one-hot 向量编码
每单词词和从0到N-1的连续整数一一对应(每个词度都会有一个索引 i );
除了第i位置设置为1,其他为均设置为0(用1表示一个词出现在文本中,用0表示一个词没有出现)
即,我们要达到的效果如下:
# 应该长成这样,共 10 个 one-hot 向量:
Today = [1, 0, 0, 0, 0, 0, 0, 0, 0]
is_ = [0, 1, 0, 0, 1, 0, 0, 0, 0]
Friday = [0, 0, 1, 0, 0, 0, 0, 0, 0]
#... ...
2. 2 代码实现
- 代码实现:
这里使用 Pandas 里的 get_dummies()函数
import numpy as np
import pandas as pd
text = ['Today is Friday it is Sunny',
'Yesterday is Thursday it was cloudy']
# 先分词处理
text = [s.split() for s in text]
text = pd.Series(text)
print