【发布时间】:2016-04-22 14:51:54
【问题描述】:
我正在尝试使用Python 提取this PDF 文件中包含的文本。
我正在使用PyPDF2 模块,并且有以下脚本:
import PyPDF2
pdf_file = open('sample.pdf')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content
当我运行代码时,我得到以下与 PDF 文档中不同的输出:
!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%
如何按原样提取 PDF 文档中的文本?
【问题讨论】:
-
我从来没有使用过那个模块,但是如果你以二进制模式打开文件会有什么不同:
pdf_file = open('sample.pdf', 'rb')? -
感谢您的回复。我尝试了二进制模式,但没有任何改变
-
如果可能的话,使用好的 PDF 查看器 - Adobe 的规范 Acrobat Reader 复制文本。你得到同样的结果吗?区别不是 text 不同,而是 font 不同 - 字符代码映射到其他值。并非所有 PDF 都包含正确的数据来恢复它。
-
该 PDF 包含一个字符 CMap 表,因此该线程中讨论的限制和解决方法是相关的 - *.com/questions/4203414/…。
-
PDF 确实包含正确的 CMAP,因此将临时字符映射转换为纯文本很简单。但是,检索正确的order 文本需要额外的处理。 Mac OS X 的 Quartz PDF 渲染器是一个令人讨厌的工作!在其原始渲染顺序中,我得到“m T'h iuss iisn ga tosam fopllloew DalFo dnogc wumithe ntht eI tutorial”... 只有在按 x 坐标排序后,我才得到更可能正确的结果:“这是一个示例 PDF 文档,我'm 用来跟随教程"。