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

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

Я нашел табулу, которая работала как чудо во многих pdf-файлах, упрощая преобразование в csv, а затем обрабатывая его так, как я хочу, всего двумя строками кода: https://tabula-py.readthedocs.io/en/latest/tabula.html#high-level-interfaces

    from tabula import convert_into_by_batch

    convert_into_by_batch('movements', output_format='csv', pages='all')

Но у меня проблемы, потому что в некоторых pdf я вообще не получаю результатов, и мне это не кажется логичным. Потому что:

  1. PDF-файлы выглядят одинаково. По понятным причинам не могу показать исходный файл, но могу поделиться двумя размытыми скриншотами, на которых видно, что файлы практически идентичны. Тот, что за февраль, отлично определяется табулой, а другой - нет: не работающая фотография рабочее фото
  2. У меня нет доступа к тому, как генерируются эти PDF-файлы, но я предполагаю, что они всегда следуют одной и той же процедуре. Поскольку это не то, что происходит в новых PDF-файлах или старых PDF-файлах, а случайно в других промежуточных файлах.

Могу ли я что-нибудь сделать, чтобы изменить способ определения таблиц tabula, чтобы сделать его более точным?


person nck    schedule 24.05.2020    source источник


Ответы (1)


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

Я изменил метод пакетной обработки, чтобы обрабатывать их один за другим с учетом параметра площади. Я использовал foxit reader, чтобы получить примерное количество пикселей, где находится таблица, что в моем случае всегда одинаково: введите здесь описание изображения

И тогда я написал такой код:

from tabula import convert_into
import os
import re
import sys 

directory=sys.argv[0]
output=sys.argv[1]
files = [f for f in os.listdir(directory) if re.match(r'.+\.pdf', f)]
for file in files:
    print(os.path.join(directory, file))
    convert_into(os.path.join(directory, file), output_path=os.path.join(output, file.replace(".pdf",".csv" )), pages='all', area=[[409,39,750,590]])

Мне все еще нужно провести еще несколько тестов, но для моего сценария он кажется довольно надежным, хотя и довольно уродливым, я был бы открыт для другого решения, которое не требует этой измерительной системы.

person nck    schedule 24.05.2020