Извлечение определенных частей PDF (например, аннотация, введение) в Python? - PullRequest
2 голосов
/ 17 октября 2019

Я пытаюсь извлечь определенные части файла PDF. Я читаю PDF-файл, как показано в приведенном ниже коде. Этот код извлекает всю информацию сразу, включая все значения мусора. Я хочу сосредоточиться только на резюме, введении, методах и заключении. Я попробовал это с помощью регулярных выражений, а также. Пожалуйста, дайте мне знать, есть ли способ извлечь вышеуказанную информацию.

def pdfparser(pdffile):
    with open(pdffile, mode='rb') as f:
    #fp = open(data, 'rb')
        rsrcmgr = PDFResourceManager()
        retstr = io.StringIO()
        codec = 'utf-8'
        laparams = LAParams()
        data =[]
        device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
        # Create a PDF interpreter object.
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        # Process each page contained in the document.
        for page in PDFPage.get_pages(f):
            interpreter.process_page(page)
            data = retstr.getvalue()
            #print(data)

        # Cleaning the data
        data = data.lower()
        data = re.sub('\[*?\]', '', data)
        data = re.sub('[%s]' % re.escape(string.punctuation), '', data)
        data = re.sub('\w*\d\w*', '', data)
        data = data.replace("\n", "")

        print(data)

        return data

Код регулярного выражения:

paragraph = "Abstract"
def abstractExtraction(text,paragraph):

    count = 0
    para=""
    text=text.replace('\n\n+', '\n')
    text=text.replace('\s\s\s+', '\n')
    for i in re.split(r'\n+', text):
        p = re.compile('(?<!\S)'+paragraph, re.IGNORECASE)
        p1 = re.compile('abstract')
        if(str(p1.match(i)))=='None':
            if str(p.match(i))!='None':
                count=1
            if count == 1:
                if str(re.compile('\d' + '.*' + '\s*' + 'Introduction', re.IGNORECASE).match(i))!='None':
                    return para
                elif str(re.compile('X|IV|V?I{0,3}' + '.*' + '\s*' + 'Introduction', re.IGNORECASE).match(i))!='None':
                    return para
                else:
                    para =para+i
                    continue
    if(len(para)>1000):
        return 'None'
    else:
        return para
...