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

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

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

欢迎光临大家
欢迎光临人家
谢谢你的指导a
谢谢你的指导b
谢谢你的指导c

TOP

回复 22# went


    从WIN10 1903 [239]版(记忆中是这个版本)或1803的某一个版本(具体版本忘了)后,阿三把WIN10中的记事本的默认编码改成了UTF8,而且设置无效。(可以通过用第三方记事本并修改自带记事本的注册表位置来新建默认为ANSI的文本文件)。同时把POWERSHELL 的中文帮助删除了,无法在线更新,直到WIN10 19043的某个版本发布时才把PS的在线中文帮助重新上架,但也没有了以前的详细模式了。偶把WIN10重新安装到阿三大动刀前的某个版本后禁止更新。
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 20# xp3000


    我只测试过wn10.win11,其它的不太清楚

TOP

回复 19# seekbook


    是的

TOP

回复 18# went

谢谢,原来这样,只要Windows10才这样?

TOP

回复 18# went

感谢大哥,可以实现了,解决了我的工作问题,对了,如果说,我要排除有6个字符相似的话,就把set "max=4"   这个改成5 就可以了吗?

TOP

回复 16# xp3000


    保存ansi必须要有中文字符.不然ansi和utf8编码是一模一样的,记事本会看作utf8

TOP

回复 15# seekbook


    文本里有特殊字符没处理,13楼已经更新了

TOP

回复  xp3000
你好大佬,我刚才试了一下,还是有问题,这个文件怎么都存不成ansi格式的,有点奇怪 ...
seekbook 发表于 2022-1-17 12:22


我不知道为什么保存不了ANSI,可能是系统BUG,不过我在电脑上是成功的,XP,WIN7能用,WIN10试了,也出现了不能保存ANSI,但是成功了

TOP

楼上已发哈,重发了刚才

TOP

回复 15# went


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


链接:https://pan.baidu.com/s/1UsxUFOcaTBbLtlj6PoXLZw?pwd=kkkk
提取码:kkkk
--来自百度网盘超级会员V5的分享

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 seekbook 于 2022-1-17 12:28 编辑

回复 10# xp3000


    你好大佬,我刚才试了一下,还是有问题,这个文件怎么都存不成ansi格式的,有点奇怪,保存完,打开后,又变UFT-8了,第一行的 *.txt要改成 我的文件名吗,我测试了一下,会提示找不到文件

TOP

回复 9# went


    你好,有可能是相邻,但基本都在尾部,感觉能把尾部这样去除已经可以了

TOP

返回列表