使用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.pswp.cn/news/206807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206807.shtml
英文地址,請注明出處:http://en.pswp.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;現代技…