TableVision: Recovering Verified Structure from Historical Tables
Authors: Todd Y. Zhou, James M. Snyder
Organizations: T. Y. Zhou is with Harvard University, Cambridge, MA 02138 USA. · J. M. Snyder, Jr. is with the Department of Government, Harvard University, Cambridge, MA 02138 USA.
Gaps, skips, and mistakes are the normal state of a historical register: rows go missing, tables cross page breaks, columns slip under wrong names, and column sums disagree with the corresponding row entries. Readers read digits correctly but lose the table structure. On seven clean panels of election returns, the best open-source reader reproduces 99.0% of the digits but files only 83.7% of the figures in the correct cells and gets 11 of 30 columns correct. TableVision treats table structure recovery as the problem. On three degraded 1888 pages, Amazon Textract files only 1 of 1494 figures correctly; TableVision correctly files 99.2%, and all 51 columns its exact-total check releases are correct. A dynamic program cuts a volume into blocks by how many columns sum to their last line; witnesses read the cells; the gate classifies each column as exactly reconciling, flagged as faithful to a page whose arithmetic is wrong, or withheld. A theory of the sum check says which errors it cannot see and why its optimal block is about θ−1/2 rows at defect rate θ. On 2201 columns of Wisconsin electoral data, the gate accepts 2042, flags 118, and withholds 41; failure rises with column length R as 1−(1−θ)R at 1.1 defects per 1000 cells in general elections; official returns confirm 933 of 934 testable accepted sums and all 35 testable flagged totals; and the deployment added 491,359 gated precinct rows to a 9.3-million-row dataset. One implication is that the design of the verification block is critical.
Figures & tables
% of Digits
% of Numbers
County Columns
Reader
Correct
in Correct Cell
100% Correct
Clean pages: 7 panels, 1214 numbers, 30 county columns
Reader’s own table → the same words in TableVision’s structure
Tesseract
90.9
69.0 →
83.4
3 →
9
EasyOCR
77.3
41.6 →
60.5
0 →
1
PaddleOCR
98.1
81.4 →
96.5
9 →
14
TABLE I: Digits Read Versus Table Structure Kept, by Readers Alone and With TableVision
Fig. 1: What a per-cell reader cannot see. (a) Iowa Official Register 1925–26, p. 500, as bound: a 25-column table printed sideways. (b) Its header block: \ifnum1<10 \scriptsize\else\tiny\fi1⃝ 12 office headers over \ifnum2<10 \scriptsize\else\tiny\fi2⃝ 25 candidate columns in party blocks of unequal width, under a title that says “Continued.” (c) Three Delaware County columns, 1894 register: \ifnum3<10 \scriptsize\else\tiny\fi3⃝ the Union township row taken for a heading and \ifnum4<10 \scriptsize\else\tiny\fi4⃝ the total line each column must reproduce; a figure is about nine pixels tall. (d) The foot of p. 500 and head of p. 501: \ifnum5<10 \scriptsize\else\tiny\fi5⃝ Taylor County’s total line; \ifnum6<10 \scriptsize\else\tiny\fi6⃝ the next county’s heading; \ifnum7<10 \scriptsize\else\tiny\fi7⃝ a parent label; \ifnum8<10 \scriptsize\else\tiny\fi8⃝ a page break with no county heading, column header, or parent label, and \ifnum9<10 \scriptsize\else\tiny\fi9⃝ wards continuing overleaf under that label; \ifnum10<10 \scriptsize\else\tiny\fi10⃝ leader dots that mean blank, not zero. (e) Minnesota 1889–90, p. 340: \ifnum11<10 \scriptsize\else\tiny\fi11⃝ a broken 42 that a typist and the machine both read as 12, and \ifnum12<10 \scriptsize\else\tiny\fi12⃝ the printed total that needs 42.
Fig. 2: Gate failure rises with column length as the model predicts: share of columns failing the gate, by length, for the four general-election volumes (1704 columns) and the 1924 primary (497), with 95% Wilson intervals and the curves 1−(1−θ^)R of Table II ; the longest bins are Milwaukee County’s.
Failed
Rows
Cells failed (%)
Volume
Cols.
Flag
With.
Rˉ
Rˉsb
θ^ (95%)
obs./model
1925
497
66
13
37.8
85.1
4.95 (3.9–6.1)
26.3 / 26.4
1954
639
20
2
45.5
149.0
0.80 (0.5–1.2)
9.4 / 10.0
1956
213
0
8
46.3
161.8
0.86 (0.4–1.6)
9.9 / 11.3
1958
568
20
14
47.2
167.6
1.47 (1.0–2.1)
24.4 / 17.5
1962
284
12
4
49.0
176.4
1.26 (0.7–2.0)
15.5 / 16.2
TABLE II: The Defect Model by Volume
Fig. S1: The transcription against the official canvass, which the workflow never saw (Section VI-D of the main text): the released sum of the 934 accepted columns and the read printed total of the 35 flagged and 16 withheld columns with an official county figure. Of the 985, 983 agree to the vote; one printed total is off by 6 (Dane County 1956, the book’s error) and one accepted sum by 200 (Rock County 1960), either a compensating pair of errors (Proposition 1) or a discrepancy between the book and the canvass.
Reader
MN p. 340
MN p. 377
WI p. 455
WI p. 652 L
WI p. 652 R
WI p. 653 L
WI p. 653 R
Tesseract 5.3 (mode 6, best model, ×2 )
71.2/78.8
68.1/80.1
28.9/69.1
92.9/96.8
93.5/95.2
96.4/96.4
98.1/98.1
EasyOCR 1.7 ( ×2 )
35.3/61.8
25.7/37.7
23.4/56.9
81.0/88.1
45.2/58.9
70.0/82.7
65.4/75.0
PaddleOCR PP-OCRv4 ( ×2 )
86.5/95.9
89.5/96.7
43.8/92.1
100.0/100.0
98.4/98.4
99.1/99.1
100.0/100.0
docTR 1.1 ( ×2 )
84.7/94.7
92.4/96.7
50.3/97.7
100.0/100.0
100.0/100.0
100.0/100.0
100.0/100.0
img2table 2.0 ( ×2 )
42.4/54.1
57.6/59.4
44.4/56.6
75.4/80.2
54.0/57.3
0.0/78.2
15.4/83.7
SLANet-plus ( ×2 )
35.9/95.9
0.0/96.7
59.9/92.1
62.7/100.0
44.4/98.4
68.2/99.1
22.1/100.0
TABLE S1: Cells Correct per Panel
Reader
Chars.
Figs.
Cells
In order
Rows
Cols.
Released
Tesseract 5.3, as filed
90.9
86.4
69.0
73.3
64.0
3/30
1 (1)
EasyOCR 1.7, as filed
77.3
67.7
41.6
46.0
37.6
0/30
1 (1)
PaddleOCR PP-OCRv4, as filed
98.1
96.5
81.4
94.1
77.6
9/30
2 (0)
docTR 1.1, as filed
99.0
97.9
83.7
97.4
79.2
11/30
4 (0)
img2table 2.0, as filed
60.5
50.7
44.8
19.9
16.8
0/30
0 (0)
SLANet-plus, as filed
78.5
76.9
39.1
33.6
25.1
1/30
0 (0)
TABLE S2: Every Score, Pooled
Failure mode (where observed)
Signal that exposed it
Disposition
1
Sideways pages; skew over half a row pitch (IA 1894, 1895)
rendering; row 20 px lower at the right edge
rotate, deskew; one page, two counties, not attempted
2
Column comb shifted by a 28-px double rule (IA)
width guard (b); a total under another’s name
comb re-measured (S5)
3
Data row taken for a heading or never detected (six rows in five counties, IA 1894)
Omit1 : every column short by one row’s figures; gap at a label line
row read off the page and block re-gated (four counties)
4
Sub-heading given a reading from the column rule (eight rows, WI 1940)
by-eye check; residuals
readings set absent (S1, S4)
5
Last column clipped by the scan edge (WI 1940; WI 1956)
window against page edge (S6); unread cells
columns withheld
6
Witness misreads: text-layer drift (297 for 207, WI 1940); broken glyphs (42 read as 12, MN 1889)
witness disagreement; residual; 5–8 × re-read
corrected only from the page
TABLE S3: Failure Modes, the Signals That Exposed Them, and Their Disposition
Reader
Chars.
Figs.
Cells
In order
Rows
Cols.
Released
Tesseract 5.3 (mode 6, best model, ×2 )
67.4
63.3
15.0
19.7
0.0
0/77
0 (0)
EasyOCR 1.7 ( ×3 )
29.9
24.2
3.5
4.1
0.0
0/77
0 (0)
PaddleOCR PP-OCRv4 ( ×4 )
60.8
56.2
13.9
16.3
0.0
0/77
0 (0)
docTR 1.1 ( ×1 )
71.0
69.5
19.0
30.7
0.0
0/77
1 (1)
img2table 2.0 ( ×3 )
18.6
17.6
3.8
1.1
0.0
0/77
0 (0)
SLANet-plus ( ×1 )
32.8
30.5
14.8
3.9
0.9
0/77
0 (0)
TABLE S4: The Hard Pages, Every Reader
Cell
Column sum
p.
County
Row
Column
ref.
pass
Total
ref.
pass
113
Fayette
Bethel
Jones
12
14
289
289
291
113
Fayette
Fremont
Stone
92
89
2815
2815
2812
113
Fayette
West Union
Rice
6
blank
288
288
282
113
Fayette
West Union
Sharp
5
6
43
43
44
113
Floyd
3d ward
Stone
82
84
2002
2002
2004
TABLE S5: Cells Where the Reference and the Reader’s Pass Differ