【问题标题】:How to extract text from a PDF file?如何从PDF文件中提取文本?
【发布时间】: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 查看器 - Adob​​e 的规范 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 用来跟随教程"。

标签: python pdf


【解决方案1】:

PyPDF2 确实有效,但结果可能会有所不同。我从其结果提取中看到了非常不一致的发现。

reader=PyPDF2.pdf.PdfFileReader(self._path)
eachPageText=[]
for i in range(0,reader.getNumPages()):
    pageText=reader.getPage(i).extractText()
    print(pageText)
    eachPageText.append(pageText)

【讨论】:

【解决方案2】:

如何从 PDF 文件中提取文本?

首先要了解的是PDF format。它有一个用英文编写的公共规范,请参阅ISO 32000-2:2017 并阅读PDF 1.7 specification 的 700 多页。你当然至少需要阅读关于PDF的*页面

一旦您了解了 PDF 格式的详细信息,提取文本或多或少会很容易(但是出现在图形或图像中的文本呢;它的图 1)?不要指望在几周内单独编写一个完美的软件文本提取器......

在 Linux 上,您还可以使用 pdf2text,您可以在 Python 代码中使用 popen

一般来说,从 PDF 文件中提取文本是一个定义不明确的问题。对于人类读者,可以用不同的点或照片等制作一些文本(作为图形)......

Google 搜索引擎能够从 PDF 中提取文本,但据传需要超过 50 亿行的源代码。您是否拥有发展竞争对手所需的资源(人力、预算)?

可能是将 PDF 打印到某个虚拟打印机(例如使用 GhostScriptFirefox),然后使用 OCR 技术提取文本。

我建议改为处理生成该 PDF 文件的数据表示,例如原始 LaTeX 代码(或 Lout 代码)或 OOXML 代码。

在所有情况下,您都需要为至少数人年的软件开发预算。

【讨论】:

  • 这不是答案。它说阅读这份 700 页的文件,并没有给出实际解决问题的方法。
  • @xcski:我确实改进了我的答案。请随时通过电子邮件与我联系basile@starynkevitch.net 提及此问题的 URL