文本分析-使用jieba库实现TF-IDF算法提取关键词

news2024/9/19 10:48:30

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


1.TF-IDF算法介绍

        TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。简单来说就是:一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。这也就是TF-IDF的含义。

50ac51ba2c4f4f31bd3317896db25db8.png

TF(Term Frequency)

词频(TF)表示词条(关键字)在文本中出现的频率。

这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。

公式:

6ea46a15d63d43caa167d8e8e5992e58.png

 (术语 t 在文档中出现的次数) / (文档中的术语总数)

        但是,需要注意, 一些通用的词语对于主题并没有太大的作用, 反倒是一些出现频率较少的词才能够表达文章的主题, 所以单纯使用是TF不合适的。权重的设计必须满足:一个词预测主题的能力越强,权重越大,反之,权重越小。所有统计的文章中,一些词只是在其中很少几篇文章中出现,那么这样的词对文章的主题的作用很大,这些词的权重应该设计的较大。IDF就是在完成这样的工作。

IDF(Inverse Document Frequency)

        逆向文件频率 (IDF) :某一特定词语的IDF,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取对数得到。如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。

6058ee5cade448bdb82c5ff73e730b3c.png

log_e(文档总数/包含术语 t 的文档数)

        其中,|D| 是语料库中的文件总数。 |{j:ti∈dj}| 表示包含词语 ti 的文件数目(即 ni,j≠0 的文件数目)。如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用 1+|{j:ti∈dj}|。

        IDF用于衡量一个术语的重要性。在计算 TF 时,所有项都被认为同样重要。然而,众所周知,某些术语,如"是","的"和"那个",可能会出现很多次,但并不重要。

TF-IDF(Term Frequency-Inverse Document Frequency)

        某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语,表达为 :

aa21993d1208476a957ed98e9cb02d61.png

 注: TF-IDF算法非常容易理解,并且很容易实现,但是其简单结构并没有考虑词语的语义信息,无法处理一词多义与一义多词的情况。

2.TF-IDF算法步骤

第一步,计算词频:

57a5aebae70440bb82587733396e0c57.png

考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。

d6e3f20934da4ef180725fa53ba60b17.png

第二步,计算逆文档频率:

这时,需要一个语料库(corpus),用来模拟语言的使用环境,

15beb2c703374b7081335bfd72b9b2f9.png

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

第三步,计算TF-IDF:

60b9338a0d8a41fcb6e69278bb3753e1.png

可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。 

3.jieba库实现

jieba库实现TF-IDF算法主要是通过调用extract_tags函数实现。extract_tags函数参数介绍如下:

def extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False):
        """
        Extract keywords from sentence using TF-IDF algorithm.
        Parameter:
            - topK: return how many top keywords. `None` for all possible words.
            - withWeight: if True, return a list of (word, weight);
                          if False, return a list of words.
            - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].
                        if the POS of w is not in this list,it will be filtered.
            - withFlag: only work with allowPOS is not empty.
                        if True, return a list of pair(word, weight) like posseg.cut
                        if False, return a list of words
        """

-sentence:要提取关键词的语句,必传参数

-topK:输入权重最高的K个词,默认输出前20个词

-withWeight:如果为True,则输出列表(词,权重)的形式;False则直接返回词语列表。默认为False

-allowPOS:允许出现的词性列表,比如['ns', 'n', 'vn', 'v','nr'] ,如果词语不在词性列表中将会被过滤掉。默认不过滤任何词性

-withFlag:没啥用,不用管,直接默认即可。

示例: 

在提取关键词之前可以加上自定义词典和停用词库,这里我用一条评论文本进行示范,注意使用jieba中的extract_tags函数不需要进行分词,直接传入原始文本即可。

import jieba.analyse
import jieba
jieba.load_userdict('自定义词典.txt')  # 应用自定义词典
jieba.analyse.set_stop_words('停用词库.txt')  # 去除自定义停用词
text = '大唐不夜城,不夜城趣味性很高,里面地方特色东西好吃,也有星巴克麦当劳等等选择,有不少场表演,外景夜景一定要薅一个,其它地方很难有这般景象了。娱乐体验了不倒翁,还有十二时辰里面表演更加精彩、内景拍照不错,簋唐楼可以尝试一下沉浸剧本杀……'
# 注意:使用TF-IDF不需要进行分词,直接将原始文本传入使用
jieba.analyse.extract_tags(text,topK=20) # 默认输出前20个关键词,数值可自行修改

# 如果想获取关键词的权重可以加上
jieba.analyse.extract_tags(text,topK=20,withWeight=True)

 

# 只筛选出n名词的单词 
jieba.analyse.extract_tags(text,topK=20,allowPOS=['n'])

 可以发现,它只将n名词的词语打印了出来。

关于其他词性的代码,具体可以参考下面表格:

案例实战

任务:使用TF-IDF提取红楼梦小说中的关键词及其权重

首先读取红楼梦小说

with open('HLM.txt')as f:
    content = f.read()
content

 接着使用re正则去除标点符号等异常字符,只保留中文

import re
new_text = "".join(re.findall('[\u4e00-\u9fa5]+', content, re.S))
new_text

最后使用jieba中的extract_tags函数实现TF-IDF提取关键词 

import jieba.analyse
jieba.load_userdict('自定义词典.txt')  # 应用自定义词典
jieba.analyse.set_stop_words('停用词库.txt')  # 去除自定义停用词
jieba.analyse.extract_tags(new_text,withWeight=True) 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

合宙Air724UG Cat.1模块硬件设计指南--外部SPI Flash

概述 我们可以通过标准的SPI接口和QSPI接口来外挂flash。区别如下 使用标准SPI接口外挂flash,需要自己实现flash驱动,和自己移植文件系统 使用QSPI接口外挂flash,不需要自己实现flash驱动,也不需要移植文件系统 。通过mount接口挂…

医院电气能源管理与节能措施讨论

摘要:随着我国经济建设的不断加快,我国能源消耗也越来越大,如何通过电气能源管理实现节能是各行各业都在研究的课题。医院作为我国重要的医疗服务机构,能源管理是医院管理中的重要组成部分。本文将针对医院电气能源管理与节能措施…

maven Nexus 私库安装使用总结

maven Nexus私库安装使用总结 大纲 nexus安装总结nexus使用总结域名配置admin账号密码修改创建仓库组创建仓库创建权限创建角色创建用户mvn deploy 部署配置 nexus安装总结 本例子使用的是常见的nexus2.x版本 注意需要先安装JDK Nexus 专业版是需要付费的,这里…

硬件学习 软件 Cadence day11 PCB 设计中 临时 的翻转/旋转快捷键设置等

1. PCB设计中多种快捷键设置 (临时的) 1.1 旋转 90 快捷键设置 (角度自己可以改 ) alias ~R angle 90 #CtrlR 1.2 元器件 底层 和 顶层交换的快捷键 (临时的) alias ~F mirror #Ctrl F 参考文章:Cadenc…

数据结构--单链表的建立

数据结构–链表的建立 目标: Step 1:初始化一个单链表 Step 2:每次取一个数据元素,插入到表尾/表头 尾插法建立单链表 代码实现 typedef struct LNode {int data;struct LNode *next; }LNode, *LinkList;LinkList List_TailInsert(LinkList &L) {…

vditor 自定渲染,lute.js api

渲染器函数 目前支持的渲染回调场景如下: 即使渲染:IR -> SpinVditorIRDOM 分屏:sv -> SpinVditorSVDOM 所见所得:wysiwyg -> SpinVditorDOM // 自定义回调 vue 为例子 after: function () {this.vditor.vditor.lute.Se…

2023年城市分站系统源码采用php语言

系统源码介绍: 本系统采用了php语言,根据现有了城市分布,包含了省市区,划分,具备了高级少选功能,按照每个市级城市为分站点,和主站点同样的模式。 安装方法: 快速创建几百个城市分…

如何使用配置文件参数 - 实现预训练模型训练

如何使用配置文件参数 - 实现预训练模型训练 引言为什么使用配置文件来预训练模型呢 配置文件结构举例实现通过配置文件训练模型如何微调配置文件训练出优秀的模型呢数据集特征模型架构先前研究和经验超参数调优迭代实验和评估 引言 预训练模型在各个领域的应用取得了显著的成…

实现简单的自定义曲线图

实现的效果 废话不多说看源码 package com.unite.module_index_pad.utils;import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.LinearGradient; import androi…

浅谈“信创”时代,恒辉软件发展前景

随着中国的发展,很多技术因为一些原因越来越受制于人,尤其是上游核心技术。为了解决这个问题,中国明确了“数字中国”建设战略,抢占数字经济产业链制高点。 自主创新与国产化已成为我国实现科技强国、经济强国的发展趋势与行业共…

MySQL之MHA高可用配置及故障切换实例

目录 一、MHA概述1.1 什么是MHA&#xff1f;1.2 MHA的组成<font colorblue>MHA Node &#xff08;数据节点&#xff09;<font colorblue>MHA Manager &#xff08;管理节点&#xff09;1.3 MHA 的特点 二、 MHA搭建准备2.1 实验思路2.2 实验准备 三、 MHA搭建的步骤…

rust安装

文章目录 1.官网下载2.安装3.安装验证4.打开本地文档5.安装插件6.HelloWorld①新建项目目录使用VSCode打开②新建rs文件③编译④运行 7.HelloCargo①新建项目目录使用VSCode打开②cargo build③cargo run④cargo check⑤为发布构建 8.更新与卸载 1.官网下载 官网地址&#xff…

企业数字化转型的意义及影响,你了解多少?

一、什么叫数字化转型 数字化转型是指利用数字技术和互联网的力量&#xff0c;对传统的商业模式、组织结构和流程进行全面的改造和升级&#xff0c;以适应快速变化的数字时代。它是企业和组织在面对数字化冲击和竞争压力时&#xff0c;主动采取的一种战略性调整。 数字化转型…

超级实用的思维导图软件

如果你正在寻找一款超级实用的思维导图软件&#xff0c;那么我强烈推荐你使用ProcessOn。这款软件不仅功能强大&#xff0c;而且易于使用&#xff0c;可以帮助你更好地组织和管理工作流程、学习笔记、项目管理等。 首先&#xff0c;让我们来看看ProcessOn的优点。它提供了丰富的…

@Valid @NotEmpty 数据为空返回message回前端

当添加注解NotEmpty的字段为空时&#xff0c;返回一大段异常数据。 如果想要把NotEmpty中的message返回给前端&#xff0c; 添加代码&#xff1a; ControllerAdvice public class GlobalExceptionHandler {ResponseBodyExceptionHandler(value MethodArgumentNotValidExcep…

中文词频统计及绘制词云图2

import jieba import pandas as pd import numpy as np import PIL.Image as Image from wordcloud import WordCloud#读取stopwords.txt with open(stopwords.txt,r,encoding utf-8) as f:st f.readlines()stopwords [i.strip() for i in st]with open(中国共产主义青年团第…

PMP®证书增持 CSPM-2证书,3分钟提交申请

2023年6月起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表 2、提供2张2寸蓝底…

spark应用----统计分析电商网站的用户行为数据

目录 项目说明 题目一&#xff1a;Top5热门品类 题目二&#xff1a;Top5热门品类中每个品类的Top5活跃Session统计 scala实现 新建maven项目结构如下 配置pom.xml文件 scala代码 python实现 项目说明 本项目的数据是采集电商网站的用户行为数据&#xff0c;主要包含用户的4…

自制GPD Win2底壳

直接看效果吧&#xff0c;壳子做了一个月&#xff0c;算是从0开始吧&#xff0c; 打样就打了好几套&#xff0c;最后还差点小细节没做好&#xff0c;整体效果还算满意。

资深老鸟整理,性能测试平均负载详情,一篇足够...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 uptime 命令 每次…