使用 Camelot 从此 PDF 中提取数据时未找到表格并合并列文本
No tables found and merged column text when extracting data from this PDF using Camelot
当我尝试从附加的 PDF 中提取表格时,我得到了 UserWarning: No tables found on page-1
。但是,当我查看提取的数据时,一些列文本已合并为一个列。”
我正在使用 Camelot 解析这些 PDF
重现步骤:camelot --output m27.csv --format csv stream m27.pdf
这是我要解析的 link PDF:https://github.com/tabulapdf/tabula-java/blob/master/src/test/resources/technology/tabula/m27.pdf
PDF 仅包含将字符放置在二维平面上的 x,y 坐标处的说明,不保留单词、句子或 tables 的知识。
Camelot 在后台使用 PDFMiner 将字符分组为单词,再将单词分组为句子。有时当字符太靠近时,PDFMiner 可以将属于不同单词的字符组合成一个。
由于您的 PDF table 中的字符非常靠近,它们被合并为一个单词,因此 Camelot 无法正确检测到列。在这种情况下,您可以指定列分隔符以获得 table。要获取列分隔符的 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)
当我尝试从附加的 PDF 中提取表格时,我得到了 UserWarning: No tables found on page-1
。但是,当我查看提取的数据时,一些列文本已合并为一个列。”
我正在使用 Camelot 解析这些 PDF
重现步骤:camelot --output m27.csv --format csv stream m27.pdf
这是我要解析的 link PDF:https://github.com/tabulapdf/tabula-java/blob/master/src/test/resources/technology/tabula/m27.pdf
PDF 仅包含将字符放置在二维平面上的 x,y 坐标处的说明,不保留单词、句子或 tables 的知识。
Camelot 在后台使用 PDFMiner 将字符分组为单词,再将单词分组为句子。有时当字符太靠近时,PDFMiner 可以将属于不同单词的字符组合成一个。
由于您的 PDF table 中的字符非常靠近,它们被合并为一个单词,因此 Camelot 无法正确检测到列。在这种情况下,您可以指定列分隔符以获得 table。要获取列分隔符的 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)