TF-IDF

一、基本概念

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数(TF)成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量。通过计算文档中字词的TF-IDF可以进行文章关键词的抽取。

给定一批文档D , 文档个数为|D|, 第j个文档记为d_{j}。对每篇文档进行切词,第i个词为t_{i},第i个词在第j个文档中出现次数为t_{i,j}

二、计算方式

2.1 计算TF:

Term Frequency,词频,某个词在文档中出现的频率,是对某个词在文档中出现次数的归一化,防止指标偏向较长的文档。

tf_{i,j} = \frac{n_{i,j}}{\sum_{k}n_{k,j}}  

说明:第i个词在第j个文档中出现的词频 为 第i个词在第j个文档中出现的次数 与 第j个文档中总次数的比值。注意,对于一些“的”“了”之类的停用词,在每篇文章中出现次数都很多,需要利用TF信息过滤,以免对后续造成干扰。

2.2 计算IDF:

 inverse document frequency ,逆文档频率,词语普遍重要性的度量

idf_{i} = lg\frac{|D|}{|\{j|t_{i}\epsilon d_{j}\}|}

说明:第i个词的逆文档频率为 文档总数除以包含第i个词的文档数,然后取以10为底的对数。

2.3 计算TF-IDF

tf-idf_{i,j} = tf_{i,j} * idf_{i}

通过计算文章中每个词的tf-idf,并按tf-idf降序排序,抽取前面的几个词作为文章关键词。

三、TF-IDF优缺点

  • 优点:简单快速容易理解
  • 缺点:用词频衡量一个词的重要程度不够全面,有时候需要考虑上下文。如果考虑上下文的话,可以使用wordvec方法。

四、代码

4.1 自实现python代码 (自行百度)

4.2 使用scikit-learn 计算TF-IDF(https://www.cnblogs.com/caiyishuai/p/9511567.html

4.2.1 CountVectorizer类会将文本中的词语转换为词频矩阵。

  • fit_transform:计算每个单词出现的次数
  • get_feature_names: 获取词袋中所有文本关键字
  • toarray: 可以看到词频矩阵的结果
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
# 语料
corpus = [
        'This is the first document.',
        'This is the second document.',
        'And the third one.',
        'Is this the first document?',
        ]


vector = CountVectorizer()

# 计算单词出现的次数
x = vector.fit_transform(corpus)
# 获取词袋中所有文本关键词
word = vector.get_feature_names()
print(word)
# 打印词频矩阵结果
print(x.toarray())

输出结果:

4.2.2 TfidfTransformer用于统计每个单词的tf-idf

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
# 语料
corpus = [
        'This is the first document.',
        'This is the second document.',
        'And the third one.',
        'Is this the first document?',
        ]


vector = CountVectorizer()

# 计算单词出现的次数
x = vector.fit_transform(corpus)
# 获取词袋中所有文本关键词
word = vector.get_feature_names()
print(word)
# 打印词频矩阵结果
print(x.toarray())


transformer = TfidfTransformer()
print(transformer)
# 统计TF-IDF矩阵
tfidf = transformer.fit_transform(x)
print(tfidf.toarray())

输出结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值