TF-IDF说明

TF-IDF是一种文本挖掘中的向量表示方法,用于解决词频不能准确反映词重要性的问题。它结合了词频(TF)和逆文档频率(IDF)两个概念,常用于文本分类和信息检索。本文介绍了词袋模型、TF-IDF的计算公式,并通过一个中文例子进行详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TF-IDF说明

TF-IDF是文本挖掘预处理的基本步骤,在讲解前需要先简单介绍文本向量化的一种建模方法——词袋模型。

词袋模型

词袋模型(Bag of Words,简称BoW)是文本建模常用的向量表示方法。

它只考虑词在文本中出现的次数,不考虑文本中词之间的上下文关系。

先来看看构建词袋模型的一个例子:

有下面4个文本,每个文本就一句话。

文本1"I come to China to travel"
文本2"This is a car polupar in China"
文本3"I love tea and Apple"
文本4"The work is to write some papers in science"

上面4个文本包含的不重复单词有19个(按照字母顺序),这称为这4个文本的词汇表。

'and', 'apple', 'car', 'china', 'come', 'in', 'is', 'love', 'papers', 'polupar',
'science', 'some', 'tea', 'the', 'this', 'to', 'travel', 'work', 'write'

'I'是英文中的停用词,所以不参加词频统计。

停用词就是极其常见却没有什么实际含义的词,后面用到的代码把'I'设定为了停用词。

统计词汇表中的每个词在各个文本中出现的次数,如下表:

在这里插入图片描述
这样就把各个文本给向量化了,每一行代表对应的文本,这就是4个文本的词袋模型。

从上面的例子可以看出,词袋模型是关注词频(词在文本中出现的次数)的向量表示方法。

下面理顺一下词袋模型构建的步骤:

  1. 对文本进行分词,例子用的是英文文本,通过空格和标点符号就可以分词。

    实际工作中英文分词推荐使用nltk,下面是调用nltk分词的一个小示例。

    # 导入nltk包
    import nltk
    
    # 用于分词的文本
    sentence = "At eight o'clock on Thursday morning Arthur didn't feel very good."
    # 分词结果
    tokens = nltk.word_tokenize(sentence)
    print(tokens)
    

    分词输出结果

    ['At', 'eight', "o'clock", 'on', 'Thursday', 'morning', 
     'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
    

    对于中文分词,则推荐用jieba分词,下面是jieba分词的一个小示例。

    import jieba
    
    seg_list = jieba.cut("我来到北京清华大学")
    print ("分词结果: " + "/ ".join(seg_list))
    

    输出结果

    分词结果:/ 来到/ 北京/ 清华大学
    
  2. 创建词汇表,包含所有的不重复词,并排除停用词。

  3. 统计词汇表中的每个词在各个文本中出现的次数。

CountVectorizer做的事情就是上面的文本向量化过程,调用CountVectorizer的代码如下:

from sklearn.feature_extraction.text import CountVectorizer

# 文本集
corpus=["I come to China to travel",
        "This is a car polupar in China",
        "I love tea and Apple ",
        "The work is to write some papers in science"]

vectorizer = CountVectorizer()
vec_count = vectorizer.fit_transform(corpus)
print(vec_count)

结果

(0, 16)	1
(0, 3)	1
(0, 15)	2
(0, 4)	1
(1, 5)	1
(1, 9)	1
(1, 2)	1
(1, 6)	1
(1, 14)	1
(1, 3)	1
(2, 1)	1
(2, 0)	1
(2, 12)	1
(2, 7)	1
(3, 10)	1
(3, 8)	1
(3, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值