gpt4 book ai didi

java - 使用 PDFBox 解析 PDF 文件(尤其是表格)

转载 作者:IT老高 更新时间:2023-10-28 13:53:17 69 4
gpt4 key购买 nike

我需要解析一个包含表格数据的 PDF 文件。我正在使用 PDFBox提取文件文本以稍后解析结果(字符串)。问题是文本提取不像我对表格数据的预期那样工作。例如,我有一个文件,其中包含这样的表(7 列:前两列始终有数据,只有一个复杂性列有数据,只有一个财务列有数据):

+----------------------------------------------------------------+
| AIH | Value | Complexity | Financing |
| | | Medium | High | Not applicable | MAC/Other | FAE |
+----------------------------------------------------------------+
| xyz | 12.43 | 12.34 | | | 12.34 | |
+----------------------------------------------------------------+
| abc | 1.56 | | 1.56 | | | 1.56|
+----------------------------------------------------------------+

然后我使用 PDFBox:

PDDocument document = PDDocument.load(pathToFile);
PDFTextStripper s = new PDFTextStripper();
String content = s.getText(document);

这两行数据会这样提取:

xyz 12.43 12.4312.43
abc 1.56 1.561.56

最后两个数字之间没有空格,但这不是最大的问题。问题是我不知道最后两个数字是什么意思:中、高、不适用? MAC/其他,FAE?我没有数字和它们的列之间的关系。

我不需要使用 PDFBox 库,所以使用另一个库的解决方案就可以了。我想要的是能够解析文件并知道每个解析的数字意味着什么。

最佳答案

您需要设计一种算法来提取可用格式的数据。无论您使用哪个 PDF 库,都需要这样做。字符和图形是通过一系列有状态的绘制操作来绘制的,即移动到屏幕上的这个位置并绘制字符'c'的字形。

我建议你扩展 org.apache.pdfbox.pdfviewer.PDFPageDrawer 并覆盖 strokePath 方法。从那里您可以截取水平和垂直线段的绘图操作,并使用该信息来确定表格的列和行位置。然后设置文本区域并确定在哪个区域中绘制哪些数字/字母/字符是一件简单的事情。由于您知道区域的布局,因此您将能够判断提取的文本属于哪一列。

此外,在视觉上分隔的文本之间可能没有空格的原因是,PDF 经常不绘制空格字符。而是更新文本矩阵并发出“移动”的绘图命令以绘制下一个字符以及与最后一个字符分开的“空间宽度”。

祝你好运。

关于java - 使用 PDFBox 解析 PDF 文件(尤其是表格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3203790/

69 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com