【发布时间】: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