Skip to content

dedoc_lib_rus

IlyaKozlov edited this page Feb 18, 2021 · 6 revisions

Dedoc как библиотека

Если стоит задача написания проекта на python и необходимо разбирать документы без пересылки файлов через http, то можно использовать Dedoc в качестве библиотеки.

Установка

Подготовка окружения

Проще всего посмотреть Dockerfile и установить соответствующие пакеты в своей OS (В частности, нужен Libreoffice для конвертации документов). Данные пакеты устанавливались для ОС Ubuntu, в других системах последовательность действий может отличаться.

Установка dedoc

 virtualenv -p python3 .
 source bin/activate
 pip install -e git+https://github.com/ispras/dedoc@version_2021-02-18#egg=dedoc

Проверим, что установка прошла успешно:

python -c "from dedoc.utils import get_unique_name; print(get_unique_name('some.txt'))"

Должно отработать без ошибок и вывести что-то вроде 1613578571_895.txt

Чтение содержимого файла

Если не нужно проводить полный анализ документа, а необходимо просто прочитать определённый файл, можно использовать один из ридеров.

Список ридеров можно посмотреть тут

Например, если необходимо прочитать файл в формате docx, можно использовать docx reader:

from dedoc.readers.docx_reader.docx_reader import DocxReader

reader = DocxReader()
document, _ = reader.read("/home/padre/ТЗ_медики.docx")
document.lines   # document text
document.tables  # document tables

Полная обработка файла

Если необходимо использовать полную функциональность Дедка, может понадобиться менеджер.

Получение конфигов

Есть два конфига: config и manager_config

В config задаются различные параметры работы, в manager_config задаются инструменты, с помощью которых менеджер будет обрабатывать документы. Оба конфига представляют собой обычные python dict, можно использовать свои конфиги вместо них (желательно не удалять ключи из конфига).

Стандартные конфиги можно просто импортировать:

from dedoc.config import get_config
from dedoc.manager_config import get_manager_config

config = get_config()
manager_config = get_manager_config(config)
print(sorted(config.keys()))  # Print is Optional (check that import succeeded)
print(sorted(manager_config.keys()))

Получается что-то вроде:

['api_port', 'import_path_init_api_args',...

['attachments_extractor', 'converter', ...

Создание manager

manager = DedocManager.from_config(config=config, manager_config=manager_config, version="1")

Разбор документа с помощью manager:

parsed_document = manager.parse_file(
    file_path="path to docx",
    parameters={"with_attachments": "True"},
)

Список параметров можно посмотреть в онлайн-документации.

Структура разобранного документа

ParsedDocument

Возвращается методом manager.parse_file

  1. metadata: DocumentMetadata (метаданные документа, зависят от типа, например, размер документа)
  2. content: Optional[DocumentContent] (содержимое документа, про него мы напишем подробнее. Для вложенных документов может быть None)
  3. version: Optional[str] (версия, которая передается в manager)
  4. warnings: List[str] (список проблем, возникших в процессе работы)
  5. attachments: Optional[List[ParsedDocument]] (список документов, вложенных в данный)

DocumentContent

Структура разобранного документа эквивалентна структуре документа, описанного в online документации.