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

问题描述:

如何从Python中的PDF文件中提取文本?如何从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" % 07%4 ˘! “6 ˛ ˆ ˝ ˆ ˆ ˘ &/& 4” 9 ˆ%6 ˇ%4%4 2)˘ ˘ ˛%:6 (

+3

PDF文件不一定必须包含在一个合理的方式导出文本(出现这样),因为有一个PDF创建工具如何处理文本的各种选项。不能保证你可以根据你的需要整体提取。我认为你的PDF是那些看起来不错的PDF文件之一,但可以用合理的方式提取内容。 – 2013-03-23 05:17:34

+0

我认为这是类似的问题,因为我在这里:[链接](http://*.com/questions/14474405/indexing-pdf-from-badly-authored-latex-source)。如果您需要这些PDF文件中包含的信息,那么最好的办法是转储TIFF(即使用ghostscript)并执行OCR(即tesseract)。 – theta 2013-03-23 10:53:07

如果您正在运行linux或mac,您可以使用ps2 ASCII命令代码:

import os 

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

有谁知道如何解决在Windows中? – Milee 2013-11-15 13:33:28

+9

@anony尝试'pdftotext'而不是'ps2ascii' – Moj 2013-11-15 15:05:18

+1

感谢@Moj __pdftotext__为我工作 – 2014-06-05 18:11:58