Проблема извлечения таблицы без полей в Python Camelot
Я стараюсь извлечь таблицу без полей, как показано на рисунке ниже, которые из PDF-файлов. Установили python-camelot по ссылке " https://github.com/socialcopsdev/camelot" и работают нормально только для граничных таблиц. Пожалуйста, найдите ниже детали
платформа - Linux-4.5.5-300.fc24.x86_64-x86_64-with-fedora-24-Twenty_Four
sys - Python 3.6.1 (по умолчанию, 15 мая 2017 г., 11:42:04)[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)]
NumPy - NumPy 1.15.4
cv2 - OpenCV 3.4.3
3 ответа
Чтобы улучшить обнаруженную область, вы можете увеличить значение edge_tol (по умолчанию: 50), чтобы противодействовать эффекту размещения текста относительно далеко друг от друга по вертикали. Большее значение edge_tol приведет к обнаружению более длинных текстовых сообщений, что приведет к более точному предположению о площади таблицы. Давайте использовать значение 500.
>>> tables = camelot.read_pdf('edge_tol.pdf', flavor='stream', edge_tol=500)
>>> camelot.plot(tables[0], kind='contour')
>>> plt.show()
>>> tables[0].df
Камелот использует решетку по умолчанию, которая опирается на четкие линии, разделяющие ячейки.
Для таблиц без строк вы хотите использовать поток:
tables = camelot.read_pdf('your_file_name.pdf', flavor = 'stream')
Другое решение, которое может помочь, - установить
table_areas
явно, например, к размеру страницы:
# A4 portrait, MediaBox[0 0 595 842]
tables = camelot.read_pdf("filename.pdf", table_areas=["0,842,595,0"])
Вы можете узнать размер области либо с помощью функций визуальной отладки Camelot , либо открыв PDF-файл в текстовом редакторе и проверив размеры MediaBox или CropBox (имейте в виду, что они не используют одно и то же соглашение о координатах).