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

[文本处理] 如何用批处理BAT统计txt文档相似度?

文档容量太大,已切割成1000000行n个txt文档,为了把相似度述说清楚,附件中用数字来代替需求,就像附件a.txt

文档中的数字,任意5个数字相同的行就提取进行统计,把结果写入b.txt文档中。谢谢大家!
a.txt
  1. 05 06 07 08 09 25
  2. 05 06 07 08 09 26
  3. 05 06 07 08 09 27
  4. 05 06 07 08 09 28
  5. 05 06 07 08 09 29
  6. 05 06 07 08 09 30
  7. 05 06 07 08 09 31
  8. 05 06 07 08 09 32
  9. 05 06 07 08 09 33
  10. 05 06 07 08 10 11
  11. 05 06 07 08 10 12
  12. 05 06 07 08 10 13
  13. 05 06 07 08 10 14
  14. 05 06 07 08 10 15
  15. 05 06 07 08 10 16
  16. 05 06 07 08 10 17
  17. 05 06 07 08 09 25
  18. 05 06 07 08 09 26
  19. 01 02 03 04 05 06
  20. 01 02 03 04 05 07
  21. 01 02 03 04 05 08
  22. 01 02 03 04 05 09
  23. 01 02 03 04 05 10
  24. 01 02 03 04 05 11
  25. 01 02 03 04 05 12
  26. 01 02 03 04 05 13
  27. 01 02 03 04 05 14
  28. 01 02 03 04 05 15
  29. 01 02 03 04 05 16
  30. 01 02 03 04 05 17
  31. 01 02 03 04 05 18
  32. 01 02 03 04 05 19
  33. 01 02 03 04 05 20
  34. 01 02 03 04 05 21
  35. 01 02 03 04 05 22
  36. 01 02 03 04 05 23
复制代码
b.txt
  1. 01 02 03 04 05  18
  2. 05 06 07 08 09  11
  3. 05 06 07 08 10  7
  4. 06 07 08 09 25  2
  5. 06 07 08 09 26  2
复制代码
b.txt中第6列数是统计次数

以顶楼a.txt为例,生成的b.txt应该是这样吧?
06 07 08 09 25 2
05 07 08 09 25 2
05 06 08 09 25 2
05 06 07 09 25 2
05 06 07 08 25 2
05 06 07 08 09 11
06 07 08 09 26 2
05 07 08 09 26 2
05 06 08 09 26 2
05 06 07 09 26 2
05 06 07 08 26 2
05 06 07 08 10 7
01 02 03 04 05 18

TOP

统计文本的相似度,这是高端大气上档次的玩意,就好像搞原子蛋一样,而bat貌似茶叶蛋吧,呵呵。

搞原子蛋,是极难的!
文本是有单词,行,段落,等组成的,这就要分词功能,还要有字典,字典大小还要不能太小,其中的智能化,谁又会写这块功能?

不可否认的是 统计文本的相似度,是压缩文本文件的必要课题。
1 你应研究半年winrar源码,搞懂其中的智能话原理。
旁白:我有一个1g的纯数字文本文档,用winrar5压缩完了是1.4m,用7-zip lzma2 +最大字典压缩完了是15.8m
2或许【智能化代码】+powershell+盘古分词。net 是一个靠谱的决定。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

字符串相似度算法 Levenshtein Distance 大全
http://rosettacode.org/wiki/Levenshtein_distance

统计文本的相似度没有找到

TOP

也可以做,只是很罗嗦而已!~
最好能看到原始样本,如果不方便,你可以找个人私聊帮忙解决。
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 web 于 2014-3-24 16:59 编辑

任意5个数字相同的行就提取进行统计
不好意思没看清题意  可以试试  findstr /c:
  1. for /f " delims="  %%s in (b.txt) do (
  2. findstr /c:"%%s" a.txt >>次数.txt
  3. )
复制代码
如何统计b里边每行数在a里边每行包含出现的次数        给出代码




如果全部相同以下代码可以


参考这里吧http://bbs.bathome.net/thread-24860-1-1.html
  1. @echo off&setlocal enabledelayedexpansion
  2. sort 5.txt | findstr . >temp.tx
  3. set /pstr=<temp.tx
  4. set num=1000000001
  5. (for /f "skip=1 delims=" %%i in (temp.tx) do (     
  6.     if "!str!" neq "%%i" (
  7.        echo;!num:~1!  !str!
  8.        set num=1000000001
  9.     ) else set /a num+=1
  10.       set str=%%i
  11. )
  12.        echo;!num:~1!  !str!
  13. )>sort.txt
  14. sort /r sort.txt >temp.tx
  15. (for /f "tokens=* delims=0" %%i in (temp.tx) do echo;%%i)>sort.txt
  16. del temp.tx
复制代码
terse
  1. @(gawk "{ar[$0]+=1000001}END{for(i in ar)print substr(ar[i],length(ar[i])-5,6) \":\" i}" | sort | sed "s/^0*\([0-9]\)*:\(.*\)$/\2    \1/")<aa.txt >11.txt
复制代码
复制代码gawk 和 sed 是第三方命令,自己下一个吧
CrLf

TOP

有高手给你解决问题了去看看吧
http://www.bathome.net/viewthrea ... mp;page=1#pid146236

TOP

返回列表