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

之前写了一篇关于关键词词库构建的文章,没想到反响还不错,最近有空把接下来的两篇补完,也继续使用物流关键词词库举例,本篇文章承接关键词词库构建并以其为基础,将计算各关键词的 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.mfbz.cn/a/284737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

霹雳吧啦Wz《pytorch图像分类》-p2AlexNet网络

《pytorch图像分类》p2AlexNet网络基础及代码 一、零碎知识点1.过拟合2.使用dropout后的正向传播3.正则化regularization4.代码中所用的知识点 二、总体架构分析1.ReLU激活函数2.手算3.模型代码 三、训练花分类课程代码1.model.py2.train.py3.predict.py 一、零碎知识点 1.过拟…

FPGA项目(14)——基于FPGA的数字秒表设计

1.功能设计 设计内容及要求: 1.秒表最大计时范围为99分59. 99秒 2.6位数码管显示,分辨率为0.01秒 3.具有清零、启动计时、暂停及继续计时等功能 4.控制操作按键不超过二个。 2.设计思路 所采用的时钟为50M,先对时钟进行分频,得到100HZ频率…

【Maven】下载配置maven以及IDEA配置maven详情

目录 1、下载maven 2、配置settings.xml 2.1、配置本地仓库 2.2、配置阿里云镜像仓库 2.3、配置JDK 3、配置环境变量 4、IDEA配置maven 1、下载maven maven官网&#xff1a;https://maven.apache.org/ 2、配置settings.xml 2.1、配置本地仓库 <localRepository>C:\…

oracle 9i10g编程艺术-读书笔记1

根据书中提供的下载代码链接地址&#xff0c;从github上找到源代码下载地址。 https://github.com/apress下载好代码后&#xff0c;开始一段新的旅行。 设置 SQL*Plus 的 AUTOTRACE 设置 SQL*Plus 的 AUTOTRACE AUTOTRACE 是 SQL*Plus 中一个工具&#xff0c;可以显示所执行…

GPT4-AIl本地部署-chat AI本地使用

文章目录 GPT4-AIl本地部署GPT4客户端下载地址&#xff1a;对应的下载下载后的文件点击安装&#xff0c;改一下文件存放路径&#xff0c;下面都是默认下一步进度条100%后&#xff0c;点击完成 安装完桌面生成图标&#xff0c;点击选择都是NO&#xff0c;不进行数据上传点击后&a…

Python编程新技能:如何优雅地实现水仙花数?

水仙花数&#xff08;Narcissistic number&#xff09;也被称为阿姆斯特朗数&#xff08;Armstrong number&#xff09;或自恋数等&#xff0c;它是一个非负整数&#xff0c;其特性是该数的每个位上的数字的n次幂之和等于它本身&#xff0c;其中n是该数的位数。简单来说&#x…

一起学Elasticsearch系列-写入原理

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 写入过程写操作写流程写一致性策略 写入原理RefreshMergeFlushTranslog图解写入流程 ES作为一款开源的分布式搜索和分析引擎&#xff0c;以其卓越的性能和灵活的扩…

29 UVM Command Line Processor (CLP)

随着设计和验证环境的复杂性增加&#xff0c;编译时间也增加了&#xff0c;这也影响了验证时间。因此&#xff0c;需要对其进行优化&#xff0c;以便在不强制重新编译的情况下考虑新的配置或参数。我们已经看到了function or task如何基于传递参数进行行为。类似地&#xff0c;…

均方差损失推导

一、损失函数&#xff08;Cost function&#xff09; 定义&#xff1a;用于衡量模型预测结果与真实结果之间差距的函数。&#xff08;有的地方称之为代价函数&#xff0c;但是个人感觉损失函数这个名称更贴近实际用途&#xff09; 理解&#xff1a;&#xff08;以均方差损失函…

Python浪漫520表白代码

系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏飘字表白代码https://want595.blog.csdn.net/article/details/1349149703无限弹窗表白代码https://want595.blog.csdn.net/article/details/1297945184跳…

使用.Net nanoFramework 驱动ESP32的OLED显示屏

本文介绍如何使用.Net nanoFramework 驱动ESP32的OLED显示屏。我们将会从最基础的部分开始&#xff0c;逐步深入&#xff0c;让你能够理解并实现整个过程。无论你是初学者还是有一定经验的开发者&#xff0c;这篇文章都会对你有所帮助。 1. 硬件准备 1.1 ESP32开发板 这里我们…

搭建flink集群 —— 筑梦之路

Apache Flink 是一个框架和分布式处理引擎&#xff0c; 用于在无边界和有边界数据流上进行有状态的计算。 Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Flink并没有依靠自身实现所有分布式系统需要解决的问题&#xff0c; 而是在已有集群…

c语言之将输入的十进制转换成二进制数并打印原码反码补码

十进制转二进制 首先&#xff0c;我们要知道的是十进制转换成二进制数的方法。我们一般采用的除二取余的方法&#xff0c;在这里我用32位数组来进行转换。 int main() {printf("请输入一个十进制数\n");int n 0;scanf("%d", &n);int arr[32];int* p…

实战入门 K8s剩下三个模块

1.Label Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识&#xff0c;用来对它们进行区分和选择。 Label的特点&#xff1a; 一个Label会以key/value键值对的形式附加到各种对象上&#xff0c;如Node、Pod、Service等等 一个资源对象可以定义任意数量…

VMware虚拟机和Centos7镜像安装

文章目录 安装VMware虚拟机1、下载2、激活 安装Centos7镜像启动虚拟机 安装VMware虚拟机 1、下载 建议还是安装16版本 VMware16下载 https://www.123pan.com/s/HQeA-aX1Sh VMware15 链接&#xff1a;https://pan.baidu.com/s/11UD1hb6IydbxNNPxmh-MqA?pwd0630 提取码&am…

【熔断限流组件resilience4j和hystrix】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟…

使用YOLOv8和Grad-CAM技术生成图像热图

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 概述 环境准备 代码解读 导入库 定义letterbox函数 调整尺寸和比例 计算填充 应用填充 yolov8_heatmap类定义和初始化 后处理函数 绘制检测结果 类的调用函数 热图生成细节 参数解释 we…

QT上位机开发(带配置文件的倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们用qt写过倒计时软件&#xff0c;但是那个时候界面只有分钟和秒钟&#xff0c;这一次我们希望在之前的基础上拓展一下。第一&#xff0c;可…

ThreadLocal 是什么?它的实现原理是什么?

文章目录 ThreadLocal 是什么&#xff1f;它的实现原理是什么&#xff1f; ThreadLocal 是什么&#xff1f;它的实现原理是什么&#xff1f; ThreadLocal 是一种线程隔离机制&#xff0c;它提供了多线程环境下对于共享变量访问的安全性。 在多线程访问共享变量的场景中&#…

2023-12-14 LeetCode每日一题(用邮票贴满网格图)

2023-12-14每日一题 一、题目编号 2132. 用邮票贴满网格图二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stam…
最新文章