首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDF提取中缺少表格布局信息

PDF提取中缺少表格布局信息
EN

Stack Overflow用户
提问于 2019-09-11 17:38:38
回答 1查看 243关注 0票数 1

我已经研究了从pdf中提取文本/数据,并使用了其他一些堆栈溢出答案来帮助我,我设置的是Tika通过一个自定义的ContentHandlerDecorator解析pdf,它使用sax事件来解析内容。我遇到了一个问题,当在pdf查看器中查看pdf时,它包含一个按行和列排列的数据表,但这些信息似乎不是从PDF中开始提取的,或者是我不知道如何使用tika / sax找到它。

这是我所看到的一个例子:

一个类似于上面的表给了我这个(当我只想串Sax事件的时候)

代码语言:javascript
复制
START http://www.w3.org/1999/xhtml, div, , div, class = page; 
START http://www.w3.org/1999/xhtml, p, , p, 
END http://www.w3.org/1999/xhtml, p, , p
WHITESPACE[
], 0, 1

START http://www.w3.org/1999/xhtml, p, , p, 
CHARS [I, n, f], 0, 3
WHITESPACE[
], 0, 1
CHARS [o], 0, 1
WHITESPACE[
], 0, 1
END http://www.w3.org/1999/xhtml, p, , p

START http://www.w3.org/1999/xhtml, p, , p, 
CHARS [I, n, f, o], 0, 4
CHARS [ ], 0, 1
CHARS [H, 1], 0, 2
CHARS [ ], 0, 1
CHARS [H, 2], 0, 2
CHARS [ ], 0, 1
CHARS [H, 3], 0, 2
CHARS [ ], 0, 1
CHARS [H, 4], 0, 2
WHITESPACE[
], 0, 1
END http://www.w3.org/1999/xhtml, p, , p

// Start of Second Row
START http://www.w3.org/1999/xhtml, p, , p, 
CHARS [1], 0, 1
CHARS [I, n, f, 1], 0, 4
WHITESPACE[
], 0, 1
CHARS [I, n, f, 2], 0, 4
WHITESPACE[
], 0, 1
END http://www.w3.org/1999/xhtml, p, , p

START http://www.w3.org/1999/xhtml, p, , p, 
CHARS [I, n, f, 3], 0, 4
WHITESPACE[
], 0, 1
END http://www.w3.org/1999/xhtml, p, , p

START http://www.w3.org/1999/xhtml, p, , p, 
CHARS [D, 1], 0, 2
CHARS [ ], 0, 1 
CHARS [D, 4], 0, 2
END http://www.w3.org/1999/xhtml, p, , p

由于段落的结尾看起来是随机的,没有指示何时开始新的行,在第二行的情况下,空列的数据不知何故没有间隙,尽管它在查看器中像那样显示。

很抱歉我不能提供pdf,但我正在寻找任何关于这些额外的格式化/布局数据存储在哪里或可以提取的信息,因为我从Tika得到的信息显然是缺失的。所有段落中都没有任何定语。

如果它有帮助,我知道PDF是使用iText生成的,因为我可以在元数据中看到这一点,但当试用iText时,它似乎没有提供一种以编程方式打开和解析pdf的方法,而不提供某种预先制作的提取模板,这是我不想做的。

EN

回答 1

Stack Overflow用户

发布于 2019-09-11 22:12:20

这些SAX信息对于获取您想要的信息几乎毫无用处。IIRC,iText有一个文本提取应用程序接口,您需要它提供的位置信息,以便确定给定的文本位于哪一列。

看看iText的SimpleTextExtractionStrategy。您需要构建一些类似的东西来关注eventOccurred(),查找EventType.RENDER_TEXT。当您获得一个文本呈现事件时,您需要查看转换为TextRenderInfoIEventData参数,并找出它在页面(和表中)的位置,以及它是否在表中,等等。

根据位置信息,您必须推断出每段文本来自哪一列。不要依赖于按逻辑顺序出现的信息。不要在单个呈现事件中依赖于单元格的文本。

注意:我对pdfbox、sax或apache-tika几乎一无所知,因此可能有一种不那么“自己”的方法来完成这项工作。例如,您可以调整Tika的输出,以提供定位信息(绝对或相对)。这些信息可能来自非常类似于SimpleTextExtractionStrategy的东西。

祝你打猎愉快。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57886268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档