从 PDF 文件中提取 table 结构化文本
Extracting table structured text from PDF-file
我正在将 PDF 文件中的信息提取到字符串中。当遇到 pdf 中结构为 tables 的文本时,提取的文本然后被分为 reader 跨越行的方式,而不是 table 行中的逐个单元格。
阅读并搜索了几个小时后,我想获得一些提示,了解我应该如何解决这个问题,以按照下面所示的方式构建字符串?
当前字符串:
Difenylmetandiisocyanat 9016-87-9 Acute Tox. 4; H332 >= 10 - < 20
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
4,4'-metylendifenyldiisocyanat 101-68-8 Acute Tox. 4; H332 >= 10 - < 20
202-966-0 Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
所需结构:
Difenylmetandiisocyanat
9016-87-9
Acute Tox. 4; H332
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
>= 10 - < 20
4,4'-metylendifenyldiisocyanat
101-68-8
202-966-0
Acute Tox. 4; H332
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
>= 10 - < 20
在你的评论中你说 "There are no tags in the file"。但是,当我检查文件时,我清楚地看到了结构树:
当 PDF 被标记后,您可以轻松地将其转换为 XML:
TaggedPdfReaderTool convertor = new TaggedPdfReaderTool();
convertor.convertToXml(
new PdfReader("resources/pdfs/sds_w_sv_3.pdf"),
new FileOutputStream("results/sds_w_sv_3.xml"));
这是生成的 XML 文件的片段:
<Table>
<TR>
<TH>
<Span></Span>
<P>
Beståndsdelar
</P>
</TH>
<TH>
<Span></Span>
<P>
CAS
-
nr.
</P>
</TH>
<TH>
<Span></Span>
<P>
Kontrollparametrar
</P>
</TH>
<TH>
<Span></Span>
<P>
Grundval
</P>
</TH>
此 XML 是一个 HTML-like 结构,允许您将 table 提取为 table。但是,PDF 的标记方式肯定有问题,因为并非 PDF 中所有可见的信息都呈现为 XML.
当您点击其中一个第一个标签时,您会看到这个:
结构树中第一个<P>
(段落)的内容是第40页的AVSNITT 1。前39页的标签怎么了?这是一个错误的 PDF 文件。它说它已被标记,但乍一看它没有正确标记。您应该要求制作此文件的人正确标记它。如果没有合适的标签,您将很难以编程方式找到 table-like 结构。
我正在将 PDF 文件中的信息提取到字符串中。当遇到 pdf 中结构为 tables 的文本时,提取的文本然后被分为 reader 跨越行的方式,而不是 table 行中的逐个单元格。
阅读并搜索了几个小时后,我想获得一些提示,了解我应该如何解决这个问题,以按照下面所示的方式构建字符串?
当前字符串:
Difenylmetandiisocyanat 9016-87-9 Acute Tox. 4; H332 >= 10 - < 20
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
4,4'-metylendifenyldiisocyanat 101-68-8 Acute Tox. 4; H332 >= 10 - < 20
202-966-0 Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
所需结构:
Difenylmetandiisocyanat
9016-87-9
Acute Tox. 4; H332
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
>= 10 - < 20
4,4'-metylendifenyldiisocyanat
101-68-8
202-966-0
Acute Tox. 4; H332
Skin Irrit. 2; H315
Eye Irrit. 2; H319
Resp. Sens. 1; H334
Skin Sens. 1; H317
Carc. 2; H351
STOT SE 3; H335
STOT RE 2; H373
>= 10 - < 20
在你的评论中你说 "There are no tags in the file"。但是,当我检查文件时,我清楚地看到了结构树:
当 PDF 被标记后,您可以轻松地将其转换为 XML:
TaggedPdfReaderTool convertor = new TaggedPdfReaderTool();
convertor.convertToXml(
new PdfReader("resources/pdfs/sds_w_sv_3.pdf"),
new FileOutputStream("results/sds_w_sv_3.xml"));
这是生成的 XML 文件的片段:
<Table>
<TR>
<TH>
<Span></Span>
<P>
Beståndsdelar
</P>
</TH>
<TH>
<Span></Span>
<P>
CAS
-
nr.
</P>
</TH>
<TH>
<Span></Span>
<P>
Kontrollparametrar
</P>
</TH>
<TH>
<Span></Span>
<P>
Grundval
</P>
</TH>
此 XML 是一个 HTML-like 结构,允许您将 table 提取为 table。但是,PDF 的标记方式肯定有问题,因为并非 PDF 中所有可见的信息都呈现为 XML.
当您点击其中一个第一个标签时,您会看到这个:
结构树中第一个<P>
(段落)的内容是第40页的AVSNITT 1。前39页的标签怎么了?这是一个错误的 PDF 文件。它说它已被标记,但乍一看它没有正确标记。您应该要求制作此文件的人正确标记它。如果没有合适的标签,您将很难以编程方式找到 table-like 结构。