Tesseract OCR引擎有时会输出没有意义的文本,我想设计一个算法,忽略任何文本或没有意义的单词,下面是某种我想忽略的输出文本,我的简单解决方案是计算识别文本中用"分隔的单词,单词太多的文本将是垃圾(提示: 我正在扫描最多包含 40 个单词的图像)任何想法都会有所帮助,谢谢。
wo:>"|axnoA1wvw
ldflfig
°J!9O‘ !P99W M9N 6 13!-|15!Cl ‘I-/Vl
978 89l9 Z0 3+ 3 'l9.l.
97 999 VLL lLOZ+ 3 9l!q°lN
wo0'|axno/(@|au1e>1e: new;
1=96r2a1ey1 1uauud0|e/e(]
|8UJB){ p8UJL|7'
输出文本分成单词。 将单词分成三元组。 计算三倍频率,并与已知良好的文本语料库文本中的三倍频率进行比较(例如,某些邮件列表中讨论您打算OCR的内容的所有文章,减去标题行)。
当我说"三元组"时,我的意思是:
呜呜, 母鸡, 我, 说, 三, 撕裂, IPL, ple, les, i, mea, ean
。所以在这个简短的例子中,"i"的频率是2,而其他频率都是1。
如果您为预期语言中的大型文档执行这些三元组中每个三元组的频率计数,则在猜测字符串是否使用相同的语言时应该可以合理准确地进行。
当然,这是启发式的。
我使用类似的方法来检测密码更改程序中的英语密码。 它运行得很好,尽管没有完美的"明显的密码拒绝器"这样的东西。
对照字典检查单词?
当然,对于外来短语或代码之类的东西,这将产生误报。 这个问题通常是棘手的(例如,这是代码还是胡言乱语? :))。 唯一(近乎)完美的方法是将其用作启发式标记某些部分以供人工审查。