使用Camelot从此PDF中提取数据时,找不到表和合并的列文本

时间:2018-11-09 18:39:46

标签: python pdf-parsing python-camelot

当我尝试从所附的PDF中提取表格时,我得到了UserWarning: No tables found on page-1。但是,当我查看提取的数据时,某些列文本被合并为一个列。”

enter image description here

我正在使用Camelot来解析这些PDF

复制步骤:camelot --output m27.csv --format csv stream m27.pdf

这是我尝试解析的PDF链接:https://github.com/tabulapdf/tabula-java/blob/master/src/test/resources/technology/tabula/m27.pdf

1 个答案:

答案 0 :(得分:2)

PDF仅包含将字符放置在二维平面上的x,y坐标上的说明,而对单词,句子或表格一无所知。

Camelot在幕后使用PDFMiner将字符分为单词和单词组成句子。有时,当字符太近时,PDFMiner可以将属于不同单词的字符分组为一个单词。

由于PDF表格中的字符非常靠近,它们被合并为一个单词,因此Camelot无法正确检测列。在这种情况下,您可以指定列分隔符来获取表。要获取列分隔符的x坐标,可以检出visual debugging guide。另外,您可以指定split_text=True沿指定的列分隔符剪切单词。这是代码(通过使用$ camelot stream -plot text m27.pdf在PDF中创建文本的matplotlib图获得了x坐标):

使用CLI:

$ camelot --output m27.csv --format csv -split stream -C 72,95,209,327,442,529,566,606,683 m27.pdf

使用API​​:

>>> import camelot
>>> tables = camelot.read_pdf('m27.pdf', flavor='stream', columns=['72,95,209,327,442,529,566,606,683'], split_text=True)