分析PDF文档中的表

2024-10-01 15:33:40 发布

您现在位置:Python中文网/ 问答频道 /正文

此链接(http://www.lenovo.com/psref/pdf/psref450.pdf)中的PDF包含许多类似的表:

enter image description here

我想从这些表中以编程方式提取数据和结构。在

我尝试过的事情:使用

  1. Tika:不幸的是,这些表被转换成空格分隔的 段落-一些字符串包含空格,因此 不可能把它们分开。在
  2. Python的PDFMiner:由于缺少字体,返回了断言错误。我怀疑HTML可能与 蒂卡,不过我需要解决丢失字体的问题 确认一下。在
  3. 在线工具:我尝试了http://www.zamzar.com/和其他一些工具。文件太大,无法处理(对于联机 或者它产生了错误。在

我计划把PDF转换成HTML,然后用beauthoulsoup解析它。在

输出可以是JSON(例如每个表一个对象)、XML,或者几乎任何维护结构的格式。在


Tags: 工具comhttppdf链接htmlwww错误
3条回答

仅供参考,因为我的工具不是公开的:它确实是可能的。这是一张纯文本表格,中间的空格是制表符,而不是空格:

2469-2TU    i5-3320M    4GBx1   14.0" HD    720p    500G 7200   Intel 620528    WWAN upg    Express 54  Finger  BT  6   Win7 Pro64  10/12
✂ 2469-2SU  i5-3210M    4GBx1   14.0" HD    720p    500G 7200   Intel 2200  WWAN upg    Express 54  None    None    6   Win7 Pro64  10/12
✂ 2469-2RU  i3-3110M    4GBx1   14.0" HD    720p    320G 7200   Intel 2200  WWAN upg    Express 54  None    None    6   Win7 Pro64  10/12
2469-32U    i5-3230M    4GBx1   14.0" HD    720p    320G 7200   Intel 6205  WWAN upg    None    Finger  BT  6   Win7 Pro64  02/13
2469-2ZU    i5-3230M    4GBx1   14.0" HD    720p    320G 7200   Intel 2200  WWAN upg    None    None    None    6   Win7 Pro64  02/13
2469-2YU    i5-3320M    4GBx1   14.0" HD    720p    320G 7200   Intel 6205  WWAN upg    None    Finger  BT  6   Win7 Pro64  02/13
2469-2XU    i5-3320M    4GBx1   14.0" HD    720p    320G 7200   Intel 6205  WWAN upg    None    None    None    6   Win7 Pro64  02/13
2469-2WU    i5-3320M    4GBx1   14.0" HD    720p    320G 7200   WLAN upg    WWAN upg    None    Finger  BT  6   Win7 Pro64  02/13

当我的第二个空格被写在一起的时候,我可以用一个比我想象的要大的空格来插入。在

我甚至在Zapf Dingbats里找到了小剪刀:)

@alex woolford:总的来说,完美的数据提取(无论是否有你在PDF中看到的格式)并不总是可能的,尽管它在某种程度上不到100%。我之所以这么说,是因为我之前曾参与过一个与你类似的项目。我遇到了类似的问题,网络上的一些研究表明,一般来说,PDF不是一种完全可逆的格式,也就是说,从PDF中恢复文本和格式的准确率并不总是100%。有时,在提取过程中(使用一些库),字符甚至会丢失或被转置等等。这似乎是由于PDF格式和规范的本质。它不是基于文本的格式。它是PostScript的派生,在数据布局方面有一些奇怪的规则。这是根据官方的PDF文档,或者是根据产品公司的网站,这些公司长期使用PDF,并且他们的产品是众所周知的。在

如果不太完美的精确度是可以容忍的,那么有一些产品是可用的(我想我还不知道Python的任何产品,目前为止)。一个是xpdf,另一个是PDFTextStream。我用的是前者,不是后者。xpdf是一个C库,也有命令行工具。PDFTextStream是一个Java工具/库。这是一个付费产品,但我最后检查,它现在是免费的单线程应用程序,IIRC。在

尽管xpdf用于C,PDFTextStream用于Java,但是您可以通过XML-RPC或其他一些分布式计算/跨语言通信方法(如套接字)从Python调用它们。当然,这需要一些工作。在

好吧。在

你可以试试PDFBox。相关文档如下:

https://pdfbox.apache.org/1.8/cookbook/textextraction.html

延伸org.apache.pdfbox.pdfviewer.PDFPageDrawer重写strokePath方法。从那里可以截取水平和垂直线段的绘制操作,并使用该信息确定列和行的位置。可以设置文本区域以确定在哪个区域中绘制哪些数字/字母/字符。因为你可以使用简单的表格和表格的算法来定义表格中的行和列。在

相关问题 更多 >

    热门问题