Python-Camelot извлекает пустые таблицы

Я использую Camelot для извлечения нескольких разделов PDF с помощью следующей команды.

cgl_section = camelot.read_pdf(filename, flavor='stream', 
              table_areas=['35,490,155,483', '53,480,110,470', '117,480,155,470', 
                           '38,469,106,456', '39,454,105,445', '38,430,155,420', 
                           '38,418,77, 410'])

Это нормально работает, когда PDF-файл действительно содержит данные в этих областях. Но я не ожидаю данных в каждом анализируемом PDF-файле, некоторые из них возвращаются пустыми. Я получаю следующую ошибку, когда возвращаемые данные не являются таблицей, а содержат только один столбец.

UserWarning: No tables found in table area 1

а также

ValueError: min() arg is an empty sequence

Мне нужен способ извлечения этих конкретных областей во всех PDF-файлах, но игнорировать пустые после. Необходимо иметь возможность использовать извлеченные данные упорядоченным образом.

Открыт также для любых других предложений

TIA


person A.A. F    schedule 02.01.2019    source источник
comment
Можете ли вы добавить приведенный выше код в блок try exception, я не знаю о камелоте.   -  person Mohamed Thasin ah    schedule 02.01.2019
comment
Блок Try по-прежнему будет пытаться запустить команду и столкнется с ошибками в одной или нескольких таблицах и полностью откажется от команды. Мне нужно иметь возможность извлекать любые доступные данные без ошибок в пустых таблицах.   -  person A.A. F    schedule 02.01.2019


Ответы (2)


Возможно, вам поможет опция table_regions (представленная в 0.7).

https://camelot-py.readthedocs.io/en/master/user/advanced.html#specify-table-regions

When table_regions is specified, Camelot will only analyze the specified regions to look for tables.
person Stefano Fiorucci - anakin87    schedule 08.01.2019

У меня такая же проблема! Это не идеальное решение, но я считаю, что вы можете обойти это, выделив конкретный вызов table_area, который может привести к пустой таблице, в его собственный вызов pdf_read. Сделав это, вы можете сделать то, что было предложено выше, и просто окружить pdf_read блоком try_catch. Это даст вам необходимую надежность.

person Ryan Arifin    schedule 16.04.2020