ispras / dedoc

Dedoc is a library (service) for automate documents parsing and bringing to a uniform format. It automatically extracts content, logical structure, tables, and meta information from textual electronic documents. (Parse document; Document content extraction; Logical structure extraction; PDF parser; Scanned document parser; DOCX parser; HTML parser
Apache License 2.0
111 stars 15 forks source link

Ошибки в выделении текста #381

Closed ValiullinAlbert closed 6 months ago

ValiullinAlbert commented 7 months ago

ALROSA_Sustainability Report_2022.pdf

При работе с такими файлами не выделяется жирный текст (отсутствует BoldAnnotation), также текст выделяется в странном порядке. То есть то, что располагается в файле на одной строке делится на разные строки:

reader_pdf = PdfTxtlayerReader(config={"n_jobs": 1})
document_pdf = reader_pdf.read(filepath, parameters=dict(need_pdf_table_analysis="True"))

for index, line in enumerate(document_pdf.lines[:200]):
    annotations = line.annotations
    print(index)
    print(line.line)
    for annot in annotations:
        print(annot)
NastyBoget commented 7 months ago

Добрый день, постараемся разобраться, спасибо!

NastyBoget commented 6 months ago

У документов подобного рода сложный текстовый слой, при копировании порядок текста нарушается - мы ведем исследование, как это можно исправить, но увы, универсального решения нет. Это проблема формата PDF, решить проблему с неправильным порядком текста может только OCR, например, PdfImageReader.

Что касается жирности - проблема также не может быть решена полностью, PdfTxtlayerReader использует для чтения pdfminer.six, который возвращает информацию о жирности если в названии шрифта есть bold (связанная issue). В данном документе названия шрифтов такого не содержат, поэтому сложно сказать, возможно ли в принципе основываясь на информации текстового слоя, эту информацию получить.

Увы, парсинг PDF - всегда рискованная затея, в данном случае скорее всего мы не сможем что-то исправить.