2013-03-23 24 views
17

Come posso estrarre il testo da un file PDF in Python?Come estrarre il testo da un file PDF in Python?

ho provato la seguente:

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() 

Ma il risultato è il seguente, piuttosto che il testo leggibile:

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

+3

un file PDF non devono necessariamente contenere testo (che appare come tale) in modo esportabile ragionevole, dato che ci sono varie opzioni come uno strumento di creazione di PDF può trattare con il testo. Non vi è alcuna garanzia che sia possibile estrarre nel suo complesso come desiderato. Presumo che il tuo PDF sia uno di quei file PDF che sembrano belli ma nel modo in cui puoi estrarre il contenuto in modo ragionevole. –

+0

Penso che questo sia un problema simile a quello che avevo qui: [collegamento] (http://stackoverflow.com/questions/14474405/indexing-pdf-from-badly-authored-latex-source). Se hai bisogno delle informazioni contenute in tale file PDF, la soluzione migliore sarebbe quella di scaricare TIFF (cioè con ghostscript) e fare OCR (i.e tesseract). – theta

risposta

20

se si esegue linux o mac è possibile utilizzare ps2 ascii comando nel codice:

import os 

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

Qualcuno sa come risolvere in Windows? – Milee

+9

@anony prova 'pdftotext' invece di' ps2ascii' – Moj

+1

Grazie a @Moj __pdftotext__ ha funzionato per me –

Problemi correlati