2016-01-04 5 views
0

Я искал мой вопрос и не получил свой ответ в двух доступных вопросовСтраница PDF постранично

  1. Extract text per page with Python pdfMiner?

  2. PDFMiner - Iterating through pages and converting them to text

В основном я хочу итерацию над каждой страницей, потому что я хочу выбрать только ту страницу, которая имеет определенный текст.

Я использовал pyPdf. Он работает почти для 90% pdfs, но иногда он не извлекает информацию со страницы.

Я использовал следующий код:

import pyPdf 
extract = ""   
pdf = pyPdf.PdfFileReader(open('filename.pdf', "rb")) 
num_of_pages = pdf.getNumPages() 
for p in range(num_of_pages): 
    ex = pdf.getPage(6) 
    ex = ex.extractText() 
    if re.search(r"to be held (at|on)",ex.lower()): 
    print 'yes' 
    print ex ,"\n" 
    extract = extract + ex + "\n" 
    continue 

Приведенный выше код работает, но иногда некоторые страницы не извлекаются.

Я также пробовал использовать pdfminer, но я не мог найти, как итерации PDF в нем по страницам. pdfminer возвращает весь текст pdf.

Я использовал следующий код:

def convert_pdf_to_txt(path): 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    fp = file(path, 'rb') 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    pagenos=set() 

for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True): 
    interpreter.process_page(page) 

    text = retstr.getvalue() 

    fp.close() 
    device.close() 
    retstr.close() 
    return text 

В приведенном выше коде текст из PDF происходит от for петли

for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True): 
    interpreter.process_page(page) 

    text = retstr.getvalue() 

В этом, как я могу итерацию на одной странице в то время, ,

Документация по адресу pdfminer непонятна. Также есть много версий того же самого.

Итак, есть ли какие-либо другие пакеты для моего вопроса или можно использовать для этого pdfminer?

ответ

2

Я знаю, что нехорошо отвечать на собственный вопрос, но я думаю, что, возможно, выяснил ответ на этот вопрос.

Я думаю, что это не лучший способ это сделать, но все же это помогает мне.

я использовал комбинацию pypdf и pdfminer

код, как показано ниже:

import pyPdf 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.layout import LAParams 
from pdfminer.pdfpage import PDFPage 
from cStringIO import StringIO 

path = "filename.pdf" 
pdf = pyPdf.PdfFileReader(open(path, "rb")) 
fp = file(path, 'rb') 
num_of_pages = pdf.getNumPages() 
extract = "" 
for i in range(num_of_pages): 
    inside = [i] 
    pagenos=set(inside) 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    text = "" 
    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True): 
    interpreter.process_page(page) 
    text = retstr.getvalue() 
    text = text.decode("ascii","replace") 
    if re.search(r"to be held (at|on)",text.lower()): 
     print text 
     extract = extract + text + "\n" 
     continue 

Там может быть лучший способ сделать это, но в настоящее время я узнал, что это будет очень хорошо.

+2

Ничего плохого в ответе на свой вопрос. В конце концов, это может быть полезно для других. –

+1

Если вы ответили на свой вопрос, отметьте его как принятый ответ. –

Смежные вопросы