文本特征提取Bag of words(词袋)tfidfcsr_matrix

Bag of words(词袋)

统计每个词在文档中出现的次数

from sklearn.feature_extraction.text import CountVectorizer
documents = ['我 爱 北京 天安门,天安门 很 壮观',
             '我 经常 在 广场 拍照']

count_vec = CountVectorizer()

count_data = count_vec.fit_transform(documents)
print(count_data, count_data.shape, type(count_data))
count_array = count_data.toarray()
print(count_array, count_array.shape, type(count_data))
print('词汇表为:\n', count_vec.vocabulary_)

输出为:

  (0, 1)    1  # 这里=>0代表第一个文档,也就是我们语料中第一句话,1地表词汇的索引,在这里是壮观
  (0, 2)    2
  (0, 0)    1
  (1, 4)    1
  (1, 3)    1
  (1, 5)    1 (2, 6) <class 'scipy.sparse.csr.csr_matrix'>
[[1 1 2 0 0 0] =>第一个文档对应的单词索引
 [0 0 0 1 1 1]] (2, 6) <class 'scipy.sparse.csr.csr_matrix'>
词汇表为:
 {'北京': 0, '天安门': 2, '壮观': 1, '经常': 5, '广场': 3, '拍照': 4}

tfidf

计算文档中每个词的tfidf值

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vecc = TfidfVectorizer()
count_data = tfidf_vecc.fit_transform(documents)
print(count_data, count_data.shape, type(count_data))
count_array = count_data.toarray()
print(count_array, count_array.shape, type(count_data))
print('词汇表为:\n', tfidf_vecc.vocabulary_)
  (0, 0)    0.408248290463863
  (0, 2)    0.816496580927726
  (0, 1)    0.408248290463863
  (1, 5)    0.5773502691896257
  (1, 3)    0.5773502691896257
  (1, 4)    0.5773502691896257 (2, 6) <class 'scipy.sparse.csr.csr_matrix'>
[[0.40824829 0.40824829 0.81649658 0.         0.         0.        ]
 [0.         0.         0.         0.57735027 0.57735027 0.57735027]] (2, 6) <class 'scipy.sparse.csr.csr_matrix'>
词汇表为:
 {'北京': 0, '天安门': 2, '壮观': 1, '经常': 5, '广场': 3, '拍照': 4}

csr_matrix

其实我比较疑惑的地方是toarray()这个方法,count_data 为什么可以通过这个方法可以转化成那个样子,后来查了一下资料: 下面是一个关于csr_matrix的实例:

import numpy as np
from scipy.sparse import csr_matrix


arr = np.array([[0, 1, 0, 2, 0], [1, 1, 0, 2, 0], [2, 0, 5, 0, 0]])
b = csr_matrix(arr)

print(b.shape)
# 非零个数
print(b.nnz)
# 非零值
print(b.data)
# 稀疏矩阵非0元素对应的列索引值所组成数组
print(b.indices)
# 第一个元素0,之后每个元素表示稀疏矩阵中每行元素(非零元素)个数累计结果
print(b.indptr)
print(b)

输出为:

(3, 5)
7
[1 2 1 1 2 2 5]
[1 3 0 1 3 0 2]
[0 2 5 7]  =>是因为[0, 1, 0, 2, 0]有两个非0元素,[1, 1, 0, 2, 0]有3个非0,默认第一行为0,其次累加:2,2+3=5,5+2=7
  (0, 1)    1
  (0, 3)    2
  (1, 0)    1
  (1, 1)    1
  (1, 3)    2
  (2, 0)    2
  (2, 2)    5

我们看下toarray的结果

b为:
  (0, 1)    1
  (0, 3)    2
  (1, 0)    1
  (1, 1)    1
  (1, 3)    2
  (2, 0)    2
  (2, 2)    5
print(b.toarray())
[[0 1 0 2 0]
 [1 1 0 2 0]
 [2 0 5 0 0]]

我们可以看书,[0 1 0 2 0]就是将(0, 1) 1 (0, 3) 2,相对应的值,填到索引位置上。 这里比较绕,然我整理下思绪O(∩_∩)O哈哈~。。。。 参考资料: csr_matrix矩阵 sparse.csr_matrix矩阵的压缩存储

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

【学习】《R实战》读书笔记(第五章)

读书会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到...

4829
来自专栏落影的专栏

程序员进阶之算法练习(十八)

前言 最近在接触新知识,也是选择2017年的方向。 其他文集更新会放缓,没有学习就没有心得,肚中无墨就无从下笔。 但是算法练习还是挺好玩的,欢迎关注algo...

3445
来自专栏数据结构与算法

P2038 无线网络发射器选址

题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大。某城市决定对城市内的公共场所覆盖无线网。 假设该城市的布局为由严格平行的129 条东西向街道和12...

3628
来自专栏落影的专栏

程序员进阶之算法练习(二十七)

前言 日常练习,保持思考。 正文 1.Parallelogram is Back 题目链接 题目大意: 给出平行四边形的三个点(x[i], y[i]),求出...

4296
来自专栏北京马哥教育

用Python分析苹果公司股价数据

专栏地址:https://zhuanlan.zhihu.com/c_147297848

3610
来自专栏WOLFRAM

九宫格数独游戏

2148
来自专栏Crossin的编程教室

【每周一坑】乒乓数

刚从假期回来,又要迎接周末,各位看官想必都很辛苦,所以本周每周一坑为大家准备一道简单的甜点题目,本题取材于伯克利大学 CS61 课程 homework02。 求...

2896
来自专栏程序员叨叨叨

6.3 数学操作符(Math Operators)

Cg语言对向量的数学操作提供了内置的支持,Cg中的数学操作符有:*乘法、/除法、-取反、+加法、—减法、%求余、++、——、*=、/=、+=、-=。后面四种运算...

821
来自专栏PPV课数据科学社区

用Python分析苹果公司股价数据

作者:酱油哥,清华程序猿、IT非主流 专栏地址: https://zhuanlan.zhihu.com/c_147297848 要点抢先看 1.csv数据的读...

3825
来自专栏小樱的经验随笔

浅谈我对动态规划的一点理解---大家准备好小板凳,我要开始吹牛皮了~~~

前言 作为一个退役狗跟大家扯这些东西,感觉确实有点。。。但是,针对网上没有一篇文章能够很详细的把动态规划问题说明的很清楚,我决定还是拿出我的全部家当,来跟大家分...

1.5K7

扫码关注云+社区

领取腾讯云代金券