Невозможно прочитать PDF с табулой - PullRequest
0 голосов
/ 29 августа 2018

Я получаю сообщение об ошибке ниже при попытке прочитать PDF-файл с помощью tabula (tabula-py).

Есть ли способ прочитать pdf на python, как панды или другие библиотеки?

пожалуйста, предложите.

>>> from tabula import read_pdf
>>> df = read_pdf('OpTransactionHistory28-08-2018.pdf')
Aug 29, 2018 10:40:27 AM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider loadDiskCache
WARNING: New fonts found, font cache will be re-built
Aug 29, 2018 10:40:27 AM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider <init>
WARNING: Building on-disk font cache, this may take a while
Aug 29, 2018 10:40:32 AM org.apache.pdfbox.pdmodel.font.FileSystemFontProvider <init>
WARNING: Finished building on-disk font cache, found 328 fonts
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/karn/.local/lib/python3.6/site-packages/tabula/wrapper.py", line 119, in read_pdf
    return pd.read_csv(io.BytesIO(output), **pandas_options)
  File "/home/karn/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 678, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/home/karn/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 446, in _read
    data = parser.read(nrows)
  File "/home/karn/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1036, in read
    ret = self._engine.read(nrows)
  File "/home/karn/.local/lib/python3.6/site-packages/pandas/io/parsers.py", line 1848, in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 876, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 891, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 945, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 932, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 2112, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 8 fields in line 4, saw 9

Один из способов обойти это pdftotext преобразование ..

$ pdftotext OpTransactionHistory28-08-2018.pdf

Только что посмотрел ссылку для предоставления по @ace и нашел что-то важное:

>>> from tabula import read_pdf
>>> df = read_pdf('OpTransactionHistory28-08-2018.pdf', pages='all', encoding='ISO-8859-1', multiple_tables=True)

1 Ответ

0 голосов
/ 09 сентября 2018

Ошибка слоя панд часто может быть вызвана разницей в числах столбцов между таблицами, поскольку панды пытаются извлечь один DataFrame из выходных данных tabula-java. Использование multiple_tables=True может обойти это ограничение, так как границы таблиц осведомлены о tabula-py.

Я также отметил эту связанную ошибку, но, похоже, отличается от того, что я видел. https://github.com/chezou/tabula-py#i-faced-cparsererror-how-can-i-extract-multiple-tables

Буду очень признателен, если вы предоставите версию для своих панд.

...