利用Python进行文章特征提取(二)
本篇blog是利用Python进行文章特征提取的续篇,主要介绍构建带TF-IDF权重的文章特征向量。
# 带TF-IDF权重的扩展词库
# 在第一篇文档里 主要是利用词库模型简单判断单词是否在文档中出现。然而与单词的顺序、频率无关。然后词的频率对文档更有意义。因此本文将词频加入特征向量
# 1.计算单词在文档中的频率
from sklearn.feature_extraction.text import CountVectorizer
documents=['The dog ate a sandwich, the wizard transfigured a sandwich, and I ate a sandwich']
vector=CountVectorizer(stop_words='english')
print(vector.fit_transform(documents).todense())
print(vector.vocabulary_)
[[2 1 3 1 1]]
{u'sandwich': 2, u'wizard': 4, u'dog': 1, u'transfigured': 3, u'ate': 0}
# 2.逆向文档率(IDF) # 但是在对比长度不同的文档时候,问题就变得复杂了。sklearn提供了TfdfTransformer类来解决问题,
#主要是对词频特征向量归一化实现不同文档向量的可比性。该类使用L2范式对特征向量进行归一化:
#另外,还有对数词频调整方法(logarithmically scaled term frequencies),把词频调整到一个更小的范围,或者词频放大法(augmented term frequencies),适用于消除较长文档的差异。
#归一化,对数调整词频和词频放大三支方法都消除文档不同大小对词频的影响。
# 对于消除频率高但是很普通的词对文档影响,引进了 逆文档频率(inverse document frequency,IDF),用来度量文档集中单词的频率。
# TfdfTransformer类默认返回TF-IDF值,其参数use_idf默认为True #sklearn提供了TfidfVectorizer类将CountVectorizer和TfdfTransformer类封装在一起。代码如下:
from sklearn.feature_extraction.text import TfidfVectorizer
documents=['The dog ate a sandwich and I ate a sandwich','The wizard transfigured a sandwich']
vector=TfidfVectorizer(stop_words='english')
print(vector.fit_transform(documents).todense())
print(vector.vocabulary_)
[[ 0.75458397 0.37729199 0.53689271 0. 0. ]
[ 0. 0. 0.44943642 0.6316672 0.6316672 ]]
{u'sandwich': 2, u'wizard': 4, u'dog': 1, u'transfigured': 3, u'ate': 0}
# 3. 通过哈希表来实现特征向量
# 在计算文档词频和IDF值时,都是先通过建立词典,然后创建特征向量。但是如果文档集特别大,就会引起内存耗尽的问题。
# 因此,可以采取利用哈希表来解决上述问题。sklearn提供了HashingVectorizer来实现,代码如下:
from sklearn.feature_extraction.text import HashingVectorizer
documents=['The dog ate a sandwich and I ate a sandwich','The wizard transfigured a sandwich']
vector=HashingVectorizer(n_features=5)
print(vector.transform(documents).todense())
[[ 0.33333333 0.66666667 0. -0.66666667 0. ]
[ 0.9486833 0. 0. -0.31622777 0. ]]
#哈希技巧是无固定状态的(stateless),它把任意的数据块映射到固定数目的位置,并且保证相同的输入一定产生相同的输出,不同的输入尽可能产生不同的输出。它可以用并行,线上,流式传输创建特征向量,因为它初始化是不需要文集输入。n_features是一个可选参数,默认值是 2的20次方。
#用带符号哈希函数可以把词块发生哈希碰撞的概率相互抵消掉,信息损失比信息损失的同时出现信息
#冗余要好。哈希技巧的一个不足是模型的结果更难察看,由于哈希函数不能显示哪个词块映射到特征
#向量的哪个位置了。 # 特别感谢《Mastering Machine Learning With scikit-learn》一书。
利用Python进行文章特征提取(二)的更多相关文章
- 利用Python进行文章特征提取(一)
# 文字特征提取 词库模型(bag of words) 2016年2月26,星期五 # 1.词库表示法 In [9]: # sklearn 的 CountVectorizer类能够把文档词块化(tok ...
- 利用python 学习数据分析 (学习二)
内容学习自: Python for Data Analysis, 2nd Edition 就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...
- python笔记 利用python 自动生成条形码 二维码
1. ean13标准条形码 from pystrich.ean13 import EAN13Encoder encode = EAN13Encoder(') encode.save('d:/barco ...
- 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子
http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 利用Python编写网络爬虫下载文章
#coding: utf-8 #title..href... str0='blabla<a title="<论电影的七个元素>——关于我对电影的一些看法以及<后会无期 ...
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcode qr = ...
- 利用Python实现一个感知机学习算法
本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
随机推荐
- COM组件多接口对象模型
COM组件有两种接口类型,Dual and Custom,如下图所示.本文说的是Custom.所谓多接口COM对象是指此COM对象实现了多于一个的自定义接口,即Custom接口. 接口图如下: 需要注 ...
- spring bean的scope
scope用来声明容器中的对象所应该处的限定场景或者说该对象的存活时间,即容器在对象进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象. ...
- poj1408(求线段交点)
求出所有线段的交点,然后利用叉乘求四边形面积即可. // // main.cpp // poj1408 // // Created by 陈加寿 on 15/12/31. // Copyright ( ...
- 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法
[BZOJ1061][Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募 ...
- Office Web Apps 2013对文档的精细定位
在一般情况下,我们使用Office Web Apps查看文档都是从第一页开始查看,不过在SharePoint搜索中,我们看到这样的结果: 这是2013搜索的一个新特性,可以深入定位到文档内部,支持PP ...
- HBase核心技术点
表的rowkey设计核心思想: 依据rowkey查询最快 对rowkey进行范围查询range 前缀匹配 预分区创建的三种方式 create 'ns1:t1', 'f1', SPLITS => ...
- sql 语句实现分页查询
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40 ) WHER ...
- C#彻底解决Oledb连接Excel数据类型不统一的问题
在使用Microsoft.Jet.OLEDB.4.0连接Excel,进行读取数据,相对使用传统的COM来读取数据,效率是很高的.但相对传统COM操作Excel来说,及存在数据类型转换的问题.因为使用O ...
- Python菜鸟之路:Python基础-操作缓存memcache、redis
一.搭建memcached和redis 略,自己去百度吧 二.操作Mmecached 1. 安装API python -m pip install python-memcached 2. 启动memc ...
- as2解析json
as2写的json解析,带容错,如果要做格式检查,得自己修改了,直接贴代码 //--------------------------------------------------json解析---- ...