【NLP论文】02 TF-IDF 关键词权值计算

news2024/11/30 10:55:25

之前写了一篇关于关键词词库构建的文章,没想到反响还不错,最近有空把接下来的两篇补完,也继续使用物流关键词词库举例,本篇文章承接关键词词库构建并以其为基础,将计算各关键词的 TF-IDF 权值TF-IDF 权值主要用于表达各关键词的重要程度,最后展示一个实际应用的例子—构建物流评价体系并结合TF-IDF 关键词权值,希望能给大家启发。

目录

1 TF-IDF 关键词权值计算

1.1 为什么使用 TF-IDF ?

1.2 TF-IDF 介绍

1.3 TF-IDF 关键词权值计算

① 语料

②  TF-IDF 计算

③ xx 关键词匹配

2 构建XX评价体系

2.1 构建物流评价体系

2.2 TF-IDF 权值结合评价体系


 代码地址:nlp_yinyu

1 TF-IDF 关键词权值计算

1.1 为什么使用 TF-IDF ?

上一篇文章有统计关键词的词频数,简单来说,某语料中某关键词的词频数越大,那么该关键词在该语料中的重要程度越大,这是比较容易理解的。

那么有没有一种更加直观并且可量化的方式表示某关键词在语料中的重要程度呢,那这就是本篇文章介绍的 TF-IDF,它将计算出一个数值来表示关键词对于预料的重要程度,数值越大,重要程度越大。

1.2 TF-IDF 介绍

TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本特征提取方法,用于评估一个词语对于一个文档集合中的某个文档的重要程度。

TF(Term Frequency)表示某个词在文档中出现的频率,即词频,TF值越大表示该词在文档中的重要性越高。

IDF(Inverse Document Frequency)表示逆文档频率,它衡量词语在文档集合中的普遍重要性,IDF值越大表示该词对于区分不同文档的能力越强。

TF-IDF的计算公式为: TF-IDF(t,d) = TF(t,d) * IDF(t)

其中,t表示词语,d表示文档。TF(t,d)表示词语t在文档d中的词频(出现的次数),IDF(t)表示词语t的逆文档频率。

1.3 TF-IDF 关键词权值计算

① 语料

语料还是以之前爬取的京东网站上的 5000 条评论数据为例,可以在文章顶部的代码仓库中下载!

②  TF-IDF 计算

和分词步骤类似,主要分为以下三步:

  1. 引入语料 excel 数据
  2. 加载自定义词典
  3. 权值计算,生成【TF-IDF关键词权值计算表.xlsx】文件

代码如下:

import jieba.analyse
import pandas as pd
from base_handle import BaseHandle # 引入工具类

baseHandle = BaseHandle() #实例化

'''
2.1 word2vec 拓展关键词词库
'''

def words_weight(url):
    '''TF-IDF关键词权值计算'''
    text = baseHandle.read_col_merge_file(url) #引入语料 excel 数据
    diy_dict=(baseHandle.get_file_abspath('物流词汇大全.txt')) #引入自定义词典
    jieba.load_userdict(diy_dict) #加载自定义字典
    # 第一个参数:待提取关键词的文本
    # 第二个参数:返回关键词的数量,重要性从高到低排序!!
    # 第三个参数:是否同时返回每个关键词的权重
    # 第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词
    keywords_list = jieba.analyse.extract_tags(text, topK=None, withWeight=True, allowPOS=())
    #print(keywords_list)#以列表形式
    df = pd.DataFrame(keywords_list,columns=['keyword', 'weight'])# list转dataframe
    df.to_excel("TF-IDF关键词权值计算表.xlsx", index=False)# 保存到本地excel
    #jieba自己本来就拥有的一个比较大众化的语料库。因此对于相对来说比较大众化的文本数据处理,jieba自带的TF-IDF语料库可以完美契合我们的诉求。


if __name__ == "__main__":
    words_weight(baseHandle.get_file_abspath('语料库_京东_5000条评论.xlsx'))

最终输出【TF-IDF关键词权值计算表.xlsx】文件如下:

可以看到这是统计了所有词汇的权值结果,足足有7424个单词,那么接下来就需要进行筛选匹配。

③ xx 关键词匹配

物流关键词词库为例,然后我们在上一篇文章中统计出来的物流关键词词库就派上用场了 👇

class BaseHandle(object):

    def __init__(self):
        # 物流关键词词库:目前30个物流关键词
        self.logistics_list = ['京东', '新鲜', '包装', '物流', '很快', '快递', '收到', '速度', '送货', '推荐',
                               '小哥', '服务', '发货', '配送', '送到', '到货', '第二天', '冷链', '完好', '送货上门'
                               # 使用word2vec加的关键词 👇
                               '严谨','保障', '效率', '方便快捷', '客服', '省心', '快捷', '严实']

主要分为以下三步:

  1. 读取TF-IDF关键词权值计算表
  2. 遍历匹配
  3. 生成【物流关键词词库权值计算表.xlsx】文件

代码如下:

import jieba.analyse
import pandas as pd
from base_handle import BaseHandle # 引入工具类

baseHandle = BaseHandle() #实例化

def words_ididf_match(keywords_list):
    '''关键词批量匹配权重'''
    df = pd.read_excel('TF-IDF关键词权值计算表.xlsx', sheet_name='Sheet1')
    b1 = []
    b2 = []
    for i in range(len(df)):
        keyword = df.loc[i,'keyword']
        if any(word if word == keyword else False for word in keywords_list): #判断列表(list)内一个或多个元素是否与关键词相同
            a1 = df.loc[i,'keyword']
            a2 = df.loc[i,'weight']
            b1.append(a1)
            b2.append(a2)
        else:
            continue
    f1 = pd.DataFrame(columns=['关键词', '权重'])
    f1['关键词'] = b1
    f1['权重'] = b2
    f1.to_excel("物流关键词词库权值计算表.xlsx", index=False)# 保存到本地excel


if __name__ == "__main__":
    words_ididf_match(baseHandle.logistics_list)

最终输出【物流关键词词库权值计算表.xlsx】文件如下:

如此一来,可以看到物流关键词词库中各关键词的权重了,各关键词对于语料的重要程度也就很直观了!

2 构建XX评价体系

2.1 构建物流评价体系

以物流为例,前文已经存在物流关键词词库和 TF-IDF 权值数据了,那么我们该如何利用呢,在此我提供一个思路:可利用这些数据来服务一个评价体系,分为几个维度,各维度下分几个指标,或者直接简单地分为几个维度即可,本文以此为例。

构建评价体系的方法见仁见智,可以说是文献统计,问卷统计等等,我将物流评价体系分为六大维度:货物完好度、物流响应能力、人员沟通质量、误差处理、物流服务费用和信息质量。

然后将物流关键词词库中的关键词匹配到这几个维度下,这就需要人工进行操作了,如下:

维度关键词
货物完好度京东,新鲜,包装,配送,冷链,到货,完好,严实
物流响应能力快递,物流,送货,收到,很快,速度,发货,送到,第二天,快捷
人员沟通质量小哥,服务,客服
误差处理保障
物流服务费用方便快捷,严谨
信息质量推荐,省心,效率

我简单地归类了下,不一定准确,算是举个例子~

2.2 TF-IDF 权值结合评价体系

接下来就是利用 TF-IDF 权值数据了,将每个关键词的权值标上去,如下图:

如此,可以清晰地看到各维度的重要程度,而且由于它提供的是量化数据,所以也会显得比较可靠。

为了显得研究更加丰富,下一篇文章将结合情感分析进行统计!

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

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

相关文章

网络安全—PKI公钥基础设施

文章目录 前提知识散列函数非对称加密数字签名 PKI受信任的人RA注册CA颁发IKE数字签名认证(交换证书)密钥管理 前提知识 散列函数 散列也可以叫哈希函数,MD5、SHA-1、SHA-2、、(不管叫啥,都记得是同一个东西就行&…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分,同样存储在mysql的metastore库中,如果metastore库的字符集不支持中文,就会导致中文显示乱码。 不建议修改Hive元数据库的编码,此处我们在metastore中找存储注释的表,找到表中存储注释的字段&a…

三菱MR-JE伺服脉冲轴应用参数设置

三菱MR-JE伺服在脉冲轴控制上的应用,常用参数设置如下: 1、常用参数 未完...

【LLM-RAG】知识库问答 | 检索 | embedding

note RAG流程(写作论文中的background:公式设定、emb、召回内容、召回基准)(工作中的思路:嵌入模型、向量存储、向量存储检索器、LLM、query改写、RAG评测方法)仅为个人关于RAG的一些零碎总结,…

Intellij建议用String替换StringBuilder

文章目录 前言String 和 StringBuilder 性能对比String 和 StringBuilder 使用的字节码对比总结 本文收发地址 https://blog.csdn.net/CSqingchen/article/details/135324313 最新更新地址 https://gitee.com/chenjim/chenjimblog 前言 最近编码时看到 Intellij 建议使用 Stri…

Ubuntu系统开启和使用2D、3D远程可视化方式

Ubuntu系统开启和使用2D、3D远程可视化方式 使用【3D可视化Ubuntu镜像】创建的云主机,可以使用3D可视化工具turbovnc进行远程连接。 注意: 1、系统环境里面已集成turbovnc远程可视化服务软件,请勿在系统里再里次重复安装任何VNC软件&#…

【IP-Adapter】进阶 - 同款人物【2】 ☑

测试模型:###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图: 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

python3 识别人像照片并纠正照片正反

实现效果: 本程序可以将下图第二张照片进行人脸识别,发现相片是否是正向,如果不是就进行相片转正形成下图第一张图。 代码 安装配置 模型下载 首先在我的这篇文件下载相应的人脸识别模型,一般 64标记点就够用,当然你也可以换成68位 人脸识别模型 shape_predictor_68…

uniapp中的uview组件库丰富的Form 表单用法

目录 基本使用 #Form-item组件说明 #验证规则 #验证规则属性 #uView自带验证规则 #综合实战 #校验错误提示方式 #校验 基本使用 此组件一般是用于表单验证使用,每一个表单域由一个u-form-item组成,表单域中可以放置u-input、u-checkbox、u-radio…

2023-12-19 LeetCode每日一题(寻找峰值 II)

2023-12-19每日一题 一、题目编号 1901. 寻找峰值 II二、题目链接 点击跳转到题目位置 三、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat ,其中任意两个相邻格子的值都 不…

小白入门java基础-反射详解

一:介绍 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言。 Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。Java语言编写的程序,在一次编译后,可以在多个系统平台上运行。 主…

如何使用Docker compose安装Spug并实现远程访问登录界面

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. Docker安装Spug二. 本地访问测试三. Linux 安装cpolar四. 配置Spug公网访问…

气象预报与计算机技术:深度融合与未来展望

气象预报与计算机技术:深度融合与未来展望 一、引言 气象预报,作为人类对自然界气象变化的探索与预测,随着时间的推移和技术的进步,已经逐渐从单纯的经验模式转变为依赖于精密的仪器与强大的计算机技术的科学预测。在本文中,我们将深入探讨气象预报与计算机技术之间的密…

负载均衡概述

负载均衡 负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 四层负载均衡 vs 七层负载均衡 四层负载均衡(目标地址和端口交换)…

Java集合/泛型篇----第六篇

系列文章目录 文章目录 系列文章目录前言一、HashTable(线程安全)二、TreeMap(可排序)三、LinkHashMap(记录插入顺序)四、泛型类前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去…

Oracle merge into 语句用法 Oracle merge into 批量更新 关联更新 批量修改 关联修改

Oracle merge into 语句用法 Oracle merge into 批量更新 关联更新 批量修改 关联修改 一、概述 在开发任务中,遇到一个需求,同一批次的名单;根据一定的条件判断是否存在,若存在,则进行更新操作;若不存在&a…

VS Code技巧汇总

VS Code技巧汇总 前言设置快捷键插件汇总环境搭建HTMLC/CPython 远程SSH连接被控端准备安装扩展配置SSH创建SSH连接打开终端窗口通过公钥连接SSH 前言 本文介绍VS Code的使用技巧,内容包含设置、快捷键、插件汇总、环境搭建、远程SSH连接、等等。 设置 中文界面 …

芋道视频199 - 工作流 - 关系图 - ruoyi-vue-pro

一 新建表单 数据库:bpm_form。实体类:BpmFormDO.java: 二 流程模型、流程部署、流程定义 1 第1步:创建流程模型 页面操作:实体类:Model.java。数据库:ACT_RE_MODEL 流程模板信息表&#xf…

手拉手后端Springboot整合JWT

环境介绍 技术栈 springbootmybatis-plusmysqljava-jwt 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 Json Web令牌简称JWT Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。…

认识Linux指令之 “mv” 指令

01.mv指令(重要) mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。 语法: mv [选项] 源文件或目录 目标文件或…