-
Notifications
You must be signed in to change notification settings - Fork 28
dedoc_lib_rus
Мы пишем наш проект на python и хотим разбирать документы, но не хотим заниматься пересылкой файлов через http. В такой ситуации мы можем использовать Dedoc как библиотеку.
Проще всего посмотреть Dockerfile и установить соответствующие пакеты в своей OS
(В частности нужен Libreoffice, он конвертирует документы)
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 = 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"},
)
Список параметров можно посмотреть в онлайн-документации.
Его возвращает manager.parse_file
- metadata: DocumentMetadata метаданные документа (зависит от типа. Например размер документа)
- content: Optional[DocumentContent] (Содержимое документа, про него мы напишем подробнее. Для вложенных документов может быть None)
- version: Optional[str] (версия, которую мы передали в manager)
- warnings: List[str] (список проблем, возникших в процессе работы)
- attachments: Optional[List[ParsedDocument]] (список документов, вложенных в данный)
Содержит текст документа и таблицы.
- tables: List[Table]
- structure: TreeNode
В целом структура документа максимально похожа на структуру, описанную в онлайн-документации.