(三)计算TF-IDF的值

1、假设

(1)共有m篇文档
(2)第i篇文档,包含Ki个词
(3)第i篇文档,词j出现的次数,记为Ci,j
(4)含有词j的文档一共有Lj

2、数据解释

TF:Term frequency(词频):某个词在该文档中出现的频率
IDF:Inverse document frequency(逆文档频率):总文档数m与含有词i的文档数的比值的对数

3、计算:以第i篇文档中的词j为例

TF = Ci,j/Ki
IDF = log(m/(1 + Lj)) //分母’+1’时防止Lj为0
TF-IDF = TF * IDF

4、代码的说明

(1)只用一个文档作为求解TF-IDF过程的说明,因此,TF、IDF的计算式的理解,也有了一些变化。实际应用在多文档中,需要调整
(2)这篇文档中,每行都是一个评论,共100行。(测试用,我删了很多)
(2)TF的计算,分母就取了这个文档所含总词数
(3)IDF的计算中,则m=100,L的含义也变成了含有词j的评论数量(评价均在一个文档中)
(4)代码包含一些预处理步骤:如去掉评论中的停止词和换行等字符、jieba分词等等。

代码如下

import jieba
import nltk
import math


# 按行读取,每一个非空行作为list的一个元素
def load_txt(filename):
    lists = []
    with open(filename, mode='r', encoding='utf-8', errors='ignore') as f:
        for each in f.readlines():
            if each != '':
                lists.append(each.strip('\n'))
    return lists  # list[str1,str2,...]


# 按行读取,去掉每行的换行和回车后,每行作为list的一个元素
def load_stopwords(filename):
    stopwords = []
    with open(filename, mode='r', encoding='utf-8'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值