2013-03-23 6 views
17

Wie kann ich Text aus einer PDF-Datei in Python extrahieren?Wie extrahiere ich Text aus einer PDF-Datei in Python?

Ich habe versucht, die folgenden:

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

Aber das Ergebnis wird wie folgt statt lesbaren Text:

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

+3

Eine PDF-Datei Text enthalten muss nicht unbedingt in einer angemessenen Art und Weise exportierbar (als solche erscheinen), da es verschiedene Möglichkeiten gibt, wie ein PDF-Tool zur Erstellung mit Text umgehen kann. Es gibt keine Garantie, dass Sie als Ganzes extrahieren können, wie Sie es wollen. Ich gehe davon aus, dass Ihre PDF-Datei eine dieser PDF-Dateien ist, die gut aussieht, aber so, dass Sie den Inhalt auf vernünftige Weise extrahieren können. –

+0

Ich denke, das ist ein ähnliches Problem wie ich hier hatte: [link] (http://stackoverflow.com/questions/14474405/indexing-pdf-from-badly-authored-latex-source). Wenn Sie die in einer solchen PDF-Datei enthaltenen Informationen benötigen, sollten Sie TIFF (d. H. Mit Ghostscript) ablegen und OCR (d. H. Tesseract) ausführen. – theta

Antwort

20

Wenn Sie Linux oder Mac ausführen, können Sie PS2 verwenden ascii Befehl im Code:

import os 

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

Kann jemand in Windows auflösen? – Milee

+9

@anony versuchen 'pdftotext' statt' ps2ascii' – Moj

+1

Dank @Moj __pdftotext__ arbeitete für mich –