Skip to content

dedoc_lib_rus

IlyaKozlov edited this page Feb 17, 2021 · 6 revisions

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

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

Установка

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

Проще всего посмотреть Dockerfile и установить соответствующие пакеты в своей OS

(В частности нужен Libreoffice, он конвертирует документы)

Устанавливаем dedoc

 virtualenv -p python3 .
 source bin/activate
 pip install -e git+https://github.com/ispras/dedoc@cf479c6ed2497d4fc7b088cbddcf0a9b0db47e82#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

Содержит текст документа и таблицы.

  1. tables: List[Table]
  2. structure: TreeNode

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

Clone this wiki locally