找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 3054|回复: 2

[文本处理] [分享]批处理词频出现次数统计-词条统计-文本理顺

[复制链接]
发表于 2025-8-6 12:33:04 | 显示全部楼层 |阅读模式
本帖最后由 yakeyun 于 2026-6-11 13:41 编辑

脚本会将1.txt中的文本,以一行为一个词条,进行筛选理顺排序,并统计词条出现的次数,对于工作中一些信息整理收集会用的上。
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. :: 初始化总词条计数器
  4. set /a total=0

  5. :: 检查文件是否存在
  6. if not exist "1.txt" (
  7.     echo,词频统计工具>1.txt
  8.     notepad %~dp0%\1.txt
  9. )

  10. :: 生成排序后的临时文件
  11. sort 1.txt /O _sorted.txt >nul

  12. :: 初始化行计数器
  13. set "current="
  14. set "previous="
  15. set /a count=1

  16. :: 统计相同行出现次数
  17. for /f "usebackq delims=" %%a in ("_sorted.txt") do (
  18.     set "current=%%a"
  19.     if defined previous (
  20.         if "!current!"=="!previous!" (
  21.             set /a count+=1
  22.         ) else (
  23.             echo !previous! 出现次数:!count!
  24.             set /a total+=count
  25.             set /a count=1
  26.         )
  27.     )
  28.     set "previous=!current!"
  29. )

  30. :: 输出最后一条统计并累加
  31. if defined current (
  32.     echo !current! 出现次数:!count!
  33.     set /a total+=count
  34. )

  35. :: 显示总词条数
  36. echo.
  37. echo 全部词条数为:!total!

  38. :: 清理临时文件
  39. del _sorted.txt 2>nul

  40. endlocal

  41. pause
复制代码


Powershell版本增加UI和自动排序复制功能,如果数量相同时,自动以首字母从A-Z排序:
  1. # 加载 WinForms
  2. Add-Type -AssemblyName System.Windows.Forms
  3. Add-Type -AssemblyName System.Drawing

  4. # ===== 窗体 =====
  5. $form = New-Object System.Windows.Forms.Form
  6. $form.Text = "关键词统计工具"
  7. $form.Size = New-Object System.Drawing.Size(900, 600)
  8. $form.StartPosition = "CenterScreen"

  9. # ===== 左侧文本框 =====
  10. $textBox = New-Object System.Windows.Forms.RichTextBox
  11. $textBox.Multiline = $true
  12. $textBox.ScrollBars = "Vertical"
  13. $textBox.Dock = "Fill"
  14. $textBox.Font = New-Object System.Drawing.Font("Consolas", 10)

  15. $leftPanel = New-Object System.Windows.Forms.Panel
  16. $leftPanel.Size = New-Object System.Drawing.Size(430, 0)
  17. $leftPanel.Dock = "Left"
  18. $leftPanel.Controls.Add($textBox)

  19. # ===== 右侧表格 =====
  20. $dataGrid = New-Object System.Windows.Forms.DataGridView
  21. $dataGrid.Dock = "Fill"
  22. $dataGrid.ReadOnly = $true
  23. $dataGrid.AllowUserToAddRows = $false
  24. $dataGrid.AutoSizeColumnsMode = "Fill"

  25. # ✅ 列顺序:数量(左)→ 关键词(右)
  26. $dataGrid.ColumnCount = 2
  27. $dataGrid.Columns[0].Name = "数量"
  28. $dataGrid.Columns[1].Name = "关键词"

  29. # ✅ 数量列窄一点(不超过 10000)
  30. $dataGrid.Columns[0].Width = 80
  31. $dataGrid.Columns[0].AutoSizeMode = "None"

  32. $rightPanel = New-Object System.Windows.Forms.Panel
  33. $rightPanel.Dock = "Fill"
  34. $rightPanel.Controls.Add($dataGrid)

  35. # ===== 统计按钮 =====
  36. $btn = New-Object System.Windows.Forms.Button
  37. $btn.Text = "统 计"
  38. $btn.Height = 40
  39. $btn.Dock = "Bottom"

  40. # ===== 布局 =====
  41. $split = New-Object System.Windows.Forms.SplitContainer
  42. $split.Dock = "Fill"
  43. $split.Orientation = "Vertical"
  44. $split.Panel1.Controls.Add($leftPanel)
  45. $split.Panel2.Controls.Add($rightPanel)

  46. $form.Controls.Add($split)
  47. $form.Controls.Add($btn)

  48. # ===== 统计逻辑 =====
  49. $btn.Add_Click({
  50.     $dataGrid.Rows.Clear()

  51.     $lines = $textBox.Lines |
  52.         Where-Object { $_ -ne "" } |
  53.         ForEach-Object {
  54.             $_ -replace '(','(' -replace ')',')'
  55.         }

  56.     $result = $lines | Group-Object | ForEach-Object {
  57.         [PSCustomObject]@{
  58.             数量   = $_.Count
  59.             关键词 = $_.Name
  60.         }
  61.     }

  62.     # 排序:数量 ↓,关键词 ↑
  63.     $result = $result | Sort-Object @{Expression={$_.数量};Descending=$true},@{Expression={$_.关键词};Ascending=$true}

  64.     foreach ($r in $result) {
  65.         $dataGrid.Rows.Add($r.数量, $r.关键词)
  66.     }
  67. })

  68. # ===== 运行 =====
  69. [void]$form.ShowDialog()
复制代码


评分

参与人数 2技术 +2 收起 理由
Batcher + 1 感谢分享
zzz19760225 + 1 赞!

查看全部评分

 楼主| 发表于 2025-8-6 12:33:19 | 显示全部楼层
回复 1# yakeyun

整理后的显示结果:
_ =_  出现次数:1
MS-Challenger_H610M-A  出现次数:1
昂达_H610-VH  出现次数:1
昂达_ONDA_B450S+B    出现次数:1
华擎_B450M-HDV_R4.0  出现次数:1
华硕_B650M-AYW_WIFI  出现次数:1
华硕_B760M-AYW_PRO_WIFI    出现次数:1
华硕_B760M-AYW_WIFI_D4    出现次数:1
华硕_B760M-D3H    出现次数:1
华硕_B760M-D3H_D4    出现次数:1
华硕_B760M-PRO_GAMING  出现次数:1
华硕_B760M-T_D4_R2.0    出现次数:1
华硕_B760M-T_R2.0  出现次数:1
华硕_B860M-BRO  出现次数:1
华硕_B860M_AYW_GAMING_WIFI    出现次数:1
华硕_H610M-D3H_M.2_D4    出现次数:1
华硕_PRIME_A520M-K    出现次数:1
华硕_PRIME_B365M-K    出现次数:1
华硕_PRIME_B550M-K_ARGB    出现次数:1
华硕_PRIME_B650M-A_WIFI_II  出现次数:1
华硕_PRIME_B650M-F  出现次数:1
华硕_PRIME_B650M-K  出现次数:1
华硕_PRIME_B650M-R  出现次数:1
华硕_PRIME_B760M-A_WIFI_D4    出现次数:1
华硕_PRIME_B760M-F    出现次数:1
华硕_PRIME_B760M-F_D4    出现次数:1
华硕_PRIME_H610M-F_WIFI_D4  出现次数:1
华硕_PRIME_H610M-F_WIFI_D4    出现次数:1
华硕_PRIME_X870-P_WIFI  出现次数:1
华硕_PRIME_Z790-P_WIFI  出现次数:1
华硕_PRIME_Z790-V_AX  出现次数:1
华硕_PRIME_Z890-P_WIFI    出现次数:1
华硕_PRIME_Z890M-PLUS_WIFI    出现次数:1
华硕_ROG_STRIX_B850-A_GAMING_WIFI_S  出现次数:1
华硕_ROG_STRIX_B850-G_GAMING_WIFI_S    出现次数:1
华硕_TUF_GAMING_B760M-PLUS_WIFI_D4    出现次数:1
华硕_TUF_GAMING_B760M-PLUS_WIFI_II  出现次数:1
华硕_TUF_GAMING_B850M-E_WIFI    出现次数:1
华硕_TUF_GAMING_B850M-PLUS_WIFI    出现次数:1
华硕_TUF_GAMING_B860M-PLUS_WIFI    出现次数:1
华硕_TUF_GAMING_Z890-PLUS_WIFI  出现次数:1
华硕_TX_GAMING_B760M_WIFI  出现次数:1
技嘉_B650M_GAMING_WIFI  出现次数:1
技嘉_B760M_AORUS_ELITE_WIFI6E-P_GEN5  出现次数:1
技嘉_B760M_GAMING_AC_DDR4    出现次数:1
技嘉_B760M_GAMING_WIFI_PLUS  出现次数:1
技嘉_B760M_GAMING_X  出现次数:1
技嘉_B760M_POWER_DDR4  出现次数:1
技嘉_B850M_AORUS_ELITE_WIFI6E_ICE  出现次数:1
技嘉_H610M_K_DDR4    出现次数:1
技嘉_X870_GAMING_X_WIFI7  出现次数:1
技嘉_Z790M_AORUS_ELITE_AX_ICE  出现次数:1
技嘉_Z890_AORUS_PRO_ICE  出现次数:1
技嘉_Z890M_AORUS_ELITE_WIFI7    出现次数:1
铭瑄_MS-B550M_GAMING_WIFI    出现次数:1
铭瑄_MS-B760M_GAMING_WIFI_ACE_D4    出现次数:1
铭瑄_MS-B760M_GAMING_WIFI_ICE  出现次数:1
铭瑄_MS-Challenger_B450M    出现次数:1
铭瑄_MS-Challenger_B650M  出现次数:1
铭瑄_MS-Challenger_B760M-F_WIFI  出现次数:1
铭瑄_MS-Challenger_H510M-H  出现次数:1
铭瑄_MS-Challenger_H610M-A  出现次数:1
铭瑄_MS-Challenger_H610M-D  出现次数:1
铭瑄_MS-Challenger_H610M-H_V1_WIFI    出现次数:1
铭瑄_MS-Challenger_H610M-R  出现次数:1
铭瑄_MS-eSport_H810M_GANK_WIFI  出现次数:1
铭瑄_MS-H610M_666_WIFI6_ARGB  出现次数:1
铭瑄_MS-MoDT_12600HX_MATX_D4  出现次数:1
铭瑄_MS-Terminator_B760M_D4  出现次数:1
铭瑄_MS-Terminator_B760M_D5  出现次数:1
铭瑄_MS_Terminator_B760M_GKD5  出现次数:1
七彩虹_BATTLE-AX_B450M-T_M.2_V14    出现次数:1
七彩虹_BATTLE-AX_B650M-E_PRO    出现次数:1
七彩虹_BATTLE-AX_B650M-GHA_WIFI  出现次数:1
七彩虹_BATTLE-AX_B650M-PLUS_WIFI  出现次数:1
七彩虹_BATTLE-AX_B650M-WHITE_WIFI  出现次数:1
七彩虹_BATTLE-AX_B660M-D_PRO_  出现次数:1
七彩虹_BATTLE-AX_B760M-D_PRO_    出现次数:1
七彩虹_BATTLE-AX_B760M-E_WIFI    出现次数:1
七彩虹_BATTLE-AX_B760M-G_WHITE_WIFI_D5    出现次数:1
七彩虹_BATTLE-AX_B760M-G_WIFI    出现次数:1
七彩虹_BATTLE-AX_B760M-GANK_WIFI  出现次数:1
七彩虹_BATTLE-AX_B760M-PLUS_D5_  出现次数:1
七彩虹_BATTLE-AX_B760M-PLUS_WIFI_    出现次数:1
七彩虹_BATTLE-AX_B760M-PLUS_WIFI_D5_    出现次数:1
七彩虹_BATTLE-AX_B760M-T_WIFI    出现次数:1
七彩虹_BATTLE-AX_B760M-T_WIFI_  出现次数:1
七彩虹_BATTLE-AX_B760M-WHITE_WIFI_    出现次数:1
七彩虹_BATTLE-AX_B760M-WHITE_WIFI_D5_  出现次数:1
七彩虹_BATTLE-AX_B860M-E_WIFI  出现次数:1
七彩虹_BATTLE-AX_B860M-GHA_WIFI  出现次数:1
七彩虹_BATTLE-AX_H610M-A_WIFI  出现次数:1
七彩虹_BATTLE-AX_H610M-E_WIFI    出现次数:1
七彩虹_BATTLE-AX_H610M-G_WIFI    出现次数:1
七彩虹_CH510M-K_M.2_EVO  出现次数:1
七彩虹_COLORFIRE_B760M-A_MEOW_WIFI_D5_  出现次数:1
七彩虹_COLORFIRE_B850M-A_MEOW_WIFI_ORANGE_  出现次数:1
七彩虹_CVN_B650M_GAMING_FROZEN  出现次数:1
七彩虹_CVN_B760M-PLUS_PRO_WIFI_D5_  出现次数:1
七彩虹_CVN_B760M_FROZEN_WIFI_D5_    出现次数:1
七彩虹_CVN_Z890M_GAMING_FROZEN_V20  出现次数:1
七彩虹_H610I_SMART_WIFI_V20  出现次数:1
七彩虹_H610M-Carry    出现次数:1
七彩虹_H610M-D    出现次数:1
七彩虹_H610M-D_EVO  出现次数:1
微星_A520M-A_PRO__MS-7C96_    出现次数:1
微星_B650M_BOMBER_WIFI__MS-7E30_    出现次数:1
微星_B650M_GAMING_PLUS_WIFI__MS-7E24_    出现次数:1
微星_B650M_GAMING_WIFI__MS-7E30_  出现次数:1
微星_B760M_BOMBER_DDR4__MS-7D90_  出现次数:1
微星_B760M_BOMBER_WIFI__MS-7D90_    出现次数:1
微星_B760M_BOMBER_WIFI_DDR4__MS-7D90_  出现次数:1
微星_B760M_GAMING_PLUS_WIFI__MS-7D99_    出现次数:1
微星_B760M_GAMING_WIFI__MS-7D90_  出现次数:1
微星_B850_GAMING_PLUS_WIFI__MS-7E56_  出现次数:1
微星_B860M_GAMING_PLUS_WIFI__MS-7E42_  出现次数:1
微星_MAG_B650M_MORTAR_WIFI__MS-7D76_  出现次数:1
微星_MAG_B760M_MORTAR_WIFI_II__MS-7E13_  出现次数:1
微星_MPG_X870E_CARBON_WIFI__MS-7E49_  出现次数:1
微星_MPG_X870E_EDGE_TI_WIFI__MS-7E59_  出现次数:1
微星_MPG_Z790_EDGE_WIFI__MS-7D91_  出现次数:1
微星_PRO_A620M-E__MS-7E28_  出现次数:1
微星_PRO_B650M-B__MS-7E28_  出现次数:1
微星_PRO_B650M-E__MS-7E28_  出现次数:1
微星_PRO_B760M-A__MS-7D99_  出现次数:1
微星_PRO_B760M-A_DDR4_II__MS-7D99_    出现次数:1
微星_PRO_B760M-A_WIFI_DDR4_II__MS-7D99_  出现次数:1
微星_PRO_B760M-B_DDR4__MS-7D90_    出现次数:1
微星_PRO_B760M-E__MS-7D48_  出现次数:1
微星_PRO_B760M-E_DDR4__MS-7D48_    出现次数:1
微星_PRO_H610M-E_DDR4__MS-7D48_  出现次数:1
微星_PRO_H610M-G_WIFI_DDR4__MS-7D46_  出现次数:1
微星_PRO_H610M-S_DDR4__MS-7E44_    出现次数:1
微星_PRO_H610M-S_WIFI_DDR4__MS-7E44_    出现次数:1
微星_PRO_X870-P_WIFI__MS-7E47_  出现次数:1
微星_PRO_Z790-P_WIFI__MS-7E06_  出现次数:1
微星_PRO_Z890-P_WIFI__MS-7E34_    出现次数:1
微星_Z790_GAMING_PLUS_WIFI__MS-7E06_    出现次数:1
微星_Z890_GAMING_PLUS_WIFI__MS-7E34_    出现次数:1

全部词条数为:139
请按任意键继续. .
发表于 2025-8-6 20:11:37 | 显示全部楼层
感觉挺新奇的 ,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-6-15 20:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表