当前位置: 首页 > news >正文

利用Python进行文章特征提取(二)

本篇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》一书。

 

转载于:https://www.cnblogs.com/Haichao-Zhang/p/5223301.html

相关文章:

  • 点击推送消息跳转处理(iOS)
  • 2.C#中泛型在方法Method上的实现
  • 简单的苗为课堂搜索版式编写《超链接》
  • 深入字节码 -- 计算方法执行时间
  • Building QT projects from the command line
  • http 状态码(转载)
  • 集成Diagram Viewer跟踪流程
  • PHP 7.0.4 Windows升级
  • 发现一个nginx LUA开发Web App的框架
  • golang笔记——string
  • 【转】Android Support v4、v7、v13的区别和应用场景
  • 【HDOJ】4326 Game
  • js 定义类对象
  • Android 解决onInterceptTouchEvent只能拦截到Down事件
  • 本地使用SVN编辑发布远程SAE工程
  • [case10]使用RSQL实现端到端的动态查询
  • C学习-枚举(九)
  • docker-consul
  • egg(89)--egg之redis的发布和订阅
  • HTML-表单
  • httpie使用详解
  • IP路由与转发
  • Spring核心 Bean的高级装配
  • Vue2.x学习三:事件处理生命周期钩子
  • Vue学习第二天
  • 闭包--闭包作用之保存(一)
  • 不上全站https的网站你们就等着被恶心死吧
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 给github项目添加CI badge
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 小试R空间处理新库sf
  • 用jQuery怎么做到前后端分离
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # include “ “ 和 # include < >两者的区别
  • (175)FPGA门控时钟技术
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)汇编语言——简单程序
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***检测工具之RKHunter AIDE
  • .equals()到底是什么意思?
  • .NET BackgroundWorker
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net core 6 集成和使用 mongodb
  • .NET MVC第三章、三种传值方式
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .netcore 获取appsettings
  • .Net各种迷惑命名解释