博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Python进行文章特征提取(二)
阅读量:5927 次
发布时间:2019-06-19

本文共 2374 字,大约阅读时间需要 7 分钟。

本篇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 TfidfVectorizerdocuments=['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 HashingVectorizerdocuments=['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

你可能感兴趣的文章
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
广平县北方计算机第一届PS设计大赛
查看>>
深入理解Java的接口和抽象类
查看>>
java与xml
查看>>
Javascript异步数据的同步处理方法
查看>>
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
行列式的乘法定理
查看>>
linux下内存释放问题
查看>>
LINQ之路12:LINQ Operators之数据转换(Projecting)
查看>>
SQL Server:数据库角色
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
SpringMVC+Swagger详细整合
查看>>