找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 64640|回复: 22

[文本处理] 求助:批处理如何实现去除相似重复行

[复制链接]
发表于 2022-1-15 20:10:35 | 显示全部楼层 |阅读模式
由于工作需要,使用OCR识别软件,识别结果如下案例,每行会有相似差不多的文本,去重复的代码我自己会写,但是要一模一样的行,才能去除,像下面这样,就没有办法实现,哪位朋友要是会写,帮忙给我写一个,后面可能还有几百条的样子,相似度过高的话就留住最开始的那条即可,不甚感激,祝大家春节快乐,新年发财。

欢迎光临大家
欢迎光临人家
谢谢你的指导a
谢谢你的指导b
谢谢你的指导c
发表于 2022-1-15 22:24:09 | 显示全部楼层
grepWin这个人家就行,其他软件很多支持正则表达式的都可以
  1. ^(.{1,})(.{1,9}\r?\n)(\1.{1,9}\r?\n)+
复制代码
替换
  1. $1$2
复制代码
发表于 2022-1-16 14:07:49 | 显示全部楼层
试试这一个古老的纯P思路...
@echo off
(for /f "usebackq delims=" %%s in ("a.txt") do (find "%%s" "a.new.txt">nul || echo,%%s))>"a.new.txt"
发表于 2022-1-16 14:10:22 | 显示全部楼层
抱歉!上款是精确去重...
发表于 2022-1-16 14:34:59 | 显示全部楼层
模糊识别是AI的话题之一,是当下Python的一道热菜,它有专门的一套工具库打理。LZ 不妨移步那些Py论坛试试...
发表于 2022-1-16 19:49:36 | 显示全部楼层
本帖最后由 xp3000 于 2022-1-18 18:19 编辑
  1. //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&echo 文本连续行去重复,有4个以上连续字符串不同则保留,可以修改{3,}增加数量&pause&exit

  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     str = f.ReadAll().replace(/^(.{1,})(.{3,})(.{1,}\r?\n)(.{1,}\2.{1,}\r?\n)+/mg, '$1$2$3')
  5.         .replace(/^(.{1,})(.{3,})(.{1,}\r?\n)(.{1,}\2.{1,}\r?\n)+/mg, '$1$2$3')
  6.         .replace(/^(.{1,})(.{3,})(.{1,}\r?\n)(.{1,}\2.{1,}\r?\n)+/mg, '$1$2$3');
  7.     f.Close();
  8.     var f = fso.opentextfile(file, 2);
  9.     f.Write(str);
  10. }
  11. var fso = new ActiveXObject('Scripting.FileSystemObject');
  12. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
BAT和文本都ANSI编码,可以保存ANSI了
 楼主| 发表于 2022-1-16 20:12:20 | 显示全部楼层
回复 6# xp3000


   好的谢谢大哥,我刚才测试了一下,运行代码没有反应,可以帮忙在你机子上试试不,前面那个软件我也去下载来试试,只要能解决就行哈
发表于 2022-1-16 20:17:12 | 显示全部楼层
相似重复行,这个概念太模糊,应当设定一个标准。比如下面文本中那个是相似的呢:
  1. 1
  2. 12
  3. 123
  4. 1234
  5. 12345
  6. 123456
  7. 1234567
  8. 12345678
  9. 123456789
  10. 1234567890
复制代码
发表于 2022-1-16 20:26:01 | 显示全部楼层
大致相似的行在文本中位置是否相邻?
 楼主| 发表于 2022-1-17 12:21:18 | 显示全部楼层
回复 8# qixiaobin0715


    你好,是的,这个问题我没有考虑进去,大概的话,就是前面两行之中,如果是前面5个字都一样,那么就取其中一行的意思,基本在OCR识别后,最后几位会有问题,这样就差不多把相似的排除了,很干净其实也难,因为有可能好多行都有问题哈
 楼主| 发表于 2022-1-17 12:21:53 | 显示全部楼层
回复 9# went


    你好,有可能是相邻,但基本都在尾部,感觉能把尾部这样去除已经可以了
 楼主| 发表于 2022-1-17 12:22:22 | 显示全部楼层
本帖最后由 seekbook 于 2022-1-17 12:28 编辑

回复 10# xp3000


    你好大佬,我刚才试了一下,还是有问题,这个文件怎么都存不成ansi格式的,有点奇怪,保存完,打开后,又变UFT-8了,第一行的 *.txt要改成 我的文件名吗,我测试了一下,会提示找不到文件
发表于 2022-1-17 20:12:14 | 显示全部楼层
本帖最后由 went 于 2022-1-18 14:54 编辑

类似你顶楼的格式,输入a.txt,输出b.txt
如果有连续4个及以上文字相同视为重复,只保留第一个
ansi编码,试下吧,只是纯批效率有点慢
  1. @echo off & cd /d "%~dp0"
  2. setlocal enabledelayedexpansion
  3. REM 文件设置
  4. set "in=a.txt"
  5. set "out=b.txt"
  6. REM 阈值设置 >=
  7. set "max=4"
  8. REM 比较并输出
  9. (
  10.         set "num=1"
  11.         for /f "usebackq delims=" %%i in ("%in%") do (
  12.                 title 处理第!num!行:     %%i
  13.                 if not "!last_line!"=="" (
  14.                         REM 比较当前行与上一行
  15.                         call :GetMax "!last_line!" "%%i"
  16.                         REM 当前< echo last and set last
  17.                         if !#max_char! lss !max! echo !last! & set "last=%%i"   
  18.                         set "last_max_char=!#max_char!!"
  19.                 ) else set "last=%%i"
  20.                 REM 保存当前行到上一行
  21.                 set "last_line=%%i" & set /a "num+=1"
  22.         )
  23.         REM 输出最后的last
  24.         echo !last!
  25. )>"%out%"
  26. pause&exit

  27. REM 函数,获取两个字符串最大相同字符个数,%#max_char%
  28. :GetMax
  29. set "#s1=%~1" & set "#s2=%~2" & set /a "#i=0,#max_char=0"
  30. set "#s1=%#s1:"='%" & set "#s2=%#s2:"='%"
  31. :L1
  32. if "!#s1:~%#i%,1!"=="" goto :eof
  33. set "#j=1"
  34. :L2
  35. if "%#last%"=="!#s1:~%#i%,%#j%!" ( set /a "#i+=1" & goto :L1 )
  36. set "#last=!#s1:~%#i%,%#j%!"
  37. if not "!#s2:%#last%=!"=="%#s2%" if %#max_char% lss %#j% set /a "#max_char=#j"
  38. set /a "#j+=1" & goto :L2
复制代码
 楼主| 发表于 2022-1-18 09:45:06 | 显示全部楼层
回复 15# went


感谢大佬,您的代码写的真清晰,我测试了一下处理到200多行就停住了,慢点不要紧哈,只要能处理出来就行了,我现在这个是识别了一部纪录片里的字幕,有些好几行都差不多的,我把文件 a.txt 传上来,可以麻烦您下载下来在本地跑一下吗,谢谢


链接:https://pan.baidu.com/s/1UsxUFOcaTBbLtlj6PoXLZw?pwd=kkkk
提取码:kkkk
--来自百度网盘超级会员V5的分享
 楼主| 发表于 2022-1-18 10:50:49 | 显示全部楼层
楼上已发哈,重发了刚才
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:45 , Processed in 0.020866 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表