之前我们介绍了从PDF文件中提取文本内容以及从PDF文件提取图片的方法,除了文本内容与图片,表格也PDF文件中常见的内容,提取表格内容时,我们不再使用PyPDF2库来实现操作,Python有多个库来实现提取表格内容,本文我们将分别介绍多个库提取PDF中表格的操作。
pdfplumber
pdfplumber是读取PDF文件文本和表格提取的第三方库中,功能最均衡的一个,它主要有以下优点:
- 每页单独对象,支持文本、表格数据的抽取(亮点)
- 文本抽取:保留了文本的格式,比如换行位置有空格,可以通过这个特点将一段的文本整合
- 表格数据抽取:不会被换行数据所干扰
但是,它也不是完美的,缺点如下:
- 进行文本抽取时,如果一页有文本和表格,那么抽取的文本数据也会包括表格数据
- 对于有合并单元格的表格,无法还原表格结构
- 表格数据不能100%保证和原数据一致,可能缺少几个字,可能识别出错等
- 对于无边框的表格,处理效果很差
- 流程图和时序图会对处理产生严重影响
使用示例:
代码语言:python代码运行次数:0复制import pdfplumber
file = 'files/test.pdf'
wookroot = pdfplumber.open(file)
pages = wookroot.pages
for page in pages:
text = page.extract_text()
tables = page.extract_tables()
print(text)
print(tables)
break
wookroot.close()
tablua
tabula-py是专门用于提取PDF表格数据的第三方库,它具有以下优点:
- 抽取出来表格数据可以反向推导出表格的结构(亮点)
- 不会被换行数据干扰
- 可以指定页读取
同样地,这个库也有固有的缺点:
- 无法保证表格数据100%准确
- 对于无边界表格支持不好,丢失数据
代码如下:
代码语言:txt复制import tabula
def extract_tables_from_pdf(pdf_path):
tables = tabula.read_pdf(pdf_path, pages='all')
return tables
# 使用示例
pdf_path = 'files/test.pdf' # 替换为实际的PDF文件路径
extracted_tables = extract_tables_from_pdf(pdf_path)
# 输出提取的表格
for i, table in enumerate(extracted_tables, start=1):
print(f"Table {i}:")
print(table)
print()
-------------------------------
输出结果如下:
Table 1:
队名 队长 球场
0 拜仁慕尼黑 托马斯穆勒 安联球场
1 多特蒙德 罗伊斯 威斯特法伦球场
注:使用tabula时,我们安装的库为tabula-py
,导入时为tabula
。
总结
本文主要介绍了Python提取PDF表格内容的方法,如果我们只提取表格内容的话,使用tabula-py会更为理想一些。