Camelot:pdf抽取表格数据的Python库
PDF诞生自Camelot项目。目的是创建一个通用的文档交流格式,以支持多种机器平台,操作系统和通信网络。其目标是使文档能够在任何显示器上可视,在任何现代打印机上可打印。
PDF基于PostScript(一种页面描述语言)。该语言解决了在任意地方显示和打印的问题。PDF包含了文档“在任意地方可视和打印”所需的组件。比如,字符、字体、图表、图片等。
一个PDF文档包含许多放置文字(或其他组件)的指令。这些指令使用以页面左下角为原点的x、y坐标放置页面元素。一个单词通过将几个字符紧凑的放置在一起来模拟。
同样的,空白通过使字符间隔更大来模拟。那怎样模拟一个表格呢?你猜对了-- 通过把字符摆放得跟一个电子表格一样来模拟。
PDF中没有一个内部的表示方式来表示一个表格。这使得表格数据很难被抽取出来做分析。不幸的是很多开放的数据是存储在pdf格式的文件中的。
但是PDF格式在设计上并没有很好的支持表格数据。
Camelot: 一个友好的PDF表格数据抽取工具
安装 Camelot
$ pip install camelot-py
使用Camelot
import camelot
tables = camelot.read_pdf("source/names.pdf")
tables.export("source/names.csv")
为什么使用Camelot
- Camelot允许你通过调整设置项来精确控制数据的提取过程
- 可以根据空白和精度指标来判断坏的表格,并丢弃,而不必手动检查
- 每一个表格数据是一个panda的dataframe,从而可以很方便的集成到ETL和数据分析工作流中
- 可以把数据导出为各种不同的格式比如 CSV、JSON、EXCEL、HTML
为什么不是其他的PDF表格数提取库?
Camelot为数据抽取过程提供全部的控制权
许多人使用开源的库或者商业库来做数据提取工作。但是这些库要么很完美的提取出数据,要么完全失败。而不是介于这两者之间。
但是现实世界并不总是这么界限分明,包括PDF提取数据。而这导致了我们需要为每一个PDF定制专门的脚本。
我们创建了Camelot库对提取数据的过程提供了完全的控制权。假如你用默认方式无法获取数据,你可以通过调整参数来适配。
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!