Board logo

标题: [文本处理] 如何用批处理BAT统计txt文档相似度? [打印本页]

作者: hkldd    时间: 2014-3-19 17:37     标题: 如何用批处理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列数是统计次数
作者: apang    时间: 2014-3-19 21:21

以顶楼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
作者: PowerShell    时间: 2014-3-19 22:53

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

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

不可否认的是 统计文本的相似度,是压缩文本文件的必要课题。
1 你应研究半年winrar源码,搞懂其中的智能话原理。
旁白:我有一个1g的纯数字文本文档,用winrar5压缩完了是1.4m,用7-zip lzma2 +最大字典压缩完了是15.8m
2或许【智能化代码】+powershell+盘古分词。net 是一个靠谱的决定。
作者: Tuberose    时间: 2014-3-20 10:52

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

统计文本的相似度没有找到
作者: cjiabing    时间: 2014-3-20 19:25

也可以做,只是很罗嗦而已!~
最好能看到原始样本,如果不方便,你可以找个人私聊帮忙解决。
作者: web    时间: 2014-3-23 22:15

本帖最后由 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
作者: web    时间: 2014-3-27 19:28

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




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