python抽取pdf中内容

这两天一直在windows上做用python(版本是3.6)抽取pdf中内容的东西,主要就是从pdf中提取出里面的字体和表格内容。尝试了好些个库,现在算是找到比较符合我需求(比较好用)的pdf解析的了。在这个过程中,用了以下几个库:

  1. PDFminer

    1. PDFminer算是一个还算不错的吧,安装直接用pip安装就行。如下:

      pip install pdfminer3k

      它这个对pdf中内容做了好些个对象,用这些对象来存储不同的信息,比如表格有LTFigure对象存储、文本有LTTextBoxHorizontal对象来存储。对于文本的提取,基本上都是通过画框提取的,所以提取出的text都是一行一行返回的。这样的后果就是说不清明明是一句话,却被分成两行或三行显示。比如我现在做的,对行、句子比较敏感,不能将所有的行连在一起,所以在提取出结果后,还需要对结果进行处理,以达到我们的目的。

    2. 看它说明应该是可以提取出里面表格的,但无论在哪也没找到他这个表格要怎么操作,怎么把里面内容拿出来,所以就没有用它,转而去寻找其它的工具。

  2. tabula

    1. 在网上看大伙对这个都还挺推崇的,是专门用来提取pdf中表格的一个工具库。安装的话,也是直接使用pip即可,如下:

      pip install tabula-py

      因为它是依赖于java的,所以要是电脑上没有java环境的话,需要配置一下,将java的所在的安装目录加到环境变量PATH中。

    2. 但是,怎么说呢,不知道我使用的有问题还是怎么样,表格中几个格合并成的单元格读取的时候,会出问题。

  3. pdfplumber

    1. 这个是我现在用的,个人觉得还是比较好用的。对于pdf中文本的抽取,原理还有效果跟PDFminer差不多。对于某一页中文本读取的话,直接调用pdfplumber.extract_text()就可以了。对于表格的话,也是直接调用extract_tables()就可以找到该页中所有的表格中的内容,并且可以直接转换成padas中DataFrame的形式,就我现在测试的来看,结果基本没有差错。表格提取中也可以自己设置一些参数什么的,比如设置表格的分割线是什么类型什么的,很是方便。表格提取的问题跟文本的相似,要是一个表格在两页或更多页的话,他会把这一个表格读成多个,所以需要我们在得到结果后,在对结果处理,把表格连接起来。

    2. 安装的话,相比起来稍微麻烦点,需要先安装两个软件:ImageMagic和Ghstscript。

      1. ImageMagic可以从下载链接下载,16位的更精确些,但消耗的计算机资源也相对大一些,8位的差一些,可以自己选择,但是一定要下载的是6.X的版本。

      2. Ghostscript可以从下载链接下载,无论自己电脑是32还是64位的,都下载安装32位的

      3. 上面两个安装结束后,就可以直接通过pip安装pdfplumber了。

        pip install pdfplumber

         

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是使用 pdfminer 抽取文文本的 Python 代码示例: ```python from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from io import StringIO def extract_text_from_pdf(pdf_path): resource_manager = PDFResourceManager() fake_file_handle = StringIO() converter = TextConverter(resource_manager, fake_file_handle, codec='utf-8', laparams=LAParams()) page_interpreter = PDFPageInterpreter(resource_manager, converter) with open(pdf_path, 'rb') as fh: for page in PDFPage.get_pages(fh, caching=True, check_extractable=True): page_interpreter.process_page(page) text = fake_file_handle.getvalue() # close open handles converter.close() fake_file_handle.close() if text: return text pdf_text = extract_text_from_pdf('example.pdf') print(pdf_text) ``` 在这个代码,需要替换 pdf_path 为你要提取文本的 pdf 文件的路径。 ### 回答2: 要使用pdfminer库来抽取文文本,可以按照以下步骤使用Python代码: 首先,确保已经安装了pdfminer库。可以使用以下命令在终端或命令提示符安装: ``` pip install pdfminer.six ``` 安装完毕后,可以使用以下代码来抽取文文本: ```python from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage def extract_chinese_text_from_pdf(file_path): # 创建一个PDF资源管理器对象 resource_manager = PDFResourceManager() result = StringIO() codec = 'utf-8' laparams = LAParams(line_margin=0.1) # 创建一个PDF设备对象 device = TextConverter(resource_manager, result, codec=codec, laparams=laparams) # 创建一个PDF解释器对象 interpreter = PDFPageInterpreter(resource_manager, device) # 打开PDF文件 with open(file_path, 'rb') as file: # 对PDF文件的每一页进行解析 for page in PDFPage.get_pages(file): interpreter.process_page(page) # 获取提取的文本内容 text = result.getvalue() # 关闭设备和资源管理器 device.close() result.close() return text # 调用函数并传入PDF文件路径 pdf_file_path = 'example.pdf' chinese_text = extract_chinese_text_from_pdf(pdf_file_path) print(chinese_text) ``` 在以上代码,我们首先导入了所需的类和函数。然后,我们定义了一个`extract_chinese_text_from_pdf`函数,该函数接受一个PDF文件路径作为参数并返回提取文文本。 函数内部,我们创建了一个PDF资源管理器对象和一个用于存储结果的StringIO对象。然后,我们创建了一个PDF设备对象和一个PDF解释器对象。接下来,我们打开PDF文件,并使用解释器逐页解析PDF页面。在每一页解析完成后,我们将解析结果存储在结果对象。 最后,我们获取提取的文本内容,并关闭设备和资源管理器。最后,我们将提取文文本打印出来。 请确保将代码的`example.pdf`替换为实际的PDF文件路径。 ### 回答3: 要使用pdfminer来抽取文文本,我们需要使用Python编写代码。下面是一个简单的示例代码: 首先,我们需要安装pdfminer库。可以使用以下命令在命令行安装: ``` pip install pdfminer3k ``` 代码如下: ```python from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from io import StringIO def extract_text_from_pdf(pdf_path): resource_manager = PDFResourceManager() string_out = StringIO() codec = 'utf-8' laparams = LAParams() device = TextConverter(resource_manager, string_out, codec=codec, laparams=laparams) interpreter = PDFPageInterpreter(resource_manager, device) with open(pdf_path, 'rb') as pdf_file: for page in PDFPage.get_pages(pdf_file, check_extractable=True): interpreter.process_page(page) text = string_out.getvalue() device.close() string_out.close() return text pdf_path = 'path/to/your/pdf/file.pdf' extracted_text = extract_text_from_pdf(pdf_path) print(extracted_text) ``` 以上代码定义了一个名为`extract_text_from_pdf`的函数,该函数接受PDF文件的路径作为输入,并返回从该PDF提取的文本。 在主程序,我们指定要提取文本的PDF文件路径,然后调用`extract_text_from_pdf`函数,并将提取到的文本打印出来。 请注意,pdfminer库可能无法处理所有PDF文件,特别是包含非常复杂或加密的PDF文件。在使用该库之前,最好先检查PDF文件是否能够被提取文本。另外,根据需要,还可以根据pdfminer库的其他功能进行更复杂的处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值