2013-03-23 80 views
17

如何從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://stackoverflow.com/questions/14474405/indexing-pdf-from-badly-authored-latex-source)。如果您需要這些PDF文件中包含的信息,那麼最好的辦法是轉儲TIFF(即使用ghostscript)並執行OCR(即tesseract)。 – theta 2013-03-23 10:53:07

回答

20

如果您正在運行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