Использование pdfminer в сценарии для вывода в CSV - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать pdfminer в сценарии телешоу. Идеальным выходом был бы файл csv, в одном столбце которого были бы имена персонажей, а в другом столбце - строки, которые они произносили.

Вот ссылка на отрывок диалога из сценария. Диалог из сценария

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

from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator

fp = open('Ozark-Episode-1-01-Sugarwood.pdf', 'rb')
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
pages = PDFPage.get_pages(fp)

for index, page in enumerate(pages):
    interpreter.process_page(page)
    layout = device.get_result()
    for lobj in layout:
        if isinstance(lobj, LTTextBox):
            x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
            print('%r: %s' % ((round(x, 1), round(y,1)), text)

Однако вот пример того, что было возвращено:

(108.0, 579.9): No, it wasn’t--

(194.0, 591.9): MARTY

(333.0, 591.9): BRUCE
Sorry, all right?

(252.0, 555.9): BRUCE

(180.0, 543.9): What then?  A place like this 
validates us.  We’re making money 
hand over fist.  Tell me we don’t 
need the higher rent on our books.

(108.0, 483.9): Marty squares up to the skyline, Bruce behind him.

Как видно, порядок строк сейчас перепутан. Я намеревался читать текст в csv построчно в указанном c порядке, но всякий раз, когда два символа говорят одновременно, pdf читает объекты по-разному. Кроме того, в (333.0, 591.9), где говорит Брюс, PDF-файл не может читать диалог как отдельную строку от персонажа. Я предвижу, что в формате сценария будет много таких проблем.

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

Заранее спасибо !!!

...