在解析pdf文件时使用pdfminer.six时遇到问题

时间:2018-02-08 20:29:48

标签: python-3.x pdf text-extraction

我正在尝试使用pdfminer.six从pdf中提取文字,我按照下面提到的代码进行了here

import pdfminer
import io

def extract_raw_text(pdf_filename):
    output = io.StringIO()
    laparams = pdfminer.layout.LAParams()

    with open(pdf_filename, "rb") as pdffile:
        pdfminer.high_level.extract_text_to_fp(pdffile, output, laparams=laparams)

    return output.getvalue()

print(extract_raw_text('simple1.pdf'))

但它产生错误

Traceback (most recent call last):
  File "extract.py", line 13, in <module>
    print(extract_raw_text('simple1.pdf'))
  File "extract.py", line 6, in extract_raw_text
    laparams = pdfminer.layout.LAParams()
AttributeError: module 'pdfminer' has no attribute 'layout'

我只想从pdf中提取整个文本,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题! 可能是新更新存在问题,因为python无法将多余的文件归类为模块,因为它们没有得到很好的分类。

因此,您所需要做的就是直接导入特定文件,您可以通过以下三种方式进行操作:

在您的代码内(整个模块)

而不是使用import pdfminer,而是导入您要使用的特定模块

import pdfminer.layout
import pdfminer.high_level

这样,您可以像在
中那样直接访问模块的所有类。 laparams = pdfminer.layout.LAParams()


在代码内部(特定的类/函数)

采用相同的逻辑,但是在这里,我们将只选择我们要在每个模块中使用的特定类(在您的情况下,您已经使用了类/函数LAParams()extract_text_to_fp < / p>

所以您会这样做:

from pdfminer.layout import LAParams
from pdfminer.high_level import extract_text_to_fp


在模块本身上(用于每次使用进行修复)

这是一个致命的解决方案,但不是最佳解决方案,因为每次更新模块时,这些更改可能会丢失。但是,如果您经常使用此模块,则很有用。

  1. 查找您的站点包位置 在您的终端python -m site上书写,您将找到所有路径。像这样...lib/python3.6/site-packages

  2. 那样完成的人
  3. 找到您的pdfminer模块,打开文件夹并打开__init__.py文件

  4. 为要预加载的所有模块编写代码,例如:

    导入pdfminer.layout 导入pdfminer.high_level

现在,每次使用import pdfminer时,这些模块也会被预先加载,因此您可以按照上面的代码运行代码,并且可以正常工作。

答案 1 :(得分:0)

这为我解决了问题。

{
  "id": 1,
  "name": "Darush",
  "family": "Hamidi"
}