[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助批处理如何统计一篇英文中每个词汇出现的次数

一篇英文txt文本,每个单词都是用空格隔开,没有标点符号,求个批处理能列出这篇文章出现了多少单词,并每个单词出现的次数?

比如 I love you but you do not love me 这句

运行后出现

I 1
love 2
you 2
but 1
do 1
not 1
me 1

回复 7# Batcher

高级语言就是强大,批处理那么复杂的代码一句就搞定了。
Still with wax

TOP

忽略大小写的
  1. @gawk "{;for(i=1;i<=NF;i++)a[toupper($i)]++}END{for(x in a) print x,a[x]}" <a.txt>单词统计.txt
复制代码

TOP

回复 4# Lumiere


C语言编写的一个命令行工具
http://www.bathome.net/thread-21366-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 Lumiere 于 2013-8-29 23:56 编辑

回复 1# bfd2138


    以下代码在二楼仁兄代码的基础上修改,他的代码经测试有点小毛病,应该是疏忽了,不过思路很有亮点。假设你的文件名为english text.txt,你自己将代码那部分改成自己的文件名就行。我就晕了,用代码贴出来总是自动删掉一些东西。论坛要注意了,复制代码到代码框里会出毛病。现在直接给出文本代码,自己复制到bat文件里吧。
@echo off
setlocal enabledelayedexpansion
:: ================ 清空以 $ 开头的变量      
for /f "delims==" %%a in ('set $ 2^>nul') do (
set %%a=
)
:: ================ 统计每个单词出现次数
(for /f "usebackq tokens=*" %%a in ("english text.txt") do (
    for %%i in (%%a) do (
::================ 将每个单词代表的变量默认赋为空值
        set /a $%%i+=1!$%%i!
    )      
)) 2>nul
:: ================ 输出结果      
(for /f "tokens=1,2 delims=$=" %%a in ('set $') do (
     echo %%a %%b
)) >"单词统计.txt"
endlocal
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: ================ 清空以 $ 开头的变量      
  4. for /f "delims==" %%a in ('set $ 2^>nul') do (
  5. set %%a=
  6. )
  7. :: ================ 统计每个单词出现次数
  8. (for /f "usebackq tokens=*" %%a in ("english text.txt") do (
  9.     for %%i in (%%a) do (
  10. ::================ 将每个单词代表的变量默认赋为空值
  11.         set /a $%%i+=1!$%%i!
  12.     )      
  13. )
  14. ) 2>nul
  15. :: ================ 输出结果      
  16. (for /f "tokens=1,2 delims=$=" %%a in ('set $') do (
  17.      echo %%a %%b
  18. )
  19. ) >"单词统计.txt"
  20. endlocal
复制代码
Still with wax

TOP

回复 2# tmplinshi


    不过你的代码好像有问题,运行提示找不到运算符和操作数。
Still with wax

TOP

回复 3# Batcher


    请教一下gawk是什么命令呢,好简单啊,看运算符像是VB或者C++一类的命令格式了。
Still with wax

TOP

  1. gawk "{for(i=1;i<=NF;i++)a[$i]++}END{for(i in a)print i,a[i]}" a.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 tmplinshi 于 2013-8-28 21:50 编辑
  1. @echo off
  2. setlocal
  3. :: ================ 清空以 $ 开头的变量
  4. for /f "delims==" %%a in ('set $ 2^>nul') do (
  5. set %%a=
  6. )
  7. :: ================ 统计每个单词出现次数
  8. for /f "usebackq tokens=*" %%a in ("a.txt") do (
  9. for %%i in (%%a) do (
  10. set /a $%%i += 1
  11. )
  12. )
  13. :: ================ 输出结果
  14. (
  15. for /f "tokens=1,2 delims=$=" %%a in (' set $ ') do (
  16. echo %%a %%b
  17. )
  18. ) >"单词统计.txt"
复制代码
1

评分人数

    • Lumiere: 特殊符号用得真熟练,很巧妙技术 + 1

TOP

返回列表