文本分析之TF-IDF

1、定义:
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。
2、原理:
在一份给定的文件里,词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
  逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大(见后续公式),则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,有时候,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.

TF的计算公式:
TF=某词语在某文件出现的次数/文章的总词数
逆文档频率(IDF)=log( 语料库的文档总数/包含该词的文档数+1)

TF-IDF通常会和余弦相似度等结合使用,例如vsm模型中,来实现文本数据的分析和挖掘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文文本进行TF-IDF的步骤如下[^1][^2]: 1. 分词:将中文文本分割成词语的序列。可以使用jieba等中文分词工具进行分词。 2. 计算词频(TF):统计每个词语在文本中出现的频率。可以使用字典或者Counter对象来记录词语的频率。 3. 计算逆文档频率(IDF):计算每个词语在整个文本集中的重要性。可以使用以下公式计算IDF: IDF(t) = log(N / (df(t) + 1)) 其中,N是文本集中的文档总数,df(t)是包含词语t的文档数。 4. 计算TF-IDF:将词频和逆文档频率相乘,得到每个词语的TF-IDF值。可以使用以下公式计算TF-IDFTF-IDF(t) = TF(t) * IDF(t) 5. 可选步骤:根据需要进行进一步的改进。例如,可以使用TF-IDF-CI来改进TF-IDF的性能。TF-IDF-CI考虑了词语在整个文本集中的分布情况,进一步提高了关键词的准确性。 以下是一个示例代码,演示如何使用Python进行中文文本的TF-IDF计算: ```python import jieba from collections import Counter import math def calculate_tf_idf(texts): # 分词 words_list = [list(jieba.cut(text)) for text in texts] # 计算词频 word_counts = [Counter(words) for words in words_list] # 计算逆文档频率 doc_count = len(texts) idf = {} for word_count in word_counts: for word, count in word_count.items(): if word not in idf: idf[word] = 0 idf[word] += 1 for word, count in idf.items(): idf[word] = math.log(doc_count / (count + 1)) # 计算TF-IDF tf_idf_list = [] for word_count in word_counts: tf_idf = {} for word, count in word_count.items(): tf_idf[word] = count * idf[word] tf_idf_list.append(tf_idf) return tf_idf_list # 示例文本 texts = [ "这是一个示例文本", "这是另一个示例文本", "这是第三个示例文本" ] # 计算TF-IDF tf_idf_list = calculate_tf_idf(texts) # 打印结果 for i, tf_idf in enumerate(tf_idf_list): print(f"文本{i+1}的TF-IDF值:") for word, value in tf_idf.items(): print(f"{word}: {value}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值