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

19

我该如何在Python中从PDF文件中提取文本?

我尝试了以下方法:

import sys
import pyPdf

def convertPdf2String(path):
      content = ""
      pdf = pyPdf.PdfFileReader(file(path, "rb"))
      for i in range(0, pdf.getNumPages()):
          content += pdf.getPage(i).extractText() + " \n"
          content = " ".join(content.replace(u"\xa0", u" ").strip().split())
      return content

f = open('a.txt','w+')

f.write(convertPdf2String(sys.argv[1]).encode("ascii","xmlcharrefreplace"))
f.close()

但是结果如下,不是可读的文本:

728;ˇˆ˜ ˚ˇˇ!""˘ˇˆ˙ˆ˝˛˛˛˛ˆ˜ˆ ˆ ˆ˘ˆ˛˙ˆ"ˆ˘"ˆˆˆ˜#$˙ˆ˚ˆ %&ˆ ˘˛ˆ˜'˙˙%˝˛ˆˇ˙ ˜ˆˆ˜'ˆ ˇˆ#$%&('%$&))$$+%#,-.+&&˝())˝)˝+,,-./012)(˝)*˝+,-3˙ˆ/0245)6#57+82,55)6#57+,+2,+ /!#!!&˘˘1"%˘20˛˛3ˆ07%4!˘"6 ˛ˆ ˝ˆ ˆ˘&/&4"9ˆ %6ˇ%4%4&5˘2)˘˘˛%:6(


3
PDF文件不一定必须以合理的可导出方式包含文本(以此形式呈现),因为PDF创建工具处理文本的方式有多种选择。不能保证您可以按照您想要的完整提取内容。我假设您的PDF是那些看起来很好,但在以合理的方式提取内容方面存在问题的PDF文件之一。 - user2665694
我认为这与我遇到的问题很相似:链接。如果您需要PDF文件中的信息,最好的选择是转储TIFF(即使用ghostscript)并进行OCR(即tesseract)。 - theta
pypdf在2022年接受了大量更新。如果您升级了pypdf版本,结果会有所不同。 - Martin Thoma
1个回答

21

如果您正在运行 Linux 或 Mac,可以在您的代码中使用 ps2ascii 命令:

import os

input="someFile.pdf"
output="out.txt"
os.system(("ps2ascii %s %s") %( input , output))

11
请尝试使用 pdftotext 而不是 ps2ascii - Moj
1
如果我只是暂时需要使用它,仅用于文本的进一步处理,该怎么办? - lazarus
@Moj 它打印出0而不是文件中的文本。 - Iqbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接