python-将PDF页面中的文本提取到列表

python-将PDF页面中的文本提取到列表,python,pdf,Python,Pdf,我正在尝试从PDF中提取文本逐页,并将文本作为每页的列表存储在如下列表中 我使用了以下目录中的extractText()方法: 上述代码在技术上可行,但该方法不可靠(根据自身情况),抛出如下输出: [u'!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#

我正在尝试从PDF中提取文本逐页,并将文本作为每页的列表存储在如下列表中

我使用了以下目录中的
extractText()
方法:

上述代码在技术上可行,但该方法不可靠(根据自身情况),抛出如下输出:

[u'!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', u'"!"#$"%#&\'"()"', 

因此,我想知道是否还有其他可靠的方法可以用Python解析PDF文件中的文本?

好的,您可以尝试以下方法:

import PyPDF2

pages = []
pdf_file = <Enter your file path>
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
for page_number in range(number_of_pages):   # use xrange in Py2
    page = read_pdf.getPage(page_number).extractText().split(" ")  # Extract page wise text then split based on spaces as required by you
    pages.append(page)
导入PyPDF2
页码=[]
pdf_文件=
read_pdf=PyPDF2.PdfFileReader(pdf文件)
页数=阅读pdf.getNumPages()
对于范围内的页码(页数):#在Py2中使用xrange
page=read_pdf.getPage(page_number).extractText().split(“”)#提取逐页文本,然后根据需要根据空格进行拆分
pages.append(第页)

好吧,你可以试试这个:

import PyPDF2

pages = []
pdf_file = <Enter your file path>
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
for page_number in range(number_of_pages):   # use xrange in Py2
    page = read_pdf.getPage(page_number).extractText().split(" ")  # Extract page wise text then split based on spaces as required by you
    pages.append(page)
导入PyPDF2
页码=[]
pdf_文件=
read_pdf=PyPDF2.PdfFileReader(pdf文件)
页数=阅读pdf.getNumPages()
对于范围内的页码(页数):#在Py2中使用xrange
page=read_pdf.getPage(page_number).extractText().split(“”)#提取逐页文本,然后根据需要根据空格进行拆分
pages.append(第页)

您的意思是“这适用于某些PDF文件,但适用于其他PDF文件,具体取决于使用的生成器。”?这是真的。并非所有PDF中的所有文本都可以提取。发布一个链接到你有问题的PDF,我们可以知道这是否是这样的。我使用的文件在这里:它是用Print/PDF生成的。。。来自docx文档的MS Word中的函数。如果有一种从docx生成pdf的方法不会引起这些问题(但保持页面完整等),那将非常令人惊讶:我自己的工具比PyPDF2做得更好,但在解码字体时出错:
%--纯文本转储--------------------我“是”页面“1”。“我是”页面“1”。“我是”页面“1”。
(等等)。空格字符被翻译成
!不过,使用Adobe Acrobat复制文本时也会发生同样的情况,这是复制文本的试金石。检查PDF显示我们都是正确的,根据嵌入的
/ToUnicode
“空格”确实翻译成了双引号。@Jongware-有趣!你有自己的工具吗?谢天谢地,这对普通人来说太粗鲁了。它可以为每个对象、页面等转储有用的数据,但解释这种转储仍然需要对PDF规范有透彻的了解。回到你的问题:(a)pdfminer似乎(还没有?)在那里,但(b)你手上碰巧有一个不太符合要求的PDF,这使事情变得复杂。你的意思是“这对某些PDF文件很有效,但对其他文件很差,这取决于使用的生成器。”?这是真的。并非所有PDF中的所有文本都可以提取。发布一个链接到你有问题的PDF,我们可以知道这是否是这样的。我使用的文件在这里:它是用Print/PDF生成的。。。来自docx文档的MS Word中的函数。如果有一种从docx生成pdf的方法不会引起这些问题(但保持页面完整等),那将非常令人惊讶:我自己的工具比PyPDF2做得更好,但在解码字体时出错:
%--纯文本转储--------------------我“是”页面“1”。“我是”页面“1”。“我是”页面“1”。
(等等)。空格字符被翻译成
!不过,使用Adobe Acrobat复制文本时也会发生同样的情况,这是复制文本的试金石。检查PDF显示我们都是正确的,根据嵌入的
/ToUnicode
“空格”确实翻译成了双引号。@Jongware-有趣!你有自己的工具吗?谢天谢地,这对普通人来说太粗鲁了。它可以为每个对象、页面等转储有用的数据,但解释这种转储仍然需要对PDF规范有透彻的了解。回到你的问题上:(a)pdfminer似乎(还没有?)在那里,但是(b)你的手上碰巧有一个不太一致的PDF,这使事情变得复杂。