2013-03-23 48 views
17

Làm cách nào để trích xuất văn bản từ tệp PDF bằng Python?Làm cách nào để trích xuất văn bản từ tệp PDF bằng Python?

tôi thử như sau:

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

Nhưng kết quả được như sau, chứ không phải là văn bản có thể đọc được:

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

+3

Tệp PDF không nhất thiết phải chứa văn bản (xuất hiện như vậy) theo cách hợp lý có thể xuất được vì công cụ tạo PDF có thể xử lý văn bản. Không có đảm bảo rằng bạn có thể trích xuất như một toàn thể như bạn muốn nó. Tôi cho rằng tệp PDF của bạn là một trong những tệp PDF trông đẹp mắt nhưng theo cách bạn có thể trích xuất nội dung theo cách hợp lý. –

+0

Tôi nghĩ rằng đây là vấn đề tương tự như tôi đã có ở đây: [link] (http://stackoverflow.com/questions/14474405/indexing-pdf-from-badly-authored-latex-source). Nếu bạn cần thông tin chứa trong tập tin PDF như vậy, tốt nhất bạn nên đặt TIFF (tức là với ghostscript) và làm OCR (tức là tesseract). – theta

Trả lời

20

nếu bạn đang chạy Linux hoặc mac, bạn có thể sử dụng ps2 ascii lệnh trong mã của bạn:

import os 

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

Có ai biết cách giải quyết trong cửa sổ không? – Milee

+9

@anony thử 'pdftotext' thay vì' ps2ascii' – Moj

+1

Cảm ơn @Moj __pdftotext__ đã làm việc cho tôi –

Các vấn đề liên quan