Board logo

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

作者: bfd2138    时间: 2013-8-28 12:27     标题: 求助批处理如何统计一篇英文中每个词汇出现的次数

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

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

运行后出现

I 1
love 2
you 2
but 1
do 1
not 1
me 1
作者: tmplinshi    时间: 2013-8-28 13:46

本帖最后由 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"
复制代码

作者: Batcher    时间: 2013-8-28 14:52

  1. gawk "{for(i=1;i<=NF;i++)a[$i]++}END{for(i in a)print i,a[i]}" a.txt
复制代码

作者: Lumiere    时间: 2013-8-29 13:48

回复 3# Batcher


    请教一下gawk是什么命令呢,好简单啊,看运算符像是VB或者C++一类的命令格式了。
作者: Lumiere    时间: 2013-8-29 14:11

回复 2# tmplinshi


    不过你的代码好像有问题,运行提示找不到运算符和操作数。
作者: Lumiere    时间: 2013-8-29 14:27

本帖最后由 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
复制代码

作者: Batcher    时间: 2013-8-29 15:02

回复 4# Lumiere


C语言编写的一个命令行工具
http://www.bathome.net/thread-21366-1-1.html
作者: terse    时间: 2013-8-29 15:25

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

作者: Lumiere    时间: 2013-8-29 15:55

回复 7# Batcher

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2