1

複数ページの PDF から抽出して、PDF の一部を強調表示しようとしています。そのためには、抽出したテキストの座標が必要です。

tabula-pyを使用して、次のテーブルを抽出します。

import tabula

# Read pdf into DataFrame
df = tabula.read_pdf("test.pdf", pages='all')

param を使用するoutput_format='json'ことで、座標を含む各テキストを取得できます。データフレーム形式の例を次に示します (データフレームは、ここでは dict であり、読み込む必要があります) および json 形式:

{0: {0: nan,
  1: nan,
  2: 'Disability',
  3: nan,
  4: 'Category',
  5: nan,
  6: nan,
  7: 'Blind',
  8: 'Low Vision',
  9: nan,
  10: 'Dexterity',
  11: 'Mobility'},
 1: {0: nan,
  1: nan,
  2: nan,
  3: 'Participants',
  4: nan,
  5: nan,
  6: nan,
  7: '5',
  8: '5',
  9: nan,
  10: '5',
  11: '3'},
 2: {0: nan,
  1: nan,
  2: 'Ballots',
  3: nan,
  4: 'Completed',
  5: nan,
  6: nan,
  7: '1',
  8: '2',
  9: nan,
  10: '4',
  11: '3'},
 3: {0: nan,
  1: 'Ballots',
  2: nan,
  3: 'Incomplete/',
  4: nan,
  5: 'Terminated',
  6: nan,
  7: '4',
  8: '3',
  9: nan,
  10: '1',
  11: '0'},
 4: {0: nan,
  1: nan,
  2: nan,
  3: nan,
  4: 'Accuracy',
  5: nan,
  6: nan,
  7: '34.5%, n=1',
  8: '98.3% n=2',
  9: '(97.7%, n=3)',
  10: '98.3%, n=4',
  11: '95.4%, n=3'},
 5: {0: 'Results',
  1: nan,
  2: nan,
  3: nan,
  4: 'Time to',
  5: nan,
  6: 'complete',
  7: '1199 sec, n=1',
  8: '1716 sec, n=3',
  9: '(1934 sec, n=2)',
  10: '1672.1 sec, n=4',
  11: '1416 sec, n=3'}}
{'extraction_method': 'stream',
 'top': 143.0,
 'left': 83.0,
 'width': 461.0,
 'height': 202.0,
 'right': 544.0,
 'bottom': 345.0,
 'data': [[{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 149.0,
    'left': 448.2,
    'width': 38.58997344970703,
    'height': 6.880000114440918,
    'text': 'Results'}],
  [{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 156.56,
    'left': 311.4,
    'width': 36.66999053955078,
    'height': 6.880000114440918,
    'text': 'Ballots'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''}],
  [{'top': 163.88,
    'left': 90.0,
    'width': 49.150001525878906,
    'height': 6.880000114440918,
    'text': 'Disability'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 163.88,
    'left': 239.4,
    'width': 36.66999053955078,
    'height': 6.880000114440918,
    'text': 'Ballots'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''}],
  [{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 171.2,
    'left': 167.16,
    'width': 62.10999298095703,
    'height': 6.880000114440918,
    'text': 'Participants'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 171.2,
    'left': 311.4,
    'width': 64.3899917602539,
    'height': 6.880000114440918,
    'text': 'Incomplete/'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''}],
  [{'top': 178.52,
    'left': 90.0,
    'width': 47.230003356933594,
    'height': 6.880000114440918,
    'text': 'Category'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 178.52,
    'left': 239.4,
    'width': 57.31000518798828,
    'height': 6.880000114440918,
    'text': 'Completed'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 176.36,
    'left': 400.68,
    'width': 47.350013732910156,
    'height': 6.880000114440918,
    'text': 'Accuracy'},
   {'top': 176.36,
    'left': 483.12,
    'width': 40.749977111816406,
    'height': 6.880000114440918,
    'text': 'Time to'}],
  [{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 185.84,
    'left': 311.4,
    'width': 60.66999053955078,
    'height': 6.880000114440918,
    'text': 'Terminated'},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''}],
  [{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 193.16,
    'left': 478.68,
    'width': 49.629981994628906,
    'height': 6.880000114440918,
    'text': 'complete'}],
  [{'top': 220.11,
    'left': 90.0,
    'width': 25.05999755859375,
    'height': 6.329999923706055,
    'text': 'Blind'},
   {'top': 220.11,
    'left': 195.12,
    'width': 8.020004272460938,
    'height': 6.329999923706055,
    'text': '5'},
   {'top': 220.11,
    'left': 267.24,
    'width': 8.02001953125,
    'height': 6.329999923706055,
    'text': '1'},
   {'top': 220.11,
    'left': 343.68,
    'width': 8.02001953125,
    'height': 6.329999923706055,
    'text': '4'},
   {'top': 220.11,
    'left': 398.28,
    'width': 51.94000244140625,
    'height': 6.329999923706055,
    'text': '34.5%, n=1'},
   {'top': 220.11,
    'left': 471.48,
    'width': 63.819976806640625,
    'height': 6.329999923706055,
    'text': '1199 sec, n=1'}],
  [{'top': 246.03,
    'left': 90.0,
    'width': 50.5,
    'height': 6.329999923706055,
    'text': 'Low Vision'},
   {'top': 246.03,
    'left': 195.12,
    'width': 8.020004272460938,
    'height': 6.329999923706055,
    'text': '5'},
   {'top': 246.03,
    'left': 267.25,
    'width': 8.019989013671875,
    'height': 6.329999923706055,
    'text': '2'},
   {'top': 246.03,
    'left': 343.69,
    'width': 8.019989013671875,
    'height': 6.329999923706055,
    'text': '3'},
   {'top': 246.03,
    'left': 399.61,
    'width': 49.170013427734375,
    'height': 6.329999923706055,
    'text': '98.3% n=2'},
   {'top': 246.03,
    'left': 471.49,
    'width': 63.80999755859375,
    'height': 6.329999923706055,
    'text': '1716 sec, n=3'}],
  [{'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 0.0, 'left': 0.0, 'width': 0.0, 'height': 0.0, 'text': ''},
   {'top': 271.47,
    'left': 394.92,
    'width': 58.66998291015625,
    'height': 6.329999923706055,
    'text': '(97.7%, n=3)'},
   {'top': 271.47,
    'left': 468.24,
    'width': 70.41998291015625,
    'height': 6.329999923706055,
    'text': '(1934 sec, n=2)'}],
  [{'top': 297.39,
    'left': 90.0,
    'width': 43.660003662109375,
    'height': 6.329999923706055,
    'text': 'Dexterity'},
   {'top': 297.39,
    'left': 195.11,
    'width': 8.020004272460938,
    'height': 6.329999923706055,
    'text': '5'},
   {'top': 297.39,
    'left': 267.24,
    'width': 8.02001953125,
    'height': 6.329999923706055,
    'text': '4'},
   {'top': 297.39,
    'left': 343.68,
    'width': 8.02001953125,
    'height': 6.329999923706055,
    'text': '1'},
   {'top': 297.39,
    'left': 398.28,
    'width': 51.94000244140625,
    'height': 6.329999923706055,
    'text': '98.3%, n=4'},
   {'top': 297.39,
    'left': 467.4,
    'width': 72.10000610351562,
    'height': 6.329999923706055,
    'text': '1672.1 sec, n=4'}],
  [{'top': 323.31,
    'left': 90.0,
    'width': 39.69999694824219,
    'height': 6.329999923706055,
    'text': 'Mobility'},
   {'top': 323.31,
    'left': 195.12,
    'width': 8.020004272460938,
    'height': 6.329999923706055,
    'text': '3'},
   {'top': 323.31,
    'left': 267.25,
    'width': 8.019989013671875,
    'height': 6.329999923706055,
    'text': '3'},
   {'top': 323.31,
    'left': 343.69,
    'width': 8.019989013671875,
    'height': 6.329999923706055,
    'text': '0'},
   {'top': 323.31,
    'left': 398.29,
    'width': 51.94000244140625,
    'height': 6.329999923706055,
    'text': '95.4%, n=3'},
   {'top': 323.31,
    'left': 471.49,
    'width': 63.80999755859375,
    'height': 6.329999923706055,
    'text': '1416 sec, n=3'}]]}

最初のもののようなデータフレームを作成できますが、各テキストの座標を Rect() として作成する方法はありますか?

4

1 に答える 1