
所见即所获,提升你的数据采集效率。
需求
写了那篇《如何用Python批量提取PDF文本内容?》后,我在后台收到了许多留言。
不少读者询问,如果是 PDF 文件中的表格呢?能否正确转换?
我当时没有理解这种需求。因为那篇文章谈的主要是把文本抽取出来,目的主要是进行下一步的自然语言处理。这种 Pdf 文件中大量的内容,都是文字。表格在其中,只占非常小的比例。
《如何用Python批量提取PDF文本内容?》一文提供的工具pdf_extractor
会保留表格里面的数据,但是结构信息基本就被丢弃掉了。
表格转换,属于结构化数据提取。这和我当时文章所谈的主旨不同。所以我没有一一回复。
然而,最近我自己也遇到了这种需求。
我需要从一些论文的表格中,抽取一些数据。尤其是一些对比结果的列表。
在机器学习的论文中,总会有这种对比表格。主要是把目前模型的结果,与基准线或者当前最好的结果进行比对,从而说明论文的价值和意义。我在《文科生用机器学习做论文,该写些什么?》一文里,专门给你谈过这种对比的选择。
例如这样的:

如果在跟踪自然语言处理进展的话,你一眼就能认出,这个表格来自于哪篇论文,对吧?
对,就是大名鼎鼎 BERT 语言模型。
一方面,我们可能需要对论文表格中出现的一些数据进行统计计算。令一方面,我们也需要把部分结果,放在自己的论文里作为对比。而这些,如果都需要我们手动提取数据,然后再输入到程序中或者 Excel 里,会很低效。
我们需要一种简便的方法,帮助自己把 PDF 表格里面的信息,在尽可能保持格式的情况下,正确提取出来。
搜寻
既然有了需求,我就开始搜集信息。我发现,目前支持从 PDF 中抽取表格的应用,其实还真不少。

但是转换的效果,真的是参差不齐。使用的难易程度,也高低不一。有的需要你自己编写脚本,才能完成操作。
其中转换效果较好,使用又方便的,大多是收费的。而且其中有些还着实并不便宜。
几经搜寻对比,我终于找到了一款免费且简便好用的工具。而且经过实际尝试,发现转换效果还不错。
这里,我把它推荐给你。希望能帮你在阅读和写作过程中,提升 PDF 表格数据采集的效率。
安装
它的名字叫做 Tabula ,网站链接在这里。

网站提供了 Windows 和 macOS 版本的下载链接,还有对应的源代码。
我的操作系统是 macOS ,因此这里以 macOS 版本为例。你如果使用 Windows 系统,操作是大同小异的。
请点击对应的链接下载安装。
macOS 系统下载安装文件压缩包,解压之后,会出现这样一个目录。

双击执行其中的 Tabula.app ,你就可以看见浏览器中出现这样的 Web 界面。

下面我们转换一个 PDF 文件试试看。
尝试
这里,我用 BERT 论文中的表格采集为例,给你讲讲 Tabula 的使用方法。
点击上图中的 Browse 按钮,选择硬盘上的 PDF 文件。

然后点击 Import 按钮导入。

导入后的 PDF 文章内容会分页显示出来。

你只需要翻到对应的页面,用鼠标勾选表格区域。

然后点击右上方绿色的 “Preview and Export Extracted Data” 按钮,就可以看到抽取结果了。

然后,点击 Export 按钮,就可以把结果用 CSV 格式导出,并且可以在 Excel 中打开了。

调整
但是,有些复杂表格的提取中,原本不同的列,可能会被错误地放在一起。
例如选择这个表格的时候。

导出的结果就成了这个样子:

这怎么办呢?
其实,处理起来并不算困难。
我们先导出自动转换结果为 CSV ,然后用 Excel 打开。

这里以第一列为例。显然,这里三列数据被挤在了一起。
好在因为这些数据都是用空格分割,因此拆分并不困难。
我们新建两个空列,好容纳新拆出来的数据。

然后选中第一列中需要拆分的数据。

进入 Data 选单,选择 Text to Columns (文本到列)按钮。

第一屏直接继续。

第二屏选择 Space (空格) 作为切分符号。

点击 Finish ,就可以了。

看,是不是已经拆分成功了?
小结
这篇教程读过后,希望你掌握了以下技能:
- 你遇到的功能需求,可能别人早就解决了。因此可以找寻工具来解决,而不必自己重复发明轮子;
- 对于工具的搜寻,需要掌握主动搜索的技巧。这样才能迅速定位候选项。这里给你推荐一篇搜索引擎使用技巧的教程,链接在这里;
- 学会利用 Tabula 从 PDF 格式的文档中自动转换表格为 Excel 可读的 CSV 格式;
- 对于未能正确分列的转换结果,可以使用 Excel 快速进行调整。
祝学习进步!
延伸阅读
你可能也会对以下话题感兴趣。点击链接就可以查看。
喜欢请点赞和打赏。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)。
如果你对 Python 与数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。
网友评论