PDFMiner: Как извлечь только основной текст

#python-3.x #pdfminer #pdf-manipulation

#python-3.x #pdfminer #pdf-манипуляция

Вопрос:

Я использую следующий код для преобразования PDF в текстовый файл. Однако меня интересует только основной текст документа, без рисунков, без номеров страниц, без таблиц, без подписей, без формулы и т.д.

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

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

Я безуспешно играл с некоторыми параметрами, такими как ‘all_text = False’.

 import sys
from tqdm import tqdm
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
import io


def pdfparser(pdf_file):

    fp = open(pdf_file, 'rb')
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    laparams.all_texts = False
    laparams.detect_vertical = False
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    # Create a PDF interpreter object.
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    # Process each page contained in the document.
    password = ""
    maxpages = 3
    caching = True
    pagenos=set()
    imagewriter = None
    for page in tqdm(PDFPage.get_pages(fp)):
        interpreter.process_page(page)
        text =  retstr.getvalue()

    text = text.replace("\n","n")
    return text

if __name__ == '__main__':
    text = pdfparser(sys.argv[1])
    print(text)
  

Ответ №1:

В общем, это невозможно напрямую в PDF.

В отличие, например, от docbook, markdown и restructuredtext, файл PDF не содержит семантической информации о содержимом документа.

То есть содержимое не помечается как, например, «изображение», «формула», «верхний колонтитул страницы», «заголовок главы», «основной текст» и так далее.

Поэтому вам придется попытаться восстановить эту семантическую информацию из подсказок в тексте. К сожалению, возможно ли это, зависит от документа.

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

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