在Python中从pdf提取文本

时间:2019-02-02 05:30:42

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

我正在尝试从PDF中提取文本。

def getPDFContent(path):
    p = open(path, "rb")
    print(p)
    content = ""
    pdf_content = PyPDF2.PdfFileReader(p)
    print(pdf_content)
    pages = pdf_content.numPages
    print(pages)
    for i in range(0, pages):
        content += pdf_content.getPage(i).extractText() + "\n"
        #print(content)
    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content

getPDFContent(path_to_sample)

我得到的输出是:

enter image description here

如何解决?

1 个答案:

答案 0 :(得分:2)

您的第一个错误是没有将变量分配给您的函数调用,该变量返回已处理的文本。

  

x = getPDFContent(path_to_sample)

如果仍然不能解决问题,请执行以下操作: 尝试使用模块PDF Miner。(适用于Python 3的PDF Miner.Six)。根据您使用的Python版本,PyPDF2有时可能会出现问题。我遇到了带有某些PDF文件的PyPDF2的问题,这给了我与您相似的oytput。但是,PDFMiner与Python 3.xx一致地使用了以下代码。

使用以下命令下载PDFMiner:pip install pdfminer.six以实现Python 2 + 3兼容性,并使用下面的以下代码,您应该一切顺利。

    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    pdfminer.converter import TextConverter
    from pdfminer.layout import LAParams
    from pdfminer.pdfpage import PDFPage
    def getPDFContent(path,pages=None):
         pdf_str=""
         if not pages:
           pagenums = set()
         else:
           pagenums = set(pages)
    output = io.StringIO()
    manager = PDFResourceManager()
    converter = TextConverter(manager, output, laparams=LAParams())
    interpreter = PDFPageInterpreter(manager, converter)
    infile = open(path, 'rb')
    for page in PDFPage.get_pages(infile, pagenums):
        interpreter.process_page(page)
    infile.close()
    converter.close()
    text = output.getvalue()
    pdf_str=text     
    output.close()
    return(pdf_str)
    x=getPDFContent(path_to_sample)