PDF(可移植文档格式)文件是由Adobe创建的一种机动的文件格式,它答应文档在不同的软件、硬件和操作系统中一致地显示。每个PDF文件都包罗对固定布局文档的全面形貌,包括文本、字体、图形和其他必要的显示元素。pdf通常用于文档共享,因为它们能够保持原始格式。然而,以编程方式剖析和解释PDF内容可能是一项挑衅。这些困难包括pdf的复杂结构、不同的文本编码、复杂的布局、压缩的内容和嵌入的字体等题目。
我们最近评估了几个流行的Python PDF库,如PyPDF/PyPDF2, PDFMiner.six, PyMuPDF, PDFplumber2,等。有些库得当提取文本,有些得当提取图像,有些速率很快,等等。在本文中,我们将重点先容如何开始使用PDFMiner.six。最新信息请随时关注官方网站。
环境准备
安装依赖包:
- pip install pdfminer.six
- pip install 'pdfminer.six[image]'
复制代码 示例PDF文件可以在这里找到,当然你也可以自己准备。让我们看看如何使用这些api:
- 从PDF中提取文本
- 从PDF中提取图像
- 迭代PDF中的全部对象
- 从PDF中提取TableOfContent (ToC)
抽取文本
通过高级API可用于从PDF中提取文本。
- from pdfminer.high_level import extract_text
- from os import path
- path = path.abspath(path.dirname(__file__))
- print(path)
- pdf_file = path + '/sample01.pdf'
- text = extract_text(pdf_file)
- print(text)
复制代码 抽取每一页
- from io import StringIO
- from pdfminer.converter import TextConverter
- from pdfminer.layout import LAParams
- from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
- from pdfminer.pdfpage import PDFPage
- from pdfminer.utils import open_filename
- from os import path
- path = path.abspath(path.dirname(__file__))
- print(path)
- def iter_text_per_page(pdf_file, password='', page_numbers=None, maxpages=0,
- caching=True, codec='utf-8', laparams=None):
- if laparams is None:
- laparams = LAParams()
- with open_filename(pdf_file, "rb") as fp:
- rsrcmgr = PDFResourceManager(caching=caching)
- idx = 1
- for page in PDFPage.get_pages(
- fp,
- page_numbers,
- maxpages=maxpages,
- password=password,
- caching=caching,
- ):
- with StringIO() as output_string:
- device = TextConverter(rsrcmgr, output_string, codec=codec,
- laparams=laparams)
- interpreter = PDFPageInterpreter(rsrcmgr, device)
- interpreter.process_page(page)
- yield idx, output_string.getvalue()
- idx += 1
- def main():
- pdf_file = path + '/sample02.pdf'
- for count, page_text in iter_text_per_page(pdf_file):
- print(f'page# {count}:\n{page_text}')
- print()
- if __name__ == "__main__":
- main()
复制代码 输出内容截取如下:
- page# 1:
- 产品主要功能包括数据采集、数据治理以及数据产品应用。企业典型应用场景利用 AI 算法实现业务分类、聚类、回归预测以及时间序列预测等。在销售领域基于历史数据实现销售预测,基于用户特征数据对客户分类实现精准营销;在采购领域利用历史数据预测采购价格,基于多维度指标实现供应商综合评价模型等。
- page# 2:
- 各类政策法规进行整理和归纳,帮助用户更加方便快捷地获取所需的政策信息。。。。
复制代码 抽取图像
提取图像的最简朴方法是调用命令行工具pdf2txt.py。它是在安装PDFMiner时安装的,并且位于Python可执行文件的相同位置。使用的操作系统。可执行文件’查找Python二进制文件的位置。
下面是示例用法:
- usage: pdf2txt.py [-h] [--version] [--debug] [--disable-caching] [--page-numbers PAGE_NUMBERS [PAGE_NUMBERS ...]]
- [--pagenos PAGENOS] [--maxpages MAXPAGES] [--password PASSWORD] [--rotation ROTATION] [--no-laparams]
- [--detect-vertical] [--line-overlap LINE_OVERLAP] [--char-margin CHAR_MARGIN] [--word-margin WORD_MARGIN]
- [--line-margin LINE_MARGIN] [--boxes-flow BOXES_FLOW] [--all-texts] [--outfile OUTFILE]
- [--output_type OUTPUT_TYPE] [--codec CODEC] [--output-dir OUTPUT_DIR] [--layoutmode LAYOUTMODE]
- [--scale SCALE] [--strip-control]
- files [files ...]
- To extract all text from pdf:
- pdf2txt.py --all-texts ../samples/manual.pdf
- To extract all images from pdf:
- pdf2txt.py --output-dir images ../sample03.pdf
复制代码 如果希望将其集成到应用程序中,只需从pdf2txt.py复制源代码即可.
获取页数
- from pdfminer.pdfdocument import PDFDocument
- from pdfminer.pdfparser import PDFParser
- from pdfminer.pdftypes import resolve1
- pdf_file = '../samples/brocher1.pdf'
- with open(pdf_file, 'rb') as f:
- parser = PDFParser(f)
- doc = PDFDocument(parser)
- parser.set_document(doc)
- pages = resolve1(doc.catalog['Pages'])
- pages_count = pages.get('Count', 0)
- print(pages_count)
复制代码 抽取表格数据
pdfminer抽取表格的输出看起来比PyPDF2好得多,我们可以很容易地使用regex或split()提取所需的数据。但是在现实天下中,PDF文档包罗很多噪声,id可以是不同的格式等等。我无法想象一个算法会考虑全部的事情。为了简化和加速我们的工作,我建议将PDF文件转换为HTML格式:
- from io import StringIO
- from pdfminer.high_level import extract_text_to_fp
- from pdfminer.layout import LAParams
- output = StringIO()
- with open('example.pdf', 'rb') as pdf_file:
- extract_text_to_fp(pdf_file, output, laparams=LAParams(), output_type='html', codec=None)
- with open('example.html', 'a') as html_file:
- html_file.write(output.getvalue())
复制代码 然后再利用html标签处理库抽取文本,这种方法正确率应该能得到保障。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |