TF-IDF原理及使用

1、什么是TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文件频率)

简单来说:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表本篇文章。

词频(term frequency,TF)指一个词语在该文件中出现的次数。这个数字通常会被归一化---词频除以文章总词数。

注意:一些通用的词语对于主题并没有太大的作用,反倒是一些出现频率较少的词才能够表达文章的主题,所以单纯使用TF并不合适。权重的设计必须蛮子:一个词频预测主题的能力越强,权重越大;反之,权重越小。所有统计的文章中,一些词只是在其中很少的几篇文章中出现,那么这样的词对文章主题的预测作用很大,这些词的权重应该设计的较大。IDF就是在完成这样的工作。

公式:

            

 

            

 

    IDF中分母之所以要加1,是为了避免分母为0.

那么tf-idf的结果就是tf乘以idf:

            

2.scikit-Learn中的TF-IDF

计算方法主要用到两个类:CountVectorizer和TfidfTransformer

一、CountVectorizer

CountVectorizer类会将文本中的词语转换为词频矩阵,例如矩阵中包含一个元素a[i][j],它表示j词在i类文本下的词频。它通过fit_transform函数计算各个词语出现的次数,通过get_feature_names()可获取词袋中所有文本的关键词,通过toarray()可看到词频矩阵的结果。

代码如下:

from sklearn.feature_extraction.text import CountVectorizer

#语料
corpus=[
    'This is the first document.',
    'This is the second document.',
    'And the third one.',
    'Is this the first document?'
    ]

#将文本中的词语转换为词频矩阵
vectorizer=CountVectorizer()
#计算该词语出现的次数
X=vectorizer.fit_transform(corpus)
#获取词袋中所有文本关键词
word=vectorizer.get_feature_names()

print(word)

#查看词频结果
print(X.toarray())

输出结果:

[u'and', u'document', u'first', u'is', u'one', u'second', u'the', u'third', u'this']
[[0 1 1 1 0 0 1 0 1]
 [0 1 0 1 0 2 1 0 1]
 [1 0 0 0 1 0 1 1 0]
 [0 1 1 1 0 0 1 0 1]]

从结果中可以看到,中国包括9个特征词即:

[u'and', u'document', u'first', u'is', u'one', u'second', u'the', u'third', u'this']

 同时在输出每个句子中包含特征词的个数。例如,第一句“This is the first document.”,它对应的词频为[0, 1, 1, 1, 0, 0, 1, 0, 1],假设初始序号从1开始计数,则该词频表示存在第2个位置的单词“document”共1次、第3个位置的单词“first”共1次、第4个位置的单词“is”共1次、第9个位置的单词“this”共1词。所以,每个句子都会得到一个词频向量。
 

二、CountVectorizer + TfidfTransformer

    TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值。具体用法如下:

from sklearn.feature_extraction.text import CountVectorizer
 
#语料
corpus = [
    'This is the first document.',
    'This is the second second document.',
    'And the third one.',
    'Is this the first document?',
]
#将文本中的词语转换为词频矩阵
vectorizer = CountVectorizer()
#计算个词语出现的次数
X = vectorizer.fit_transform(corpus)

 
from sklearn.feature_extraction.text import TfidfTransformer
 
#类调用
transformer = TfidfTransformer()
print transformer
#将词频矩阵X统计成TF-IDF值
tfidf = transformer.fit_transform(X)
#查看数据结构 tfidf[i][j]表示i类文本中的tf-idf权重
print tfidf.toarray()

输出结果:

    

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值