tf-idf关键词提取算法

tf-idf算法是衡量词语在文本中重要性的统计方法,用于信息提取和文本挖掘。它结合词频(tf)和逆文档频率(idf)来评估词的重要性。算法简单但未考虑语义信息,现代解决方案如Word2Vec通过词语向量化解决这个问题。
Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

tf-idf简介

在信息提取的应用场景之中,我们往往需要一些文本中的重要的词而不是文本中的所有词语来进行分析,即使原文本已经进行了去停用词的处理。
那么什么样的词算是文本中的关键词呢?一方面,这个词应该在文本中出现的次数比较多;另一方面,这个词应该不那么常见,若是这个词在很多文档中都有出现,这个词显然不能用来作为代表某个文档的重要词汇。一个合适的算法便是tf-idf算法。
tf-idf是term frequency–inverse document frequency的缩写。该算法用一种统计学的方法来衡量一个词语在文本中的重要程度,常被用于信息提取、文本挖掘等场景之中。该算法的核心便是计算一个文本中某个词语的tf值与idf值。

tf计算

tf是term frequency的缩写,指文本中的词频。衡量一个词语在文档中的出现频率有很多方法,最简单也足够有效的,便是直接计算这个词出现的次数,来作为这个词的tf值。

idf计算

idf是inverse document frequency的缩写,指“逆文档频率”,是一个用来衡量一个词常见程度的值。这个值的计算不应该基于单个文档,而应该考虑所有要进行分析的文档,来得出结果。
idf值的计算方法也有很多,这里仅提供一个常见的公式:

idf=log+1

分母处加一,是为了防止某个词从未出现过而导致分母为0。

算法实现

上面的两个值显然都与一个词的重要程度正相关,所以将其直接相乘,以乘积比较不同词之间的重要程度差异。下面是使用python的实现:

def idf(corpus):
    idfs = {}
    d = 0.0

    # 统计词出现次数
    for doc in corpus:
        d += 1
        counted = []
        for word in doc:
            if not word in counted:
                counted.append(word)
                if word in idfs: 
                    idfs[word] += 1
                else: 
                    idfs[word] = 1

    # 计算每个词逆文档值
    for word in idfs:
        idfs[word] = math.log(d/float(idfs[word]))

    return idfs


if __name__ == '__main__':
    # 获取需要的语料库,根据实际情况自行更改
    # 这里获取的语料库是每个文档的分词结果列表的列表
    corpus = getCorpus()
    idfs = idf(corpus)
    for doc in corpus:
        tfidfs = {}
        for word in doc:
            if word in tfs:
                tfidfs[word] += 1
            else:
                tfidfs[word] = 1
        for word in tfidfs:
            tfidfs[word] *= idfs[word]
        '''
        在这里实现你要做的事
        '''

实际应用中,有时tf-idf还会与别的算法相结合,比如根据词语出现的位置附加一些评判词语重要程度的信息等。

总结

tf-idf算法非常简单,但其有一个极为致命的缺陷,就是没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。
在过去,往往通过结合一些外部信息如“知网”(WordNet)或者使用可以表达隐藏信息的概率模型来处理这一缺陷。
2013年,Google开源了其Word2Vec算法,通过计算上下文来将词语进行向量化表示,在正常的训练结果下语义相近的词语向量距离较近而语义较远的词语距离向量较远。结合这一深度学习的新算法,tf-idf的传统问题得到了很好的解决。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值