赞
踩
一个文本数据指的是一篇文章,或者一段话,或者一句话。这个文本数据通常称为document,或者text。我们平常的文本都是以人的表达方式展现的,是一个流数据,时间序列数据。我们如果要用计算机对文本数据进行处理,就必须将文本数据表示为计算机能理解的方式。这篇博客就讲解给定一个已经分词、去除停用词后的文本数据集,如何将其向量化的方法。
one-hot表示法先将文本数据集中不重复的单词提取出来,得到一个大小为V的词汇表。然后用一个V维的向量来表示一个文章,向量中的第d个维度上的1表示词汇表中的第d个单词出现在这篇文章中。比如给定一个数据集
首先提取出其中的不重复单词(不考虑单词在文本中出现的先后顺序),得到一个含有7个单词的词汇表:
那么文本数据集就转化为one-hot矩阵:
vocab = sorted(set(words), key=words.index)
def doc2onehot_matrix(vocab, docs):
'''
transform a document to onehot vector
'''
M = len(docs)
V = len(vocab)
onehot = np.zeros((M, V))
for d, doc in enumerate(docs):
for word in doc:
if word in vocab:
pos = vocab.index(word)
onehot[d][pos] = 1
return onehot
如果文本数据集太大,那么得到的词汇表中可能存在几千个单词,这样会文本的维度太大,不仅会导致计算时间增加,而且带来了稀疏问题(one-hot矩阵中大多数元素都是0)。因此,我们通常在计算词汇表的时候,会排除那些出现次数太少的单词,从而降低文本维度。
不同于one-hot表示法只关心单词是否出现,tf (term-frequency)表示法还关心单词出现的次数,因此tf矩阵中每个元素表示其对应的单词在文章中出现的次数/文章中的总次数,即单词在文章中的频率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。