使用sklearn实现tfidf特征计算

最近在做一些文本方面的工作,记录一下,方便以后查看。

使用sklearn进行tfidf特征提取主要有两种方法:

方法一:

#method1
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

tag_list = ['青年 吃货 唱歌',
            '少年 游戏 叛逆',
            '少年 吃货 足球']
countVectorizer = CountVectorizer()#若要过滤停用词,可在初始化模型时设置
doc_term_matrix = countVectorizer.fit_transform(tag_list)#得到的doc_term_matrix是一个csr的稀疏矩阵
#doc_term_matrix[doc_term_matrix>0]=1 #将出现次数大于0的token置1
#doc_term_matrix.todense()#将稀疏矩阵转化为稠密矩阵
vocabulary = countVectorizer.vocabulary_#得到词汇表

tfidf_transformer = TfidfTransformer()
tfidf_matrix = tfidf_transformer.fit_transform(document_term_matrix)#得到的tfidf同样是一个csr的稀疏矩阵
后来在翻看sklearn的用户手册时,发现了CountVectorizer和TfidfTransformer的结合体,没错,就是TfidfVectorizer!针对TfidfVectorizer,官方给出的说明是:Equivalent to CountVectorizer followed by TfidfTransformer.

于是就有了方法二:

#method2
from sklearn.feature_extraction.text import TfidfVectorizer
#若要过滤停用词,可在初始化模型时设置
tfidfVecorizer = TfidfVectorizer(analyzer=lambda x:x.split(' '))#可自己设置解析方法
tfidf_matrix = tfidfVecorizer.fit_transform(tags_list)
#tfidf_matrix.todense()
term2id_dict = tfidfVecorizer.vocabulary_

同样的结果,TfidfVectorizer就会简洁很多。

对tfidf_matrix的处理:
之前自己总是傻傻的直接tfidf_matrix.todense().tolist(),再一行一行取结果,要知道,当数据量很多时,这个矩阵是很大很大很大的,非常占内存。不过还好自己觉悟的快,后来把代码改成了tfidf_matrix[i].todense().tolist()[0]

tag_list的获取:
1、对文本进行分词,首选jieba分词器;
2、' '.join(token_list) 对分出来的token连接成字符串,如 '青年 吃货 唱歌'
3、tag_list.append('青年 吃货 唱歌')

如果大家对处理tfidf_matrix还有其他好办法,欢迎留言赐教!

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值