Я пытаюсь использовать 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 между персонажем и диалогом простым и упорядоченным образом.
Заранее спасибо !!!