标题: [文本处理] 求助批处理如何统计一篇英文中每个词汇出现的次数 [打印本页]
作者: 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 编辑
- @echo off
-
- setlocal
-
- :: ================ 清空以 $ 开头的变量
- for /f "delims==" %%a in ('set $ 2^>nul') do (
- set %%a=
- )
-
- :: ================ 统计每个单词出现次数
- for /f "usebackq tokens=*" %%a in ("a.txt") do (
- for %%i in (%%a) do (
- set /a $%%i += 1
- )
- )
-
- :: ================ 输出结果
- (
- for /f "tokens=1,2 delims=$=" %%a in (' set $ ') do (
- echo %%a %%b
- )
- ) >"单词统计.txt"
复制代码
作者: Batcher 时间: 2013-8-28 14:52
- 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- @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
复制代码
作者: Batcher 时间: 2013-8-29 15:02
回复 4# Lumiere
C语言编写的一个命令行工具
http://www.bathome.net/thread-21366-1-1.html
作者: terse 时间: 2013-8-29 15:25
忽略大小写的- @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://www.bathome.net/) |
Powered by Discuz! 7.2 |