另一种可能:记一次利用html处理辞书索引ocr结果的尝试

笔者按:因本帖与一项初次发布本帖时仍在进行中的活动相关,但因时间限制,详细内容恐无法立时写完,故为保证时效性,本帖一楼先简要说明发帖用意及中心思想,之后会以回帖形式把处理详细过程补充完善。读者诸君若想继续看下去,可以暂时不回复(也可以考虑先点个爱心;P);不过若看完本帖一楼后对本帖内容有意见建议或批评,还请不吝赐教。

先说结论

  • 利用PDF分割工具可避免OCR结果跨列串行;
  • 利用ABBYY以HTML格式输出OCR结果,并利用文本编辑器的正则表达式批量搜索并替换,即可利用HTML标签及样式属性初步快速筛选出需要人工校对的部分,从而大大减少人工校对的工作量;
  • OCR之前可以先寻找更好的图源;
  • 众包人工校对的方式可能并不总是适用;
  • 本帖使用的工具仅限Windows,但处理思路不局限于操作系统。

笔者背景 aka. 本帖可能的局限性

  • 笔者近年来较少使用MDX,故本帖集中讨论OCR及提高其准确性的技术方法,至于OCR索引之后如何与MDX结合,则不在本帖讨论范围内;
  • 笔者可能忽视了下文列举的已有的校对方式中人工的价值;
  • 笔者对正则表达式的理解基于vscode中手工制作超星图书目录的经历,对正则的理解可能不够深刻;
  • 按照笔者列出的方法输出的最终文件,可能仍需要再行人工校对。

发帖背景

笔者给一本书补了档,源头是超星扫描本图书,SS号为14653339,画质一般:

后有人(下称「召集人」)有意制作MDX,并招募人员校对索引(下称「众包人工校对」),源数据使用的是他人基于上方OCR处理的、召集人认可的OCR后的PDF:

看到此帖后,笔者提出更好的OCR数据源头,但客观条件所限,未作OCR,仅给出了图包:

可能因众包人工校对已经开始,且召集人已给出了其推荐的校对流程,故上方图像文件并未吸引太多眼球。

期间有人提出了利用ABBYY+表格识别的方式:

但笔者根据自己使用ABBYY的经历,对上述做法的效率表示怀疑:

故有发帖原因:

无论是ABBYY划分表格,还是像之前召集人推荐的OCR PDF复制校对,都需要全程人工逐条校对。基于笔者之前手工制作超星图书目录的经历,经过笔者初步试验,利用本帖描述的纯文本检索法可以减少逐条校对工作量,大大提升本次索引OCR工作的效率。

正文开始

OCR数据源索引-pdawiki-nov’21-14653339 英语同义词辨析大词典 容新芳 2018.zip (5.3 MB)

使用到的工具

步骤概述

  1. 利用老马的 Pdg2Pic/FreePic2Pdf 或其他工具将源图像打包为PDF;

  2. 利用Briss将PDF分为4部分,同时能避开「索引」页眉,效果如下:

(详细步骤之后详述)下载Briss,打开 Briss-2.0.bat ,将弹出两个窗口。将生成的PDF拖入图形界面窗口,

  1. 点击上图窗口下方 Preview 按钮,将在默认PDF阅读器中打开切割后的PDF。将该PDF下载到本地。

  2. 将切割后的PDF导入ABBYY OCR编辑器,在OCR语言设置中,基于英语添加一个自定义字符►,并命名该新OCR语言。

  3. 以刚刚新建的语言作为OCR时使用的语言,并作全文OCR;

  4. 删除第一页中非必要OCR的区域;

  5. 以HTML格式导出OCR结果到文件,发现有两处图片:
    briss5132861162504004117-1
    briss5132861162504004117-2

  6. 用Visual Studio Code (下称vscode)在导出的文件中搜索HTML标签找到这两处图片所在位置,并结合上下文找到原图像所在词条,将图片元素 <img.*?> (正则表达式,制作过文字MDX的读者对此可能并不陌生)替换为正确的字符:

  • ►collapse
  • ►pretence

替换后得到的纯文本HTML:容新芳索引-HTML文件.txt (1.2 MB)

  1. 细心的读者可能已经发现,HTML标签已经帮我们标注出了各种元素。时间关系,这里先说部分结论,还望各位验证:
  • class="font4" 为主词条
  • class="font7" 为同义词条(►)
  • 正则
    <h[\d]>.*<\h[\d]>

    (a a|b b|c c|d d|e e|f f|g g|h h|i i|j j|k k|l l|m m|n n|o o|p p|q q|r r|s s|t t|u u|v v|w w|x x|y y|z z)
    可用于识别每个字母索引的开头。

据此,可将主词条和同义词条分离,且由于HTML标签及►符号的引入,正则表达式的作用也会比「处理换行错误」大得多。

7 Likes

很好的教程,学习了。

只是难度也是有的,难以大面积推广:
1、没有ABBYY OCR,这是商业软件。
2、正则表达式,文本编辑器使用VSCode又增加难度

有空完善下详细步骤,其实没有涉及很高深的正则。至于ABBYY,可以换用其他软件,我也希望有效果可能一般但免费正版的替代品。

谢谢分享,有空学习一下

试用了 Briss-2.0 ,很不错!get 新技能

采纳这种技术新思路,这本词典离文本化是不是又近了一步?

两个疑问:
1 Briss的操作逻辑还是没有弄明白
首先是点击区域不代表选中区域。 要右键然后选择选中。

关键的是需要怎么做才能避免反复手工划定区域?特别是每一栏的距离很近的时候,其实是很容易误操作,在划线的时候把前一栏的区域给移动了。

尝试过复制,但居然只能复制一次?尽管paste这个选项不是灰白。
而且不能在同一页复制

  • You can copy and paste a rectangle between different page clusters. Therefore you must select some crop rectangles. Afterwards press ctrl+c, then click into the page cluster where you want to paste the selected crop rectangles and paste them by pressing ctrl+v.

2 导入abbyy之后发现识别效果不太理想:


照理说不该如此,如此清晰的图像。
请教如何优化这一步。

导入PDF之后,Briss会智能判断出一个选区。可以删除这个选区,左键拖拽可以新建选区,所以拖拽四次就有四个栏目了。

目前手头没电脑。我能想到的是把文字和页码再多分一栏,识别之后再把页码行改以append到文字行后面(比如vscode的多光标编辑)。

如果只有一页,拖拽四次没事,五六页都得这么拖拽怎么办呢?
刚才尝试了一下,可以全选四栏,然后整体复制到下一页,但也只能复制一次,再下一页就要重复上述的全选复制操作。
不知道有没有更好工作流。

Briss是识别单双页的,只要图片尺寸齐整不需要拖那么多遍。你试一下就知道了。

选框之后导出PDF就好,不需要复制的,选框也不需要那么规矩,前后大小也不需要完全一致。

最好详细讲下你使用的源文件及操作步骤,可能你的用法不对。

对中文尤其是中英文混合的 OCR 识别, 目前我所用到的最准确的不是 abbyy, 而是百度 AI 开放平台的文字识别
百度这个文字识别提供 API 供有一定基础的开发者使用, 基础版本免费, 识别能力一般
而高级版本的识别能力算是比较靠谱了

并不是我使用他这个 API 去做了开发才有这样的感受的
而是使用了某些集成了百度这个文字识别高级版的产品
比如 marginnote3 在他的高级特性里, 提供了百度文字识别的在线智能矫正功能
基本上识别正确率接近100%了

如果利用起来的话, 想必能提高不少效率

主要是一直没学会用api做ocr,抱歉请问有没有现成的代码案例?

1 Like

百度智能云上有教程, 非常简单, 如果你会一点点 Python, 那基本上算是傻瓜教程了
如果选择 “通用文字识别(高精度版)”, 每月限量1000次图片识别(实名认证), 我试了一下这个同义词辨析大词典的第一页正文, 正确率基本 100% 了
链接:
https://abcxueyuan.baidu.com/#/play_video?id=15431&courseId=15431&mediaId=mda-mhsry0npuypfzahk&videoId=4539&sectionId=15684&type=免费课程&showCoursePurchaseStatus=false

非常感谢!!!

其实在首页就有功能演示, 可以直观的试一下识别准确度
https://ai.baidu.com/tech/ocr/general/

这个识别结果可以导出为带标签的html代码吗?(保留加粗的信息)

刚试了下,结论如下:
1.导出的识别结果没有任何html标签。
2.识别结果以行为单位。所以如果一行里既有中文又有英文,后期需要自己分离清洗数据
3. 中文识别率缺失牛逼。英文差点意思,尤其是单词被拆行的情况,比如一行末尾是ab-,另一行以andon起的话,一个单词的两部分无法连接起来,需要人工修正。(abbyy会自动修正)
4.英文的一些小细节处理的不太好,比如上下标的处理,很多时候数据丢失。
5. 一些特殊符号数据会丢失。
6. 很少的情况下,个别英文单词会丢失。
7. 词头不能单独识别出来(哪怕只有词头是黑体,其他内容regular)。对通过百度ocr一次性制作词库mdx很不友好。(如果所有词头都只有一个单词,且独立成行的话,也许可以通过正则找出词头。不过可能部分非词头内容,也单词独立成行,尤其是一句话的最后一个单词…)
8. 识别前如果pdf文件是分多栏的,必须先拆栏再识别,否则识别结果惨不忍睹(百度ocr会以行为单位,不区分多栏… 这点abbyy无敌,自动化合并多栏的内容,自动上下拼接)

结论:最好可以配合abbyy的识别结果,进行智能校对,方能达到最优效果。

多谢评测:pray:
看来主要是中文识别能力强,而综合能力欠缺,也许是需要二次开发