You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化算法对OCR识别的文本、公式块按正确顺序排序

OCR文本块单词排序问题

请参考以下段落以及检测到的单词和公式块:
(OCR结果示例:绿色矩形高亮显示文本区域,蓝色矩形高亮显示单个单词和公式,这些识别结果由Google Vision API和Mathpix OCR API结合获取)

所有提取到的矩形都会被标记为block、word或math三种类型,同时附带两个核心属性:

  • 图像上的坐标:格式为[左上、右上、右下、左下],每个点的坐标为(X,Y)格式
  • 文本值:即识别出的实际内容,例如"Der"

每个block内的所有矩形都会被保存为该block的子元素,可以直接遍历单个block的全部子元素。

当前需要解决的需求是按照阅读顺序和换行规则提取block内的单词。本次示例使用的是印刷文本,但这套OCR算法同时支持手写文本和公式识别,这会导致同一行文本的单词顶部坐标波动更大,需要找到处理这类排序需求的最高效方案。

第一种尝试方案

我最先测试的方案是遍历block内的所有单词,用y ranges映射表存储数据,表中每一项对应一行文本,使用的数据结构示例如下:

lines = {
  [10, 20]: ["Der", "entsprechende", "Kapitalwert", "der", "Zahlungsreihe", "beträgt" ...],
  [25, 35]: ["next", "line"]
}

完成行分组后再遍历每一行,将行内单词按照x坐标升序排序,就能得到正确的阅读顺序。

这套方案的缺点很明显:每个单词都需要遍历映射表的所有条目,检查自身y值是否落在对应区间内,时间复杂度较高。

我正在寻找更高效的实现思路:有没有办法可以将单个区间映射为唯一值(比如使用哈希?),直接将每一行的内容存储到对应的哈希值下?
保序哈希函数看起来适配有序值的处理场景,但我暂时不清楚如何将它应用到带阈值的区间处理场景中。

Google原生能力复用思路

前文提到识别结果本身就包含Google Vision API文档文本检测的输出,Google原生提供了扫描文档的full annotation结果,但目前单个段落的识别结果没有做排序,或许可以基于Vision API的这些输出优化排序逻辑。

内容的提问来源于stack exchange,提问作者aseidma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:06:05