将 hOCR 转换为 HTML 表格

Posted

技术标签:

【中文标题】将 hOCR 转换为 HTML 表格【英文标题】:Convert hOCR to HTML table 【发布时间】:2015-09-10 20:14:11 【问题描述】:

我正在寻找在 python 中实现的工具或想法,将 hOCR 文件(由应用程序中的 tesseract 生成)转换为 html 表。 这个想法是利用 hOCR 文件中的文本位置信息(在 bbox 属性中提供)根据提供的位置创建一个表。 我提供了一个例子来解释上面的想法:

我使用来自 SlideShare.net 的 image 作为我使用 tesseract 的应用程序的输入,我得到了以下 hOCR/xml 文件作为输出。

hOCR 文件:

  <div class='ocr_page' id='page_2' title='image "sample_slide.jpg"; bbox 0 0 638 479; ppageno 1'>
   <div class='ocr_carea' id='block_1_1' title="bbox 0 0 638 479">
    <p class='ocr_par' dir='ltr' id='par_1' title="bbox 31 104 620 439">
     <span class='ocr_line' id='line_1' title="bbox 32 104 613 138"><span class='ocrx_word' id='word_1' title="bbox 32 105 119 131">done:</span> <span class='ocrx_word' id='word_2' title="bbox 132 104 262 138">working</span> <span class='ocrx_word' id='word_3' title="bbox 273 105 405 138">product,</span> <span class='ocrx_word' id='word_4' title="bbox 419 104 517 132">hotels</span> <span class='ocrx_word' id='word_5' title="bbox 528 104 613 132">listed</span> 
     </span>
     <span class='ocr_line' id='line_2' title="bbox 31 160 471 194"><span class='ocrx_word' id='word_6' title="bbox 31 164 62 187">to</span> <span class='ocrx_word' id='word_7' title="bbox 75 161 122 187">do:</span> <span class='ocrx_word' id='word_8' title="bbox 134 164 227 187">smart</span> <span class='ocrx_word' id='word_9' title="bbox 236 160 330 187">traffic</span> <span class='ocrx_word' id='word_10' title="bbox 342 160 471 194">building</span> 
     </span>
     <span class='ocr_line' id='line_3' title="bbox 32 243 284 280"><span class='ocrx_word' id='word_11' title="bbox 32 243 128 280">seed</span> <span class='ocrx_word' id='word_12' title="bbox 148 243 284 280">round:</span> 
     </span>
     <span class='ocr_line' id='line_4' title="bbox 71 316 619 361"><span class='ocrx_word' id='word_13' title="bbox 71 321 156 356">CEO</span> <span class='ocrx_word' id='word_14' title="bbox 171 319 240 355">will</span> <span class='ocrx_word' id='word_15' title="bbox 260 321 384 356">invest</span> <span class='ocrx_word' id='word_16' title="bbox 517 316 619 361">$30k</span> 
     </span>
     <span class='ocr_line' id='line_5' title="bbox 75 392 620 439"><span class='ocrx_word' id='word_17' title="bbox 75 397 252 433">investor</span> <span class='ocrx_word' id='word_18' title="bbox 489 392 620 439">$120k</span> 
     </span>
    </p>
   </div>
  </div>

我需要的是根据下一个位置将 hOCR 文件转换为 html 表。预期的表格应该类似于this table。

表格单元格的大小和位置反映了 hOCR 文件中提供的信息。

图片来源:slideshare.net

【问题讨论】:

github.com/ultrasaurus/hocr-javascript 【参考方案1】:

检查this document。我相信它描述了您需要的大部分(或全部)内容。 来自简介:

本文档描述了 OCR 各个方面的表示 以类似 XML 的格式输出。也就是说,我们定义为一组标签 包含文本和其他标签,以及这些标签的属性 标签。但是,由于我们所代表的内容是格式化的 文本,但是,我们实际上并没有为 表示;而是将表示嵌入 XHTML(或 HTML) 因为 XHTML 和 XHTML 处理已经定义了 OCR 的许多方面 否则需要额外的、单独的输出表示 和临时定义。

XML 也可以是converted to HTML using XSLT。其实还有a project which plans to do just that。

另外,this project (hocr-tools) 可能会有所帮助。

最后请注意FAQ of Tesseract 提到了这一点:

使用配置文件 'hocr' tesseract 将产生 xhtml 输出 符合 hocr 规范

【讨论】:

感谢 jcoppen 的回答。事实上,文档和工具并没有提供我正在寻找的东西。他们定义了 hOCR 标准和格式,但没有提及如何将输出呈现为 html 表格。这些工具对某些任务很有用,但同样不能提供生成我需要的输出的工具。再次感谢。 XHTML 不合适?如常见问题解答中所述?此外,在规范中有对 XSL 的引用。 XSLT是一个转换XML的工具,可以用来创建HTML(添加了上面答案的参考)【参考方案2】:

这是一个想法,如何使用一些现有工具将 hocr 文件转换为表格(对于原始问题来说可能为时已晚):

    将 hocr 文件与图像文件一起使用,并使用来自 hocr-tools 存储库的hocr-pdf 创建一个 pdf,参见 https://github.com/tmbdev/hocr-tools#hocr-pdf 使用制表符https://github.com/tabulapdf/tabula从pdf中提取表格数据 将 CSV 数据转换为 HTML 表格(应该有很多工具可以完成此任务)

仅需要第一步,因为 tabula 仅适用于 pdf。第二步是 IMO 从视觉信息中提取表格数据的主要挑战,如果您想了解有关算法方法的一些想法,检查那里的详细信息可能也很有趣。

【讨论】:

以上是关于将 hOCR 转换为 HTML 表格的主要内容,如果未能解决你的问题,请参考以下文章

HOCR 到 HTML 用于可视化

如何将 HTML 表格转换为图像?

将 HTML 表格转换为文本

使用jQuery遍历HTML表格,将表格中的数据转换成JSON

将 HTML 表格的表单输入字段转换为 JSON

将 HTML 表格(作为字符串)转换为 JS 对象数组