写了一个OCR文本和图像的三方对比校对工具 (2.7大更新,支持查找替换预览窗口)

现在已经ocr了不少词典,但在进行进一步格式化前一直缺少一个能逐页对比文本和对齐词条的校对工具,beyond compare是行级比较的,对多行分行处理不太好,此外也不能定位文本在图像或者pdf的位置,所以我就用ai写了这个小工具,可以加载两个文本进行对比,还可以加载paddleocr的数据通过文本对比来反向对齐文本块位置,可以直接调用PaddleOCR的api或者本地安装的版本。目前还非常粗糙,欢迎试用和提建议。

效果演示
按住Ctrl键点击红色文本会应用另一侧的文本到这一侧
按住Alt键则把这一侧文本应用到另一侧
滚动条和矩形位置自动对齐

其他示例:

竖排文本也是可以的,而且paddleocr对竖排支持比较好:

配置方法:

新建config.json文件,填入配置信息保存
示例

{
    "pdf_path": "拉汉科技词典.pdf",
    "image_dir": "images",
    "start_page": 1,
    "end_page": 799,
    "page_offset": 10,
    "text_path_left": "拉汉科技词典_gemini.txt",
    "text_path_right": "拉汉科技词典_quark.txt",
    "ocr_json_path": "ocr_results",
    "regex_left": "^\\*\\*(.*?)\\*\\*",
    "regex_right": "^([a-zA-Z]+)",
    "ocr_api_url": "",
    "ocr_api_token": ""
}

pdf_path和image_dir选择一个填入即可
start_page:起始页码
end_page:结束页码
page_offset:页码偏移,就是正文第一页对应pdf中的第几页
text_path_left,text_path_right:左右的文本,分页符为<页码>
ocr_json_path:用于存放paddleocr返回的json,json文件名需要是page_页码.json的格式
regex_left,regex_right左右两侧的词头正则表达式,选填,用于高亮词头
ocr_api_url,ocr_api_token:paddleocr的api地址和token,可以在官网申请

要求PyQt6, PyMuPDF, requests
可选安装PaddleOCRVL(如果想要本地调用)
代码:

15 Likes

谢谢分享工具。

识典古籍网站也是图文对照校读,一边读一边顺手校对、两头兼顾了


更新版本,现在支持多个工程切换,支持后台自动ocr全部页面,解决了高亮会重置撤销栈的bug。

3 Likes

Readme中有个typo:

page_offset:页码便宜,就是第一页对应pdf中的多少页

应该是页码“偏移”

我看到配置里要求输入pdf位置,但我一般是先导出为图像再去识别,能否支持只有图像文件的情况?

图像目录位置和pdf文件只要选一个填就行了,注意图片要是 页码.png/jpg的形式,或者是page_页码.png/jpg的形式,自定义格式目前不支持,不过改源码也比较简单

1 Like

添加了一些Qol改进,现在会在后台高亮信息,不会输入字符就卡顿,然后在BMP之外的字符也不会导致替换错位了,还有跨页会保持图像缩放比例。

1 Like

现在新增了导出菜单,支持各种导出选项,但是注意需要填写正则表达式来寻找词头。正则表达式可以指定分组,词头位置会有蓝色高亮,然后导出时会根据正则的词头位置和内容进行匹配输出词条,支持json和mdx.txt两种格式。

如果有ocr数据还会根据ocr文本和当前文本对比来匹配图片坐标,并可以根据坐标自动切图,切图支持跨栏和跨页,(不过由于文本可能有不匹配和错位,不保证切图准确)

切图会保存到指定目录下的image_slices,自动以第几页_第几个词.jpg来命名。

竖排文本也支持合并:


也支持输出mdx.txt 原文件

导出的mdx.txt文件可以直接作为图文对照版使用

7 Likes

增加了一个修订模式,放到另一个分支测试了,这个模式会在视图里显示另一侧文本应用后的结果,Ctrl点击可以接受修订,Alt点击拒绝修订。这个模式不能编辑文本。

现在新增了比较强大的查找替换功能,支持预览窗口,

另外还支持在差异列表中搜索。

替换支持直接使用lambda表达式,可以执行python代码,比如这个就是替换大写为小写。

另外支持字典替换,比如这个替换把所有白色圆圈替换成黑色圆圈:

可以设置模板来保存替换规则

此外传统编辑器支持的显示行号和切换是否换行功能也支持了,现在已经更新到主分支

1 Like

厉害了!有这个工具,是不是就可以把现代汉语规范词典第4版弄成文字版mdx了?:+1::+1::+1:

可以,但重点是有人肯校对,另外这个只能到无样式版的词条,结构化添加标签什么的我准备另外写一个工具来处理。

1 Like

校对工具越来越“懒人化”了,很不错。

老马的ComicEnhancerPro的切边功能必须人工指定区域范围后、再在该范围内切去四周白边,而且不能识别页眉页脚。如果能改进算法,先版面分析、自动搜索文字内容范围(包括是否包含页眉页脚),再执行批量切边操作,那就太好了。

现在的大模型都是先由厂商训练完毕后定型、发布,用户所能做的只是Prompt Engineering。要是能与用户互动,动态吸纳用户的输入和feedback,生成用户专属大模型就好了。比如,对于页面分析切边这个场景:用户上传图像、大模型给出初步切边建议、用户确认或手工修改、大模型根据这个图像和用户feedback动态调整参数。如此,这个大模型就成为服务于该用户的专属大模型,能够不断改进演化、更好地服务用户自身的需求。大模型的商业化,我认为这是个方向之一,而不是在大模型回答中插入广告、引流。

現在ocr和文字校對越來越重要了,尤其要給AI準備材料時。
樓主的工具很厲害
提及文字比對的PC电脑軟件,還有2個工具也常用,
1, Araxis Merge 2025 ,我最常用,很精確
2,winmerge,偶爾用
3,beyond compare比較文件內容,也不錯
問一下AI,還有幾個也很強悍,
不過,有時乾脆用NotebookLM進行對比,也不錯

paddleocr 现在有个新版的版面分析模块,歪斜,弯折,亮度差异什么的都支持,返回的结果有多边形区域和类别,其实用这个可以写一个切边工具。

1 Like

现在大模型的小型化进展得怎么样了?有没有希望在可预见的将来,将类似大模型的版面分析功能打包为一个dll,老马的ComicEnhancerPro只需要更改所调用的dll就能用上大模型的版面分析能力?

可以考虑设法加一个校对功能,实现办法是对比2、3栏的识别结果,如果不一致,把这两个文本和对应的1栏图像段落再发送一个大模型识别校正,返回它认为正确的内容。用这种方法并不能保证一定会把错误改过来,但应该可以减少相当人工校对的工作量。总的方向是用更多的算力,减少人力的参与。

我之前检查gemini幻觉就是这么干的,不过是和夸克对比计算相似度,相似度低于某个值就把页面提取出来重新ocr一遍。这个功能也可以集成到校对工具,不过这之前可能要增加各种模型的支持。现在各模型输出的格式都不太一致,还需要增加提示词设置和合并文本之类的比较复杂。

大模型依赖特别多,pytorch,cuda之类一堆东西还要求版本对应,很多甚至对windows支持有问题,要配合wsl或者docker才能用,很难小型化。paddleocr之前我就是折腾半天结果发现我显存不够,速度比直接调api慢好几倍,所以就不怎么用本地部署了。

1 Like

您好,可以讲一下只有图片的情况怎么配置才对?我至今无法让它运行起来。

这样设置之后没法载入ocr之后的文本:

    "projects": [
        {
            "name": "riji",
            "pdf_path": "",
            "image_dir": "D:\\HOME\\test\\git\\DigitizationTools\\img",
            "start_page": 1,
            "end_page": 1000,
            "page_offset": 0,
            "text_path_left": "1.txt",
            "text_path_right": "2.txt",
            "ocr_json_path": "D:/HOME/test/git/DigitizationTools",
            "regex_left": "",
            "regex_right": "",
            "regex_group_left": 0,
            "regex_group_right": 0,
            "use_pdf_render": false,
            "export_dir": "D:/HOME/test/git/DigitizationTools"
        },