标题: [文本处理] 如何用批处理BAT统计txt文档相似度? [打印本页]
作者: hkldd 时间: 2014-3-19 17:37 标题: 如何用批处理BAT统计txt文档相似度?
文档容量太大,已切割成1000000行n个txt文档,为了把相似度述说清楚,附件中用数字来代替需求,就像附件a.txt
文档中的数字,任意5个数字相同的行就提取进行统计,把结果写入b.txt文档中。谢谢大家!
a.txt- 05 06 07 08 09 25
- 05 06 07 08 09 26
- 05 06 07 08 09 27
- 05 06 07 08 09 28
- 05 06 07 08 09 29
- 05 06 07 08 09 30
- 05 06 07 08 09 31
- 05 06 07 08 09 32
- 05 06 07 08 09 33
- 05 06 07 08 10 11
- 05 06 07 08 10 12
- 05 06 07 08 10 13
- 05 06 07 08 10 14
- 05 06 07 08 10 15
- 05 06 07 08 10 16
- 05 06 07 08 10 17
- 05 06 07 08 09 25
- 05 06 07 08 09 26
- 01 02 03 04 05 06
- 01 02 03 04 05 07
- 01 02 03 04 05 08
- 01 02 03 04 05 09
- 01 02 03 04 05 10
- 01 02 03 04 05 11
- 01 02 03 04 05 12
- 01 02 03 04 05 13
- 01 02 03 04 05 14
- 01 02 03 04 05 15
- 01 02 03 04 05 16
- 01 02 03 04 05 17
- 01 02 03 04 05 18
- 01 02 03 04 05 19
- 01 02 03 04 05 20
- 01 02 03 04 05 21
- 01 02 03 04 05 22
- 01 02 03 04 05 23
复制代码
b.txt- 01 02 03 04 05 18
- 05 06 07 08 09 11
- 05 06 07 08 10 7
- 06 07 08 09 25 2
- 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:-
-
-
- for /f " delims=" %%s in (b.txt) do (
- findstr /c:"%%s" a.txt >>次数.txt
- )
-
复制代码
如何统计b里边每行数在a里边每行包含出现的次数 给出代码
如果全部相同以下代码可以
参考这里吧http://bbs.bathome.net/thread-24860-1-1.html-
- @echo off&setlocal enabledelayedexpansion
- sort 5.txt | findstr . >temp.tx
- set /pstr=<temp.tx
- set num=1000000001
- (for /f "skip=1 delims=" %%i in (temp.tx) do (
- if "!str!" neq "%%i" (
- echo;!num:~1! !str!
- set num=1000000001
- ) else set /a num+=1
- set str=%%i
- )
- echo;!num:~1! !str!
- )>sort.txt
- sort /r sort.txt >temp.tx
- (for /f "tokens=* delims=0" %%i in (temp.tx) do echo;%%i)>sort.txt
- del temp.tx
-
-
复制代码
terse-
- @(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 |