Python文本处理(1)——文本表示之词袋模型(BOW)(2)

上一篇总结了文本处理最基础的 one-hot 编码,这篇再来整理下基础的词袋模型(bag of word),以供复习(对应1127_文本处理之词袋模型(BOW))

概述

  • 文本
text = ['Today is Friday it is Sunny ',
       'And yesterday is Thursday it was cloudy']

相对于 one-hot 以每一个单词是否出现(分别用 1和 0 表示)为值的、 一个长度为 N 的向量表示不同,BOW 以一行文字/文本 中每个单词出现的频次为值,并将其表示为一个长度为 N 的向量 (这里的两个 N ,为不重复单词的数量,即语料库的大小)。

即我们想要的想效果是:

  • 语料库
# 语料库 (这里是按照单词出现的顺序排序)
corpus = ['Today', 'is', 'Friday', 'it', 'Sunday', 'And', 'yesterday', 'Thursday', 'was', 'cloudy']
print(len(corpus))
  • 词袋模型表示
# 词袋模型表示 
import numpy as np
bow_reprentation = [[1, 2, 1, 1, 1, 1, 0, 0, 0, 0],
                    [0, 1, 0, 1, 0, 1, 1, 1, 1, 1]]
print(np.array(bow_reprentation).shape)

代码实现:

(使用 sklearn 中的 CountVectorizer 来实现)

from sklearn.feature_extraction.text import CountVectorizer

ct_vectorizer = CountVectorizer()     # 实例化
ct_vectorizer.fit(text)              
# 查看 语料库
print(len(ct_vectorizer.vocabulary_))
print(ct_vectorizer.vocabulary_) # 后面是语料库内单词的排序序号(这里是按照首字母排序)

fit 的过程进行文本分词,以及语料库的建立两个过程

10
{'today': 7, 'is': 3, 'friday': 2, 'it': 4, 'sunny': 5, 'and': 0, 'yesterday': 9, 'thursday': 6, 'was': 8, 'cloudy': 1}

bow = ct_vectorizer.transform(text) 
print(bow)

transform 的过程进行单词向量化
其结果保存在 Scipy稀疏矩阵中——只显示非零元素;结构为:行 * 索引 频次)

print(bow.toarray())   

这里是将稀疏矩阵变成 ”密集的“numpy 数组形式(显示出非零元素)

[[0 0 1 2 1 1 0 1 0 0]
 [1 1 0 1 1 0 1 0 1 1]]

顺便说一句:fit_transform() = fit() + transform()

bow = ct_vectorizer.fit_transform(text)
print(bow.toarray())
[[0 0 1 2 1 1 0 1 0 0]
 [1 1 0 1 1 0 1 0 1 1]]

这样文本完成了向量化的过程,后续可以直接输入模型中直接使用了,后续将进行 word2vec 的总结。

你可能感兴趣的:(文本处理,自然语言处理,nlp,机器学习)