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

[已解决]20元求词频统计

词频统计,我觉得有两种,分词和不分词。
不分词的,https://blog.ailemon.me/2017/02/ ... entation-algorithm/
我还用不来。

http://www.bathome.net/viewthrea ... hlight=%CD%B3%BC%C6
这里的方法好像可以。但是超级慢,一分钟大约20个。我的两字词的表是26万。

我的文本大约60多兆。想统计所有二字词和三字词的频率,有没有高效的办法。
谢谢!

回复 15# happy886rr
无法获得启动参数。不会用啊!
  1. echo
  2. trie U:C2.DI <in.txt>out.txt
  3. trie m
  4. pause
复制代码

TOP

本帖最后由 lxh623 于 2019-8-1 11:48 编辑

回复 18# WHY
如楼上所说,很快的。
我觉得,都是29万行,用2-3个字或者一行,(一行就是2-3个字)难道不一样吗。
9楼的代码,我改成4和6,就是没有结果。怪了。

TOP

回复 19# xczxczxcz
9楼的代码大约四十分钟,很快的。是29万行的关键词。

TOP

简单测试了下,顶楼诗词 复制粘贴到 60-70M。搜索存在不重复的关键词1000个用时约77秒。26万多个得6个小时左右。这东西得用 C 或 汇编之类来写。

TOP

回复 17# lxh623


      这个是根据你的具体要求来的,条件一变脚本就得改,"通用" 应该谈不上。
如果以每一行关键字(顶楼说26万行)去搜索诗词每一行内容,循环次数会增加很多,可能会降低效率。你可以试试:
  1. gawk "FNR==NR{a[$0]=1};FNR!=NR{for(i in a)b[i]+=gsub(i,i)}END{for(i in b)print i,b[i]}" 关键词.txt 诗词.txt > Result.txt
复制代码

TOP

回复 9# WHY
要是直接用每一行去搜索,不是更通用吗?
麻烦一下。

TOP

回复 15# happy886rr
请问,可以发一个到同名163邮箱吗。谢谢!
当真了解了一下,登录时间是上个月。
不知道是不是不分词的统计?是不是可以设置统计1-6个字的频率?

TOP

用我写的工具trie,上百兆文件几秒钟就能统计完,http://www.bathome.net/thread-45901-1-1.html

TOP

回复 13# lxh623


    已修改

TOP

回复 9# WHY

如果是三字词,还是可以吗?

TOP

回复 11# lxh623
17~19行,可要可不要,把bat跟原件.txt、关键词.txt放一起运行
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 10# zaqmlp
请问,路径需要写入吗?
示例:E:\ABC Book\C诗歌对联\诗词总汇

TOP

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. set "rootpath=%~dp0"
  6. cd /d "%rootpath%"
  7. powershell -NoProfile -ExecutionPolicy bypass ^
  8.     function getcount($str,$word){^
  9.         $index=0;^
  10.         $count=0;^
  11.         while(($index=$str.IndexOf($word, $index)) -ne -1){^
  12.             $count++;^
  13.             $index=$index+$word.Length;^
  14.         };^
  15.         return $count;^
  16.     };^
  17.     $file1='原件.txt';^
  18.     $file2='关键词.txt';^
  19.     $file3='统计结果.txt';^
  20.     $dic=New-Object 'System.Collections.Generic.Dictionary[string,int]';^
  21.     $text1=[IO.File]::ReadAllLines($file1,[Text.Encoding]::Default);^
  22.     $text2=[IO.File]::ReadAllLines($file2,[Text.Encoding]::Default);^
  23.     for($i=0;$i -lt $text1.count;$i++){^
  24.         for($j=0;$j -lt $text2.count;$j++){^
  25.             $c=getcount $text1[$i] $text2[$j];^
  26.             if(-not $dic.ContainsKey($text2[$j])){^
  27.                 $dic.add($text2[$j], $c);^
  28.             }else{^
  29.                 $dic[$text2[$j]]+=$c;^
  30.             };^
  31.         };^
  32.     };^
  33.     [System.Collections.ArrayList]$s=@();^
  34.     foreach($it in $dic.keys){[void]$s.add($it+' '+$dic[$it])};^
  35.     [IO.File]::WriteAllLines($file3, $s, [Text.Encoding]::Default);^
  36.     $dic;
  37. echo;%info%
  38. pause
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 WHY 于 2019-7-31 10:37 编辑
  1. @echo off
  2. REM 关键词字数,2~3个字
  3. set /a Min=2, Max=3
  4. gawk "FNR==NR{a[$0]=1;b[$0]=0};FNR!=NR{for(i=%Min%;i<=%Max%;i++)for(j=1;j<=length($0)-i+1;j++){s=substr($0,j,i);if(a[s])b[s]++}}END{for(i in b)print i,b[i]}" 关键词.txt 诗词.txt > Result.txt
  5. pause
复制代码
诗词.txt
  1. 盼断归期,划损短金篦。一搦腰围,宽褪素罗衣。知他是甚病疾,好教人没理会,拣口儿食,陡恁的无滋味。医,越恁的难调理。
  2. 秋景堪题,红叶满山溪。松径偏宜,黄菊绕东篱。正清樽斟泼醅,有白衣劝酒杯。官品极,到底成何济!归,学取他渊明醉。
复制代码
关键词.txt
  1. 盼断
  2. 一搦
  3. 天地
  4. 我们
  5. 素罗衣
复制代码
Result.txt
  1. 天地 0
  2. 素罗衣 1
  3. 我们 0
  4. 一搦 1
  5. 盼断 1
复制代码

TOP

返回列表