使用VBA快速统计词组(单词组合)词频

实例需求:产品清单如A列所示,现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重,进而实现单个单词的词频统计。

但是统计词组词频就没有那么简单了,为了便于演示,此处的词组只限于两个单词的组合。提到词组,很多时候大家先想到的是如何将获取全部的组合,例如n个无重复单词,可以产生的无重复词组个数为C(n,2) ,但是在本示例中并不需要获取这些全部组合,实现思路自然也就不同了。

在这里插入图片描述

示例代码如下。

Sub CountWorPair()Dim oDic1 As Object, oDic2 As Object, oDic3 As ObjectDim aProd, vProd, aWord, vWord, vKey, arrDataDim sKey1 As String, sKey2 As StringDim i As Long, j As Long, k As LongSet oDic1 = CreateObject("scripting.dictionary")Set oDic2 = CreateObject("scripting.dictionary")Set oDic3 = CreateObject("scripting.dictionary")arrData = Range("A1").CurrentRegion.ValueFor i = LBound(arrData) + 1 To UBound(arrData)aWord = Split(arrData(i, 1))For Each vWord In aWordIf oDic1.exists(vWord) ThenoDic1(vWord) = oDic1(vWord) & "," & arrData(i, 1)ElseoDic1(vWord) = arrData(i, 1)End IfNextNext iFor Each vKey In oDic1.keysaProd = Split(oDic1(vKey), ",")oDic2.RemoveAllFor Each vProd In aProdaWord = Split(vProd)For Each vWord In aWordIf oDic2.exists(vWord) ThenoDic2(vWord) = oDic2(vWord) + 1ElseoDic2(vWord) = 1End IfNextNextFor Each vWord In oDic2.keysIf vWord <> vKey ThensKey1 = vKey & " " & vWordsKey2 = vWord & " " & vKeyIf oDic3.exists(sKey1) ThenIf oDic2(vWord) > oDic3(sKey1) Then oDic3(sKey1) = oDic2(vWord)ElseIf oDic3.exists(sKey2) ThenIf oDic2(vWord) > oDic3(sKey2) Then oDic3(sKey2) = oDic2(vWord)ElseoDic3(sKey1) = oDic2(vWord)End IfEnd IfNextNextRange("D:E").ClearRange("D1:E1").Value = Array("Word Pair", "Times")Range("D2").Resize(oDic3.Count, 1) = Application.Transpose(oDic3.keys)Range("E2").Resize(oDic3.Count, 1) = Application.Transpose(oDic3.items)
End Sub

【代码解析】
第6~7行代码创建字典对象。

  • oDic1用于按照单词合并产品名称,即字典键为单词,字典值为逗号连接的产品名称。
  • oDic2用于统计每个单词的出现次数,注意并非全部产品的词频。
  • oDic3用于统计词组(两个单词组合)的词频。
    第9行代码将数据表加载到数组中。
    第10~19行代码循环处理每行数据,按照单词合并产品名称,oDic1("Red")的值为所有包含Red的产品名称。
    第14行代码合并产品名称。
    第16行代码为字典对象添加键值。
    第20~42行代码循环遍历oDic1中的键,最终实现统计词组词频。
    第21行代码读取oDic1的值(逗号连接的产品名称),并按照逗号拆分为产品列表(数组)。
    第22行代码清空oDic2对象。
    第23~32行代码循环变量产品列表aProd。
    第24行代码将产品列表拆分为单词列表aWord。
    第25~31行代码统计单词词频。例如处理oDic1("Red")时,将统计包含Red的产品名称中,每个单词出现的次数。
    第33~41行代码循环遍历oDic2中的键,统计词组词频。
    第34行代码判断oDic1键是否与oDic2键相同,由于产品名称中不会出现重复的单词,因此Red Red属于无效的词组。
    第35~36行代码将两个键值按照不同的次序进行组合。
    这里是本示例中的小技巧,由于Red CarCar Red实际上属于同一个词组,二者的词频也移动相同,因此在输出结果中只需要保留一个即可,所以此处需要将创建两个变量sKey1和sKey2。
    第37行代码判断oDic3中是否已经存在sKey1和sKey2,如果不存在,那么第38行代码在oDic3中添加键值。

这个逻辑看起来有些复杂,下面举例说明。
以词组Red Car为例,oDic1("Red")的值为Red Car,Red Kia Car,经过拆分统计oDic2("Car")的值为2,即词频为2,最终oDic3("Red Car")的值2,当然结果字典中也可能是oDic3("Car Red")

第43行代码清空目标单元格区域。
第44行代码设置表格标题。
第45行代码将词组(oDic3的键)写入D列。
第45行代码将词频(oDic3的值)写入E列。

微软文档:

Dictionary object

Range.Resize property (Excel)

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

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

相关文章

自动驾驶右向辅助功能规范

目 录 Contents 目录 1. 介绍 Introduction. 8 1.1 此文档的范围和目的 Scope and Purpose of This Document 8 1.2 参考文档References. 9 1.3 文档的维护 Maintenance of the Document 10 1.4 缩略词Abbreviations. 10 1.5 文档概述Document Overview.. 11 1.6 功能…

GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

本来有今天是继续接着上一章写微服务的。但是这几天有朋友说&#xff0c;再写Web框架的时候&#xff0c;遇到一个问题&#xff0c;就是很多的中间件&#xff08;redis&#xff0c;微信&#xff0c;mysql&#xff0c;mq&#xff09;的配置信息写的太杂了&#xff0c;很不好管理。…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

jvm-sandbox-repeater 精简版部署之standalone模式

jvm-sandbox-repeater 仅仅提供了录制回放的能力&#xff0c;如果需要完成业务回归、实时监控、压测等平台&#xff0c;后面须要有一个数据中心负责采集数据的加工、存储、搜索&#xff0c;repeater-console提供了简单的demo示例&#xff1b;一个模块管理平台负责管理JVM-Sandb…

设计模式——单例模式(Singleton Pattern)

概述 单例模式确保一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供整个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点&#xff1a;一是某个类只能有一个实例&#xff1b;二是它必须自行…

矩阵基本操作算法

题目描述&#xff1a; 题目描述 根据主函数和头文件提示&#xff0c;编写子函数void matrixInput(int (*mat)[COL]); void matrixPrint(int *mat[ROW]); void matrixAddT(int *mat); ​ 分别实现矩阵的输入&#xff0c;输出&#xff0c;与自身的转置相加&#xff1a;void matr…

微信小程序开发中的图片缺少后自动居中问题的解决,自动居中样式,自适应图片多少的写法

下面是写的wxml的view样式类似于web开发中的HTML文件 home-grid是我创建的一个父样式&#xff0c;采用子绝父相的定位方式 我在home-grid的父view&#xff08;类似于web中div&#xff09;中包含了三个小的子样式分别是下述代码中的class“yellowstar”&#xff0c;class“maint…

Java---线程讲解(二)

文章目录 1. Runnable接口2. 卖票案例3. 同步代码块解决数据安全问题4. 同步方法解决数据安全问题5. 线程安全的类6. Lock锁 1. Runnable接口 1. 创建线程的另一种方法是声明一个实现Runnable接口的类&#xff0c;之后重写run()方法&#xff0c;然后可以分配类的实例&#xff0…

基于remix+metamask+ganache的智能合约部署调用

在我们部署合约时为了让它更接近真实区块链去中心化体验&#xff0c;我们需要调用小狐狸&#xff08;Metamask&#xff09;来进行真实交易&#xff0c;而metamask里没有内置虚拟测试币&#xff0c;我们需要进行调用Ganache来添加带有虚拟测试币的账号。以上就是三者的关系&…

从 MLOps 到 LMOps 的关键技术嬗变

本文整理自 2023 年 9 月 3 日 QCon 全球软件开发大会 2023 北京站 —— 从 MLOps 到 LMOps 分论坛的同名主题演讲。 本次分享的内容结构如下&#xff1a; 从 MLOps 到 LMOps&#xff1b; MLOps 概述、挑战与解决方案&#xff1b; LMOps 实施挑战与关键技术&#xff08;大模…

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中&#xff0c;我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛&#xff0c;它被称为…

Java最全面试题专题---1、Java基础知识(2)

笔者有七八年的面试者经验&#xff0c;负责公司技术同学的社招和校招&#xff0c;近些年面试过三四百个技术同学&#xff0c;考虑接近年底这个时段&#xff0c;整理并更新一些以往的面试经验&#xff0c;希望同学们跳槽能有个更好的工作&#xff0c;如有需要的同学可以关注下笔…

Jenkins安装

环境 Ubuntu&#xff0c; 其他平台查看官方文档 步骤 安装jdk sudo apt-get install openjdk-8-jdk 安装Jenkins first add the key to your system wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -Then add a Jenkins apt repository …

使用Golang构建高性能网络爬虫

目录 一、Golang的特点 二、构建网络爬虫的步骤 三、关键技术和注意事项 使用协程进行并发处理 使用通道进行协程间的通信 合理控制并发数和处理速度 遵守网站使用协议和法律法规 防止被网站封禁或限制访问 优化网页解析和数据处理 异常处理和错误处理 日志记录和监控…

Flink入门之部署(二)

三种部署模式 standalone集群&#xff0c;会话模式部署&#xff1a;先启动flink集群 web UI提交shell命令提交&#xff1a;bin/flink run -d -m hadoop102:8081 -c com.atguigu.flink.deployment.Flinke1_NordCount./Flink-1.0-SNAPSHOT.jar --hostname hadoop102 --port 8888 …

vmware虚拟机17 安装macos14过程及问题处理亲测

前期准备 1、可引导可虚拟机安装的macOS Sonoma 14 ISO镜像安装文件 我找到得地址&#xff0c;下载自行解决啦 2、VMware虚拟机应用软件 官网下载就好&#xff0c;搜个码搞定 3、解锁工具macOS Unlocker 开始安装&#xff1a; 1、打开VMware软件&#xff0c;新建一个系统…

API集锦:免费好用的API接口

通用文字识别OCR&#xff1a;多场景、多语种、高精度的整图文字检测和识别服务&#xff0c;多项指标行业领先&#xff0c;可识别中、英、日、韩、法、德多种语言。 二维码识别OCR&#xff1a;对图片中的二维码、条形码进行检测和识别&#xff0c;返回存储的文字内容。 手机号…

Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)

中英文混合输出是文本转语音(TTS)项目中很常见的需求场景&#xff0c;尤其在技术文章或者技术视频领域里&#xff0c;其中文文本中一定会夹杂着海量的英文单词&#xff0c;我们当然不希望AI口播只会念中文&#xff0c;Bert-vits2老版本(2.0以下版本)并不支持英文训练和推理&…

完整方案开放下载!详解中国移动《通信网络中量子计算应用研究报告》

8月30日&#xff0c;中国移动在第四届科技周暨战略性新兴产业共创发展大会上重磅发布了《通信网络中量子计算应用研究报告》。 玻色量子作为中国移动在光量子计算领域的唯一一家合作企业兼战投企业&#xff0c;在量子计算应用于通信行业达成了深入合作&#xff0c;并在5G天线多…

干货分享|300平米A级机房设计方案

本方案中XXX计算机中心机房建设工程&#xff0c;是XXX的数据中心&#xff0c;机房位于建筑的X层&#xff0c;计算机机房面积300㎡。采购设备以及装修工艺主要用于XXX所属计算机机房装修工程。 考虑到中心机房投资大、使用周期长&#xff0c;而业主业务发展快&#xff0c;现代技…