【问题标题】:Algorithms to Extract Text From a PDF (re-flowing text layout from a jumble of words)从 PDF 中提取文本的算法(从混乱的单词中重新排列文本布局)
【发布时间】:2015-02-17 10:00:35
【问题描述】:

PDF 由许多单独的文本对象组成,其中包含一个 X 和 Y 坐标以及一个字符串。通常,这些对象是按照它们在文档中出现的顺序放置的,因此提取文档文本就像按照它们在 PDF 流中出现的顺序读取文本对象一样简单。

但是,许多 PDF 的播放效果并不好。

PDF 规范不要求在 PDF 流中以任何方式对文本进行排序。 PDF 的结尾在流的开头、中间在结尾、开头在中间的情况并不少见。在极端情况下,流是一堆乱七八糟的文本框。

存在哪些算法来确定 PDF 流中对象的正确文本流?

对于简单的文档,对文本进行排序并不难:您从上到下、从左到右对对象进行排序,然后从最左上角的文本框中提取文本,然后逐个向下进行。但是,文档通常有多个列、标题、副标题、页眉、页脚、选项卡式段落等。是否有任何解决方案在许多不同的情况下都非常可靠?

为清楚起见,下面是我尝试实现的函数原型的示例。

def sort_according_to_text_flow(objs, page_width, page_height):
   # objs               A list of objects where each object is a dict containing:
   #     x, y           The top-left corner position of the text box
   #     width, height  The width and height of the text box
   #     text           A string of the text
   # page_width/height  Width/height of the page
   # returns the list of objects, ordered for natural reading

暂时假设我们只处理从左到右的语言。

【问题讨论】:

  • 我认为仅靠代码无法区分顶部的 2 列和底部的 2 列与相同的 2 列,垂直阅读但被宽标题或表格打断。

标签: algorithm pdf image-segmentation text-extraction


【解决方案1】:

这个问题似乎是相当多研究的主题,通常称为“自上而下的文档布局分析”。一个research paper summarizes 不少不同的算法:

典型的自上而下的方法是将文档图像划分为 使用水平和垂直投影轮廓的较小区域。 X-Y Cut 算法 [13],开始将文档图像划分为 剖面基于其投影剖面中的山谷(见图 7)。 该算法通过交替重复对文档进行分区 将当前分割的区域投影到水平方向 和垂直轴。分裂停止,当一个特定的 满足决定区域原子性的标准。投影 基于配置文件的技术对偏斜非常敏感 文档。少量的歪斜可以完全改变 投影,导致没有清晰的山谷。因此,极度的照顾 在扫描文档或可靠的歪斜校正时拍摄 算法必须在分割过程之前应用。

已为具有以下内容的文档设计了有效且准确的方法 白色背景和区域的曼哈顿(矩形)布局, 基于覆盖背景的几何方法。例子 包括 Baird 等人的形状导向覆盖算法。 [17] 和 Pavlidis 和 Zhou [20] 基于白色流的分割。这些 是将文档图像划分为较小的自上而下的方法 基于背景结构的区域。主要想法是 检测一组不包含任何最大矩形 前景像素。这些矩形将文档图像划分为 可能包含文本、图像或图形的区域。一个地区 分类算法可以应用到他们之前进一步 加工。上面提到的算法非常复杂 由于中间结果的表示和许多 需要处理的特殊情况。空白覆盖算法 Breuel [19] 是同一想法的有效变体,使用 几何原理。该算法更简单,因为缺少 特殊情况,在此类文档中表现非常出色。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2014-12-30
    相关资源
    最近更新 更多