本篇blog是利用Python进行文章特征提取的续篇,主要介绍构建带TF-IDF权重的文章特征向量。

In [1]:
#  带TF-IDF权重的扩展词库
# 在第一篇文档里 主要是利用词库模型简单判断单词是否在文档中出现。然而与单词的顺序、频率无关。然后词的频率对文档更有意义。因此本文将词频加入特征向量
In [2]:
# 1.计算单词在文档中的频率
from sklearn.feature_extraction.text import CountVectorizer
In [5]:
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}
In [ ]:
# 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类封装在一起。代码如下:
In [6]:
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}
In [7]:
# 3. 通过哈希表来实现特征向量
# 在计算文档词频和IDF值时,都是先通过建立词典,然后创建特征向量。但是如果文档集特别大,就会引起内存耗尽的问题。
# 因此,可以采取利用哈希表来解决上述问题。sklearn提供了HashingVectorizer来实现,代码如下:
In [9]:
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. ]]
In [ ]:
#哈希技巧是无固定状态的(stateless),它把任意的数据块映射到固定数目的位置,并且保证相同的输入一定产生相同的输出,不同的输入尽可能产生不同的输出。它可以用并行,线上,流式传输创建特征向量,因为它初始化是不需要文集输入。n_features是一个可选参数,默认值是 2的20次方。
#用带符号哈希函数可以把词块发生哈希碰撞的概率相互抵消掉,信息损失比信息损失的同时出现信息
#冗余要好。哈希技巧的一个不足是模型的结果更难察看,由于哈希函数不能显示哪个词块映射到特征
#向量的哪个位置了。 # 特别感谢《Mastering Machine Learning With scikit-learn》一书。

利用Python进行文章特征提取(二)的更多相关文章

  1. 利用Python进行文章特征提取(一)

    # 文字特征提取 词库模型(bag of words) 2016年2月26,星期五 # 1.词库表示法 In [9]: # sklearn 的 CountVectorizer类能够把文档词块化(tok ...

  2. 利用python 学习数据分析 (学习二)

    内容学习自: Python for Data Analysis, 2nd Edition         就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ...

  3. python笔记 利用python 自动生成条形码 二维码

    1. ean13标准条形码 from pystrich.ean13 import EAN13Encoder encode = EAN13Encoder(') encode.save('d:/barco ...

  4. 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子

    http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...

  5. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

  6. 利用Python编写网络爬虫下载文章

    #coding: utf-8 #title..href... str0='blabla<a title="<论电影的七个元素>——关于我对电影的一些看法以及<后会无期 ...

  7. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = ...

  8. 利用Python实现一个感知机学习算法

    本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...

  9. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

随机推荐

  1. Oracle关于快速缓存区应用原理

    为什么oracle可以对于大量数据进行訪问时候能彰显出更加出色表现,就是通过所谓的快速缓存来实现数据的快速运算与操作.在之前的博文中我已经说过sql的运行原理,当我们訪问数据库的数据时候,首先不是从数 ...

  2. Linux下tar解压缩命令

    1.打包命令: 命令格式:tar  -zcvf   压缩文件名.tar.gz   被压缩文件名 可先切换到当前目录下.压缩文件名和被压缩文件名都可加入路径. 2.解包命令: 命令格式:tar  -zx ...

  3. 探究css中各种情况下的元素的垂直和水平居中的问题(面试题)

    今天各种纠结,真的是不想写东西(ps 我比较懒)但是老是有人问这个问题,于是我就本着分享精神还是整理一下,好了废话不多说 开始上代码 问题:外边是一个容器,容器中还有一个容器,那么请问怎么让里边的容器 ...

  4. Domino Angular 前端UI开发

    因为如今前端的要求越来越专业化,不少企业已经有前端的专业职位了.当然我们dominio软件企业.有些也在特意招一些前端的project师. 比方如今流程的多平台(之前我的有教程).就必需要有专业的UI ...

  5. Spring Ioc (this is my first example)

    一.首先看下源码结构 二.HelloWord 类 package com.northeasttycoon.bean; /** * 打印出 helloword 参数值 * * @author tycoo ...

  6. 九度OJ 1250:矩阵变换 (矩阵运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:95 解决:47 题目描述: 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一, 现给出一正数矩 ...

  7. ls --color=xxx

      默认的ls是由"ls --color=auto"组成的,假如某个目录中的文件特别多,我不希望显示颜色(可以加快显示),那就需要指定单独的参数. [root@localhost ...

  8. iOS和Android后台机制对比

    转自:http://blog.csdn.net/zsch591488385/article/details/27232881 一.iOS的“伪后台”程序 首先,先了解一下ios 中所谓的「后台进程」到 ...

  9. Android笔记之自定义的RadioGroup、RadioButton,以及View实例状态的保存与恢复

    效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  10. 我的Android进阶之旅------>Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法

    今天使用第三方Jar包afinal.jar时候,想看一下源代码,无法看 然后像添加jar对应的源码包,也无法添加相应的源代码,报错如下:The current class path entry bel ...