From 6e8079df84c9f05051e315e77773c2772af3c32d Mon Sep 17 00:00:00 2001 From: Vinayak Mehta Date: Fri, 5 Oct 2018 16:15:30 +0530 Subject: [PATCH] [MRG] Add tests for output formats and parser kwargs (#126) * Remove unused image processing code * Add opencv back-compat comment * Add tests for parser special cases * Fix lattice table area test * Add tests for output format * Add openpyxl dep --- camelot/image_processing.py | 83 +-------- camelot/utils.py | 23 +-- requirements.txt | 3 +- tests/data.py | 352 +++++++++++++++++++++++++++--------- tests/files/superscript.pdf | Bin 0 -> 75643 bytes tests/test_cli.py | 27 +++ tests/test_common.py | 64 ++++++- tests/test_plotting.py | 1 - 8 files changed, 365 insertions(+), 188 deletions(-) create mode 100755 tests/files/superscript.pdf delete mode 100755 tests/test_plotting.py diff --git a/camelot/image_processing.py b/camelot/image_processing.py index d3ae8ef..5f7b247 100644 --- a/camelot/image_processing.py +++ b/camelot/image_processing.py @@ -7,8 +7,6 @@ from operator import itemgetter import cv2 import numpy as np -from .utils import merge_tuples - def adaptive_threshold(imagename, process_background=False, blocksize=15, c=-2): """Thresholds an image using OpenCV's adaptiveThreshold. @@ -102,6 +100,7 @@ def find_lines(threshold, direction='horizontal', line_size_scaling=15, iteratio _, contours, _ = cv2.findContours( threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) except ValueError: + # for opencv backward compatibility contours, _ = cv2.findContours( threshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) @@ -141,6 +140,7 @@ def find_table_contours(vertical, horizontal): __, contours, __ = cv2.findContours( mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) except ValueError: + # for opencv backward compatibility contours, __ = cv2.findContours( mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10] @@ -185,6 +185,7 @@ def find_table_joints(contours, vertical, horizontal): __, jc, __ = cv2.findContours( roi, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) except ValueError: + # for opencv backward compatibility jc, __ = cv2.findContours( roi, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) if len(jc) <= 4: # remove contours with less than 4 joints @@ -196,80 +197,4 @@ def find_table_joints(contours, vertical, horizontal): joint_coords.append((c1, c2)) tables[(x, y + h, x + w, y)] = joint_coords - return tables - - -def remove_lines(threshold, line_size_scaling=15): - """Removes lines from a thresholded image. - - Parameters - ---------- - threshold : object - numpy.ndarray representing the thresholded image. - line_size_scaling : int, optional (default: 15) - Factor by which the page dimensions will be divided to get - smallest length of lines that should be detected. - - The larger this value, smaller the detected lines. Making it - too large will lead to text being detected as lines. - - Returns - ------- - threshold : object - numpy.ndarray representing the thresholded image - with horizontal and vertical lines removed. - - """ - size = threshold.shape[0] // line_size_scaling - vertical_erode_el = cv2.getStructuringElement(cv2.MORPH_RECT, (1, size)) - horizontal_erode_el = cv2.getStructuringElement(cv2.MORPH_RECT, (size, 1)) - dilate_el = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10)) - - vertical = cv2.erode(threshold, vertical_erode_el) - vertical = cv2.dilate(vertical, dilate_el) - - horizontal = cv2.erode(threshold, horizontal_erode_el) - horizontal = cv2.dilate(horizontal, dilate_el) - - threshold = np.bitwise_and(threshold, np.invert(vertical)) - threshold = np.bitwise_and(threshold, np.invert(horizontal)) - return threshold - - -def find_cuts(threshold, char_size_scaling=200): - """Finds cuts made by text projections on y-axis. - - Parameters - ---------- - threshold : object - numpy.ndarray representing the thresholded image. - line_size_scaling : int, optional (default: 200) - Factor by which the page dimensions will be divided to get - smallest length of lines that should be detected. - - The larger this value, smaller the detected lines. Making it - too large will lead to text being detected as lines. - - Returns - ------- - y_cuts : list - List of cuts on y-axis. - """ - size = threshold.shape[0] // char_size_scaling - char_el = cv2.getStructuringElement(cv2.MORPH_RECT, (1, size)) - - threshold = cv2.erode(threshold, char_el) - threshold = cv2.dilate(threshold, char_el) - - try: - __, contours, __ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, - cv2.CHAIN_APPROX_SIMPLE) - except ValueError: - contours, __ = cv2.findContours(threshold, cv2.RETR_EXTERNAL, - cv2.CHAIN_APPROX_SIMPLE) - - contours = [cv2.boundingRect(c) for c in contours] - y_cuts = [(c[1], c[1] + c[3]) for c in contours] - y_cuts = list(merge_tuples(sorted(y_cuts))) - y_cuts = [(y_cuts[i][0] + y_cuts[i - 1][1]) // 2 for i in range(1, len(y_cuts))] - return sorted(y_cuts, reverse=True) \ No newline at end of file + return tables \ No newline at end of file diff --git a/camelot/utils.py b/camelot/utils.py index 3f30f88..b42b4f8 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -640,25 +640,4 @@ def get_text_objects(layout, ltype="char", t=None): t += get_text_objects(obj, ltype=ltype) except AttributeError: pass - return t - - -def merge_tuples(tuples): - """Merges a list of overlapping tuples. - Parameters - ---------- - tuples : list - List of tuples where a tuple is a single axis coordinate pair. - Yields - ------ - tuple - """ - merged = list(tuples[0]) - for s, e in tuples: - if s <= merged[1]: - merged[1] = max(merged[1], e) - else: - yield tuple(merged) - merged[0] = s - merged[1] = e - yield tuple(merged) \ No newline at end of file + return t \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 9a375f7..20bd683 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ click==6.7 matplotlib==2.2.3 numpy==1.15.2 opencv-python==3.4.2.17 +openpyxl==2.5.8 pandas==0.23.4 pdfminer.six==20170720 -PyPDF2==1.26.0 \ No newline at end of file +PyPDF2==1.26.0 diff --git a/tests/data.py b/tests/data.py index d9e723b..8642e8a 100755 --- a/tests/data.py +++ b/tests/data.py @@ -3,17 +3,51 @@ from __future__ import unicode_literals +data_stream = [ + ["", "Table: 5 Public Health Outlay 2012-13 (Budget Estimates) (Rs. in 000)", "", "", "", "", "", ""], + ["States-A", "Revenue", "", "Capital", "", "Total", "Others(1)", "Total"], + ["", "", "", "", "", "Revenue &", "", ""], + ["", "Medical &", "Family", "Medical &", "Family", "", "", ""], + ["", "", "", "", "", "Capital", "", ""], + ["", "Public", "Welfare", "Public", "Welfare", "", "", ""], + ["", "Health", "", "Health", "", "", "", ""], + ["Andhra Pradesh", "47,824,589", "9,967,837", "1,275,000", "15,000", "59,082,426", "14,898,243", "73,980,669"], + ["Arunachal Pradesh", "2,241,609", "107,549", "23,000", "0", "2,372,158", "86,336", "2,458,494"], + ["Assam", "14,874,821", "2,554,197", "161,600", "0", "17,590,618", "4,408,505", "21,999,123"], + ["Bihar", "21,016,708", "4,332,141", "5,329,000", "0", "30,677,849", "2,251,571", "32,929,420"], + ["Chhattisgarh", "11,427,311", "1,415,660", "2,366,592", "0", "15,209,563", "311,163", "15,520,726"], + ["Delhi", "28,084,780", "411,700", "4,550,000", "0", "33,046,480", "5,000", "33,051,480"], + ["Goa", "4,055,567", "110,000", "330,053", "0", "4,495,620", "12,560", "4,508,180"], + ["Gujarat", "26,328,400", "6,922,900", "12,664,000", "42,000", "45,957,300", "455,860", "46,413,160"], + ["Haryana", "15,156,681", "1,333,527", "40,100", "0", "16,530,308", "1,222,698", "17,753,006"], + ["Himachal Pradesh", "8,647,229", "1,331,529", "580,800", "0", "10,559,558", "725,315", "11,284,873"], + ["Jammu & Kashmir", "14,411,984", "270,840", "3,188,550", "0", "17,871,374", "166,229", "18,037,603"], + ["Jharkhand", "8,185,079", "3,008,077", "3,525,558", "0", "14,718,714", "745,139", "15,463,853"], + ["Karnataka", "34,939,843", "4,317,801", "3,669,700", "0", "42,927,344", "631,088", "43,558,432"], + ["Kerala", "27,923,965", "3,985,473", "929,503", "0", "32,838,941", "334,640", "33,173,581"], + ["Madhya Pradesh", "28,459,540", "4,072,016", "3,432,711", "0", "35,964,267", "472,139", "36,436,406"], + ["Maharashtra", "55,011,100", "6,680,721", "5,038,576", "0", "66,730,397", "313,762", "67,044,159"], + ["Manipur", "2,494,600", "187,700", "897,400", "0", "3,579,700", "0", "3,579,700"], + ["Meghalaya", "2,894,093", "342,893", "705,500", "5,000", "3,947,486", "24,128", "3,971,614"], + ["Mizoram", "1,743,501", "84,185", "10,250", "0", "1,837,936", "17,060", "1,854,996"], + ["Nagaland", "2,368,724", "204,329", "226,400", "0", "2,799,453", "783,054", "3,582,507"], + ["Odisha", "14,317,179", "2,552,292", "1,107,250", "0", "17,976,721", "451,438", "18,428,159"], + ["Puducherry", "4,191,757", "52,249", "192,400", "0", "4,436,406", "2,173", "4,438,579"], + ["Punjab", "19,775,485", "2,208,343", "2,470,882", "0", "24,454,710", "1,436,522", "25,891,232"], + ["", "Health Sector Financing by Centre and States/UTs in India [2009-10 to 2012-13](Revised) P a g e |23", "", "", "", "", "", ""] +] + data_stream_table_rotated = [ ["", "", "Table 21 Current use of contraception by background characteristics\u2014Continued", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], ["", "", "", "", "", "", "Modern method", "", "", "", "", "", "", "Traditional method", "", "", "", ""], - ["", "", "", "Any", "", "", "", "", "", "", "Other", "Any","", "", "", "Not", "", "Number"], + ["", "", "", "Any", "", "", "", "", "", "", "Other", "Any", "", "", "", "Not", "", "Number"], ["", "", "Any", "modern", "Female", "Male", "", "", "", "Condom/", "modern", "traditional", "", "With-", "Folk", "currently", "", "of"], ["", "Background characteristic", "method", "method", "sterilization", "sterilization", "Pill", "IUD", "Injectables", "Nirodh", "method", "method", "Rhythm", "drawal", "method", "using", "Total", "women"], ["", "Caste/tribe", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], ["", "Scheduled caste", "74.8", "55.8", "42.9", "0.9", "9.7", "0.0", "0.2", "2.2", "0.0", "19.0", "11.2", "7.4", "0.4", "25.2", "100.0", "1,363"], ["", "Scheduled tribe", "59.3", "39.0", "26.8", "0.6", "6.4", "0.6", "1.2", "3.5", "0.0", "20.3", "10.4", "5.8", "4.1", "40.7", "100.0", "256"], ["", "Other backward class", "71.4", "51.1", "34.9", "0.0", "8.6", "1.4", "0.0", "6.2", "0.0", "20.4", "12.6", "7.8", "0.0", "28.6", "100.0", "211"], - ["", "Other", "71.1","48.8", "28.2", "0.8", "13.3", "0.9", "0.3", "5.2", "0.1", "22.3", "12.9", "9.1", "0.3", "28.9", "100.0", "3,319"], + ["", "Other", "71.1", "48.8", "28.2", "0.8", "13.3", "0.9", "0.3", "5.2", "0.1", "22.3", "12.9", "9.1", "0.3", "28.9", "100.0", "3,319"], ["", "Wealth index", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], ["", "Lowest", "64.5", "48.6", "34.3", "0.5", "10.5", "0.6", "0.7", "2.0", "0.0", "15.9", "9.9", "4.6", "1.4", "35.5", "100.0", "1,258"], ["", "Second", "68.5", "50.4", "36.2", "1.1", "11.4", "0.5", "0.1", "1.1", "0.0", "18.1", "11.2", "6.7", "0.2", "31.5", "100.0", "1,317"], @@ -47,18 +81,18 @@ data_stream_table_rotated = [ ["", "", "", "", "", "", "", "", "54", "", "", "", "", "", "", "", "", ""] ] -data_stream_table_area_single = [ - ["","One Withholding"], - ["Payroll Period","Allowance"], - ["Weekly","$71.15"], - ["Biweekly","142.31"], - ["Semimonthly","154.17"], - ["Monthly","308.33"], - ["Quarterly","925.00"], - ["Semiannually","1,850.00"], - ["Annually","3,700.00"], - ["Daily or Miscellaneous","14.23"], - ["(each day of the payroll period)",""] +data_stream_table_area = [ + ["", "One Withholding"], + ["Payroll Period", "Allowance"], + ["Weekly", "$71.15"], + ["Biweekly", "142.31"], + ["Semimonthly", "154.17"], + ["Monthly", "308.33"], + ["Quarterly", "925.00"], + ["Semiannually", "1,850.00"], + ["Annually", "3,700.00"], + ["Daily or Miscellaneous", "14.23"], + ["(each day of the payroll period)", ""] ] data_stream_columns = [ @@ -107,82 +141,236 @@ data_stream_columns = [ ["01", "Aguascalientes", "001", "Aguascalientes", "0226", "Hacienda Nueva"] ] +data_stream_split_text = [ + ["FEB", "RUAR", "Y 2014 M27 (BUS)", "", "ALPHABETIC LISTING BY T", "YPE", "", "", "", "ABLPDM27"], + ["", "", "", "", "OF ACTIVE LICENSES", "", "", "", "", "3/19/2014"], + ["", "", "", "", "OKLAHOMA ABLE COMMIS", "SION", "", "", "", ""], + ["LICENSE", "", "", "", "PREMISE", "", "", "", "", ""], + ["NUMBER", "TYPE", "DBA NAME", "LICENSEE NAME", "ADDRESS", "CITY", "ST", "ZIP", "PHONE NUMBER", "EXPIRES"], + ["648765", "AAA", "ALLEGIANT AIR", "ALLEGIANT AIR LLC", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "-", "2014/12/03"], + ["", "", "", "", "7777 EAST APACHE", "", "", "", "", ""], + ["648766", "AAA", "ALLEGIANT AIR", "ALLEGIANT AIR LLC", "STREET", "TULSA", "OK", "74115", "-", "2014/12/16"], + ["82030", "AAA", "AMERICAN AIRLINES", "AMERICAN AIRLINES INC", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "(405) 680-3701", "2014/09/14"], + ["509462", "AAA", "AMERICAN AIRLINES", "AMERICAN AIRLINES INC", "7777 EAST APACHE DRIVE", "TULSA", "OK", "74115", "(918) 831-6302", "2014/08/19"], + ["", "", "", "AMERICAN EAGLE", "", "", "", "", "", ""], + ["509609", "AAA", "AMERICAN EAGLE", "AIRLINES INC", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "(405) 680-3701", "2014/08/19"], + ["", "", "", "AMERICAN EAGLE", "", "", "", "", "", ""], + ["402986", "AAA", "AMERICAN EAGLE", "AIRLINES INC", "7777 EAST APACHE DRIVE", "TULSA", "OK", "74115", "(859) 767-3747", "2014/10/22"], + ["", "", "", "", "WILL ROGERS AIRPORT", "", "", "", "", ""], + ["79145", "AAA", "DELTA AIR LINES", "DELTA AIR LINES INC", "BOX 59975", "OKLAHOMA CITY", "OK", "73159", "(404) 773-9745", "2014/05/11"], + ["600941", "AAA", "ENDEAVOR AIR", "ENDEAVOR AIR INC", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "(901) 348-4100", "2015/03/26"], + ["", "", "", "", "7100 TERMINAL DRIVE", "", "", "", "", ""], + ["478482", "AAA", "EXPRESSJET AIRLINES", "EXPRESSJET AIRLINES INC", "WILL ROGERS AIRPORT", "OKLAHOMA CITY", "OK", "73159", "(832) 353-1201", "2014/05/08"], + ["505981", "AAA", "SKYWEST AIRLINES", "SKYWEST INC", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "(405) 634-3000", "2014/05/28"], + ["429754", "AAA", "SOUTHWEST AIRLINES", "SOUTHWEST AIRLINES CO", "7100 TERMINAL DRIVE", "OKLAHOMA CITY", "OK", "73159", "(405) 682-4183", "2015/02/15"], + ["", "", "TULSA INTERNATIONAL", "", "", "", "", "", "", ""], + ["429755", "AAA", "AIRPORT", "SOUTHWEST AIRLINES CO", "7777 EAST APACHE DRIVE", "TULSA", "OK", "74115", "(918) 834-4495", "2015/02/16"], + ["415051", "AAA", "UNITED AIRLINES", "UNITED AIRLINES INC", "7777 EAST APACHE DRIVE", "TULSA", "OK", "74115", "(872) 825-8309", "2014/05/12"], + ["106719", "AAA", "UNITED AIRLINES", "UNITED AIRLINES INC", "WILL ROGERS AIRPORT", "OKLAHOMA CITY", "OK", "73159", "(872) 825-8309", "2014/04/11"], + ["", "", "A SENSU JAPANESE", "", "7123 SOUTH 92ND EAST", "", "", "", "", ""], + ["625422", "BAW", "RESTAURANT", "INFORMAL PARTNERSHIP", "AVENUE SUITE J", "TULSA", "OK", "74133", "(918) 252-0333", "2015/02/14"], + ["", "", "ADAMO'S ROUTE 66", "", "2132 WEST GARY", "", "", "", "", ""], + ["464828", "BAW", "ITALIAN VILLA", "TADJ INC", "BOULEVARD", "CLINTON", "OK", "73601", "(580) 323-5900", "2015/02/11"], + ["", "", "", "", "12215 NORTH", "", "", "", "", ""], + ["184066", "BAW", "AJANTA", "CABAB N' CURRY INC", "PENNSYLVANIA", "OKLAHOMA CITY", "OK", "73120", "(405) 752-5283", "2014/07/27"], + ["", "", "", "SAYRE LODGING", "", "", "", "", "", ""], + ["547693", "BAW", "AMERICINN OF SAYRE", "ENTERPRISES LLC", "2405 SOUTH EL CAMINO", "SAYRE", "OK", "73662", "(580) 928-2700", "2014/09/08"], + ["", "", "ANDOLINI'S PIZZERIA &", "", "12140 EAST 96TH STREET", "", "", "", "", ""], + ["428377", "BAW", "ITALIAN RESTAURANT", "ANDOLINI'S LLC", "NORTH #106", "OWASSO", "OK", "74055", "(918) 272-9325", "2015/02/10"], + ["", "", "ASAHI JAPANESE", "", "", "", "", "", "", ""], + ["446957", "BAW", "RESTAURANT", "JIN CORPORATION", "7831 EAST 71ST STREET", "TULSA", "OK", "74133", "(918) 307-9151", "2014/12/22"], + ["", "", "", "SMOKEHOUSE", "", "", "", "", "", ""], + ["632501", "BAW", "BACK DOOR BARBECUE", "ASSOCIATES INC", "315 NORTHWEST 23RD", "OKLAHOMA CITY", "OK", "73103", "-", "2014/08/01"], + ["598515", "BAW", "BAMBOO THAI BISTRO", "BAMBOO THAI BISTRO INC", "5079 SOUTH YALE AVENUE", "TULSA", "OK", "74135", "(918) 828-0740", "2015/03/11"], + ["", "", "BANDANA RED'S", "", "", "", "", "", "", ""], + ["618693", "BAW", "STEAKHOUSE", "BRADSHAW, STEVE_LEN", "37808 OLD HIGHWAY 270", "SHAWNEE", "OK", "74804", "-", "2014/08/20"], + ["", "", "", "", "1522 WEST LINDSEY", "", "", "", "", ""], + ["632575", "BAW", "BASHU LEGENDS", "HYH HE CHUANG LLC", "STREET", "NORMAN", "OK", "73069", "-", "2014/07/21"], + ["", "", "", "DEEP FORK HOLDINGS", "", "", "", "", "", ""], + ["543149", "BAW", "BEDLAM BAR-B-Q", "LLC", "610 NORTHEAST 50TH", "OKLAHOMA CITY", "OK", "73105", "(405) 528-7427", "2015/02/23"], + ["", "", "", "", "Page 1 of 151", "", "", "", "", ""] +] + +data_stream_flag_size = [ + ["", "TABLE 125: STATE-WISE COMPOSITION OF OUTSTANDING LIABILITIES - 1997 (Contd.)", "", "", "", "", "", "", "", "", ""], + ["", "", "", "", "(As at end-March)", "", "", "", "", "", ""], + ["", "", "", "", "", "", "", "", "", "", "(` Billion)"], + ["States", "Total", "Market", "NSSF", "WMA", "Loans", "Loans", "Loans", "Loans", "Loans", "Loans"], + ["", "Internal", "Loans", "", "from", "from", "from", "from", "from", "from SBI", "from"], + ["", "Debt", "", "", "RBI", "Banks", "LIC", "GIC", "NABARD", "& Other", "NCDC"], + ["", "", "", "", "", "& FIs", "", "", "", "Banks", ""], + ["1", "2=", "3", "4", "5", "6=", "7", "8", "9", "10", "11"], + ["", "(3 to 6)+14", "", "", "", "(7 to13)", "", "", "", "", ""], + ["Andhra Pradesh", "48.11", "40.45", "-", "3.26", "4.4", "2.62", "-", "0.91", "-", "0.25"], + ["Arunachal Pradesh", "1.23", "1.1", "-", "-", "0.13", "-", "-", "-", "-", "-"], + ["Assam", "12.69", "10.02", "-", "2.41", "0.26", "0.08", "-", "-0.06", "0.01", "0.24"], + ["Bihar", "40.75", "41.54", "-", "-", "-1.42", "0.19", "-", "-1.01", "-0.36", "0.2"], + ["Chhattisgarh", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], + ["Goa", "1.4", "1.02", "-", "-", "0.38", "0.31", "-", "0.07", "-", "-"], + ["Gujarat", "19.75", "17.1", "-", "-", "2.64", "1.17", "-", "1.11", "-", "0.44"], + ["Haryana", "11.53", "9.67", "-", "0.06", "1.8", "0.55", "-", "0.64", "-", "0.49"], + ["Himachal Pradesh", "8.02", "2.94", "-", "4.55", "0.53", "0.13", "-", "0.05", "-", "0.25"], + ["Jammu and Kashmir", "11.72", "4.49", "-", "-", "7.23", "0.66", "-", "0.02", "6.08", "-"], + ["Jharkhand", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], + ["Karnataka", "22.44", "19.59", "-", "-", "2.86", "1.22", "-", "0.89", "-", "0.69"], + ["Kerala", "29.03", "24.912", "-", "-", "4.11", "1.77", "-", "0.48", "-", "1.45"], + ["Madhya Pradesh", "27.13", "23.57", "-", "-", "3.56", "0.38", "-", "1.86", "-", "1.28"], + ["Maharashtra", "30.47", "26.07", "-", "-", "4.39", "0.21", "-", "-0.12", "0.02", "2.89"], + ["Manipur", "2.17", "1.61", "-", "0.26", "0.29", "0.08", "-", "-", "-", "0.09"], + ["Meghalaya", "1.36", "1.38", "-", "-", "-0.02", "0.04", "-", "-0.05", "-", "0.03"], + ["Mizoram", "1.17", "0.46", "-", "0.27", "0.43", "0.11", "-", "-", "-", "0.03"], + ["Nagaland", "2.99", "2.6", "-", "-", "0.39", "0.24", "-", "-", "-", "0.04"], + ["Odisha", "34.04", "27.58", "-", "4.4", "2.06", "0.56", "-", "0.66", "-", "0.2"], + ["Punjab", "19.18", "10.93", "-", "1.03", "7.23", "0.17", "-", "0.71", "5.9", "0.46"], + ["Rajasthan", "36.77", "28.63", "-", "4.99", "3.16", "0.57", "-", "1.64", "-", "0.81"], + ["Sikkim", "0.16", "-", "-", "-", "0.16", "0.03", "-", "-", "-", "0.01"], + ["Tamil Nadu", "34.11", "31.41", "-", "-", "2.7", "1.3", "-", "0.6", "-", "0.68"], + ["Tripura", "2.3", "1.89", "-", "-", "0.41", "0.41", "-", "-0.05", "-", "0.02"], + ["Uttaranchal", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], + ["Uttar Pradesh", "80.62", "74.89", "-", "4.34", "1.34", "0.6", "-", "-0.21", "0.18", "0.03"], + ["West Bengal", "34.23", "32.19", "-", "-", "2.04", "0.77", "-", "0.06", "-", "0.51"], + ["NCT Delhi", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-"], + ["ALL STATES", "513.38", "436.02", "-", "25.57", "51.06", "14.18", "-", "8.21", "11.83", "11.08"], + ["2 Includes `2.45 crore outstanding under “Market Loan Suspense”.", "", "", "", "", "", "", "", "", "", ""], + ["", "", "", "", "445", "", "", "", "", "", ""] +] + data_lattice = [ - ["Cycle Name","KI (1/km)","Distance (mi)","Percent Fuel Savings","","",""], - ["","","","Improved Speed","Decreased Accel","Eliminate Stops","Decreased Idle"], - ["2012_2","3.30","1.3","5.9%","9.5%","29.2%","17.4%"], - ["2145_1","0.68","11.2","2.4%","0.1%","9.5%","2.7%"], - ["4234_1","0.59","58.7","8.5%","1.3%","8.5%","3.3%"], - ["2032_2","0.17","57.8","21.7%","0.3%","2.7%","1.2%"], - ["4171_1","0.07","173.9","58.1%","1.6%","2.1%","0.5%"] + ["Cycle Name", "KI (1/km)", "Distance (mi)", "Percent Fuel Savings", "", "", ""], + ["", "", "", "Improved Speed", "Decreased Accel", "Eliminate Stops", "Decreased Idle"], + ["2012_2", "3.30", "1.3", "5.9%", "9.5%", "29.2%", "17.4%"], + ["2145_1", "0.68", "11.2", "2.4%", "0.1%", "9.5%", "2.7%"], + ["4234_1", "0.59", "58.7", "8.5%", "1.3%", "8.5%", "3.3%"], + ["2032_2", "0.17", "57.8", "21.7%", "0.3%", "2.7%", "1.2%"], + ["4171_1", "0.07", "173.9", "58.1%", "1.6%", "2.1%", "0.5%"] ] data_lattice_table_rotated = [ - ["State","Nutritional Assessment (No. of individuals)","","","","IYCF Practices (No. of mothers: 2011-12)","Blood Pressure (No. of adults: 2011-12)","","Fasting Blood Sugar (No. of adults:2011-12)",""], - ["","1975-79","1988-90","1996-97","2011-12","","Men","Women","Men","Women"], - ["Kerala","5738","6633","8864","8297","245","2161","3195","1645","2391"], - ["Tamil Nadu","7387","10217","5813","7851","413","2134","2858","1119","1739"], - ["Karnataka","6453","8138","12606","8958","428","2467","2894","1628","2028"], - ["Andhra Pradesh","5844","9920","9545","8300","557","1899","2493","1111","1529"], - ["Maharashtra","5161","7796","6883","9525","467","2368","2648","1417","1599"], - ["Gujarat","4403","5374","4866","9645","477","2687","3021","2122","2503"], - ["Madhya Pradesh","*","*","*","7942","470","1965","2150","1579","1709"], - ["Orissa","3756","5540","12024","8473","398","2040","2624","1093","1628"], - ["West Bengal","*","*","*","8047","423","2058","2743","1413","2027"], - ["Uttar Pradesh","*","*","*","9860","581","2139","2415","1185","1366"], - ["Pooled","38742","53618","60601","86898","4459","21918","27041","14312","18519"] + ["State", "Nutritional Assessment (No. of individuals)", "", "", "", "IYCF Practices (No. of mothers: 2011-12)", "Blood Pressure (No. of adults: 2011-12)", "", "Fasting Blood Sugar (No. of adults:2011-12)", ""], + ["", "1975-79", "1988-90", "1996-97", "2011-12", "", "Men", "Women", "Men", "Women"], + ["Kerala", "5738", "6633", "8864", "8297", "245", "2161", "3195", "1645", "2391"], + ["Tamil Nadu", "7387", "10217", "5813", "7851", "413", "2134", "2858", "1119", "1739"], + ["Karnataka", "6453", "8138", "12606", "8958", "428", "2467", "2894", "1628", "2028"], + ["Andhra Pradesh", "5844", "9920", "9545", "8300", "557", "1899", "2493", "1111", "1529"], + ["Maharashtra", "5161", "7796", "6883", "9525", "467", "2368", "2648", "1417", "1599"], + ["Gujarat", "4403", "5374", "4866", "9645", "477", "2687", "3021", "2122", "2503"], + ["Madhya Pradesh", "*", "*", "*", "7942", "470", "1965", "2150", "1579", "1709"], + ["Orissa", "3756", "5540", "12024", "8473", "398", "2040", "2624", "1093", "1628"], + ["West Bengal", "*", "*", "*", "8047", "423", "2058", "2743", "1413", "2027"], + ["Uttar Pradesh", "*", "*", "*", "9860", "581", "2139", "2415", "1185", "1366"], + ["Pooled", "38742", "53618", "60601", "86898", "4459", "21918", "27041", "14312", "18519"] +] + +data_lattice_table_area = [ + ["", "", "", "", "", "", "", "", ""], + ["State", "n", "Literacy Status", "", "", "", "", "", ""], + ["", "", "Illiterate", "Read & Write", "1-4 std.", "5-8 std.", "9-12 std.", "College", ""], + ["Kerala", "2400", "7.2", "0.5", "25.3", "20.1", "41.5", "5.5", ""], + ["Tamil Nadu", "2400", "21.4", "2.3", "8.8", "35.5", "25.8", "6.2", ""], + ["Karnataka", "2399", "37.4", "2.8", "12.5", "18.3", "23.1", "5.8", ""], + ["Andhra Pradesh", "2400", "54.0", "1.7", "8.4", "13.2", "18.8", "3.9", ""], + ["Maharashtra", "2400", "22.0", "0.9", "17.3", "20.3", "32.6", "7.0", ""], + ["Gujarat", "2390", "28.6", "0.1", "14.4", "23.1", "26.9", "6.8", ""], + ["Madhya Pradesh", "2402", "29.1", "3.4", "8.5", "35.1", "13.3", "10.6", ""], + ["Orissa", "2405", "33.2", "1.0", "10.4", "25.7", "21.2", "8.5", ""], + ["West Bengal", "2293", "41.7", "4.4", "13.2", "17.1", "21.2", "2.4", ""], + ["Uttar Pradesh", "2400", "35.3", "2.1", "4.5", "23.3", "27.1", "7.6", ""], + ["Pooled", "23889", "30.9", "1.9", "12.3", "23.2", "25.2", "6.4", ""], + ["", "", "", "", "", "", "", "", ""] ] data_lattice_process_background = [ - ["State","Date","Halt stations","Halt days","Persons directly reached(in lakh)","Persons trained","Persons counseled","Persons testedfor HIV"], - ["Delhi","1.12.2009","8","17","1.29","3,665","2,409","1,000"], - ["Rajasthan","2.12.2009 to 19.12.2009","","","","","",""], - ["Gujarat","20.12.2009 to 3.1.2010","6","13","6.03","3,810","2,317","1,453"], - ["Maharashtra","4.01.2010 to 1.2.2010","13","26","1.27","5,680","9,027","4,153"], - ["Karnataka","2.2.2010 to 22.2.2010","11","19","1.80","5,741","3,658","3,183"], - ["Kerala","23.2.2010 to 11.3.2010","9","17","1.42","3,559","2,173","855"], - ["Total","","47","92","11.81","22,455","19,584","10,644"] + ["State", "Date", "Halt stations", "Halt days", "Persons directly reached(in lakh)", "Persons trained", "Persons counseled" ,"Persons testedfor HIV"], + ["Delhi", "1.12.2009", "8", "17", "1.29", "3,665", "2,409", "1,000"], + ["Rajasthan", "2.12.2009 to 19.12.2009", "", "", "", "", "", ""], + ["Gujarat", "20.12.2009 to 3.1.2010", "6", "13", "6.03", "3,810", "2,317", "1,453"], + ["Maharashtra", "4.01.2010 to 1.2.2010", "13", "26", "1.27", "5,680", "9,027", "4,153"], + ["Karnataka", "2.2.2010 to 22.2.2010", "11", "19", "1.80", "5,741", "3,658", "3,183"], + ["Kerala", "23.2.2010 to 11.3.2010", "9", "17", "1.42", "3,559", "2,173", "855"], + ["Total", "", "47", "92", "11.81", "22,455", "19,584", "10,644"] ] data_lattice_copy_text = [ - ["Plan Type","County","Plan Name","Totals"], - ["GMC","Sacramento","Anthem Blue Cross","164,380"], - ["GMC","Sacramento","Health Net","126,547"], - ["GMC","Sacramento","Kaiser Foundation","74,620"], - ["GMC","Sacramento","Molina Healthcare","59,989"], - ["GMC","San Diego","Care 1st Health Plan","71,831"], - ["GMC","San Diego","Community Health Group","264,639"], - ["GMC","San Diego","Health Net","72,404"], - ["GMC","San Diego","Kaiser","50,415"], - ["GMC","San Diego","Molina Healthcare","206,430"], - ["GMC","Total GMC Enrollment","","1,091,255"], - ["COHS","Marin","Partnership Health Plan of CA","36,006"], - ["COHS","Mendocino","Partnership Health Plan of CA","37,243"], - ["COHS","Napa","Partnership Health Plan of CA","28,398"], - ["COHS","Solano","Partnership Health Plan of CA","113,220"], - ["COHS","Sonoma","Partnership Health Plan of CA","112,271"], - ["COHS","Yolo","Partnership Health Plan of CA","52,674"], - ["COHS","Del Norte","Partnership Health Plan of CA","11,242"], - ["COHS","Humboldt","Partnership Health Plan of CA","49,911"], - ["COHS","Lake","Partnership Health Plan of CA","29,149"], - ["COHS","Lassen","Partnership Health Plan of CA","7,360"], - ["COHS","Modoc","Partnership Health Plan of CA","2,940"], - ["COHS","Shasta","Partnership Health Plan of CA","61,763"], - ["COHS","Siskiyou","Partnership Health Plan of CA","16,715"], - ["COHS","Trinity","Partnership Health Plan of CA","4,542"], - ["COHS","Merced","Central California Alliance for Health","123,907"], - ["COHS","Monterey","Central California Alliance for Health","147,397"], - ["COHS","Santa Cruz","Central California Alliance for Health","69,458"], - ["COHS","Santa Barbara","CenCal","117,609"], - ["COHS","San Luis Obispo","CenCal","55,761"], - ["COHS","Orange","CalOptima","783,079"], - ["COHS","San Mateo","Health Plan of San Mateo","113,202"], - ["COHS","Ventura","Gold Coast Health Plan","202,217"], - ["COHS","Total COHS Enrollment","","2,176,064"], - ["Subtotal for Two-Plan, Regional Model, GMC and COHS","","","10,132,022"], - ["PCCM","Los Angeles","AIDS Healthcare Foundation","828"], - ["PCCM","San Francisco","Family Mosaic","25"], - ["PCCM","Total PHP Enrollment","","853"], - ["All Models Total Enrollments","","","10,132,875"], - ["Source: Data Warehouse 12/14/15","","",""] + ["Plan Type", "County", "Plan Name", "Totals"], + ["GMC", "Sacramento", "Anthem Blue Cross", "164,380"], + ["GMC", "Sacramento", "Health Net", "126,547"], + ["GMC", "Sacramento", "Kaiser Foundation", "74,620"], + ["GMC", "Sacramento", "Molina Healthcare", "59,989"], + ["GMC", "San Diego", "Care 1st Health Plan", "71,831"], + ["GMC", "San Diego", "Community Health Group", "264,639"], + ["GMC", "San Diego", "Health Net", "72,404"], + ["GMC", "San Diego", "Kaiser", "50,415"], + ["GMC", "San Diego", "Molina Healthcare", "206,430"], + ["GMC", "Total GMC Enrollment", "", "1,091,255"], + ["COHS", "Marin", "Partnership Health Plan of CA", "36,006"], + ["COHS", "Mendocino", "Partnership Health Plan of CA", "37,243"], + ["COHS", "Napa", "Partnership Health Plan of CA", "28,398"], + ["COHS", "Solano", "Partnership Health Plan of CA", "113,220"], + ["COHS", "Sonoma", "Partnership Health Plan of CA", "112,271"], + ["COHS", "Yolo", "Partnership Health Plan of CA", "52,674"], + ["COHS", "Del Norte", "Partnership Health Plan of CA", "11,242"], + ["COHS", "Humboldt", "Partnership Health Plan of CA", "49,911"], + ["COHS", "Lake", "Partnership Health Plan of CA", "29,149"], + ["COHS", "Lassen", "Partnership Health Plan of CA", "7,360"], + ["COHS", "Modoc", "Partnership Health Plan of CA", "2,940"], + ["COHS", "Shasta", "Partnership Health Plan of CA", "61,763"], + ["COHS", "Siskiyou", "Partnership Health Plan of CA", "16,715"], + ["COHS", "Trinity", "Partnership Health Plan of CA", "4,542"], + ["COHS", "Merced", "Central California Alliance for Health", "123,907"], + ["COHS", "Monterey", "Central California Alliance for Health", "147,397"], + ["COHS", "Santa Cruz", "Central California Alliance for Health", "69,458"], + ["COHS", "Santa Barbara", "CenCal", "117,609"], + ["COHS", "San Luis Obispo", "CenCal", "55,761"], + ["COHS", "Orange", "CalOptima", "783,079"], + ["COHS", "San Mateo", "Health Plan of San Mateo", "113,202"], + ["COHS", "Ventura", "Gold Coast Health Plan", "202,217"], + ["COHS", "Total COHS Enrollment", "", "2,176,064"], + ["Subtotal for Two-Plan, Regional Model, GMC and COHS", "", "", "10,132,022"], + ["PCCM", "Los Angeles", "AIDS Healthcare Foundation", "828"], + ["PCCM", "San Francisco", "Family Mosaic", "25"], + ["PCCM", "Total PHP Enrollment", "", "853"], + ["All Models Total Enrollments", "", "", "10,132,875"], + ["Source: Data Warehouse 12/14/15", "", "", ""] +] + +data_lattice_shift_text_left_top = [ + ["Investigations", "No. ofHHs", "Age/Sex/Physiological Group", "Preva-lence", "C.I*", "RelativePrecision", "Sample sizeper State"], + ["Anthropometry", "2400", "All the available individuals", "", "", "", ""], + ["Clinical Examination", "", "", "", "", "", ""], + ["History of morbidity", "", "", "", "", "", ""], + ["Diet survey", "1200", "All the individuals partaking meals in the HH", "", "", "", ""], + ["Blood Pressure #", "2400", "Men (≥ 18yrs)", "10%", "95%", "20%", "1728"], + ["", "", "Women (≥ 18 yrs)", "", "", "", "1728"], + ["Fasting blood glucose", "2400", "Men (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["", "", "Women (≥ 18 yrs)", "", "", "", "1825"], + ["Knowledge &Practices on HTN &DM", "2400", "Men (≥ 18 yrs)", "-", "-", "-", "1728"], + ["", "2400", "Women (≥ 18 yrs)", "-", "-", "-", "1728"] +] + +data_lattice_shift_text_disable = [ + ["Investigations", "No. ofHHs", "Age/Sex/Physiological Group", "Preva-lence", "C.I*", "RelativePrecision", "Sample sizeper State"], + ["Anthropometry", "", "", "", "", "", ""], + ["Clinical Examination", "2400", "", "All the available individuals", "", "", ""], + ["History of morbidity", "", "", "", "", "", ""], + ["Diet survey", "1200", "", "All the individuals partaking meals in the HH", "", "", ""], + ["", "", "Men (≥ 18yrs)", "", "", "", "1728"], + ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", "1728"], + ["", "", "Men (≥ 18 yrs)", "", "", "", "1825"], + ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["Knowledge &Practices on HTN &", "2400", "Men (≥ 18 yrs)", "-", "-", "-", "1728"], + ["DM", "2400", "Women (≥ 18 yrs)", "-", "-", "-", "1728"] +] + +data_lattice_shift_text_right_bottom = [ + ["Investigations", "No. ofHHs", "Age/Sex/Physiological Group", "Preva-lence", "C.I*", "RelativePrecision", "Sample sizeper State"], + ["Anthropometry", "", "", "", "", "", ""], + ["Clinical Examination", "", "", "", "", "", ""], + ["History of morbidity", "2400", "", "", "", "", "All the available individuals"], + ["Diet survey", "1200", "", "", "", "", "All the individuals partaking meals in the HH"], + ["", "", "Men (≥ 18yrs)", "", "", "", "1728"], + ["Blood Pressure #", "2400", "Women (≥ 18 yrs)", "10%", "95%", "20%", "1728"], + ["", "", "Men (≥ 18 yrs)", "", "", "", "1825"], + ["Fasting blood glucose", "2400", "Women (≥ 18 yrs)", "5%", "95%", "20%", "1825"], + ["", "2400", "Men (≥ 18 yrs)", "-", "-", "-", "1728"], + ["Knowledge &Practices on HTN &DM", "2400", "Women (≥ 18 yrs)", "-", "-", "-", "1728"] ] \ No newline at end of file diff --git a/tests/files/superscript.pdf b/tests/files/superscript.pdf new file mode 100755 index 0000000000000000000000000000000000000000..855a3bdebd6b2036e46d0f96cbd526fa951aec44 GIT binary patch literal 75643 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 z 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 L7uPmE0Acw*v{cJA literal 0 HcmV?d00001 diff --git a/tests/test_cli.py b/tests/test_cli.py index 4d1b7d9..da572dd 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -50,3 +50,30 @@ def test_cli_stream(): result = runner.invoke(cli, ['--output', outfile, 'stream', infile]) format_error = 'Please specify output file format using --format' assert format_error in result.output + + +def test_cli_output_format(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, 'health.pdf') + outfile = os.path.join(tempdir, 'health.{}') + runner = CliRunner() + + # json + result = runner.invoke(cli, ['--format', 'json', '--output', outfile.format('json'), + 'stream', infile]) + assert result.exit_code == 0 + + # excel + result = runner.invoke(cli, ['--format', 'excel', '--output', outfile.format('xlsx'), + 'stream', infile]) + assert result.exit_code == 0 + + # html + result = runner.invoke(cli, ['--format', 'html', '--output', outfile.format('html'), + 'stream', infile]) + assert result.exit_code == 0 + + # zip + result = runner.invoke(cli, ['--zip', '--format', 'csv', '--output', outfile.format('csv'), + 'stream', infile]) + assert result.exit_code == 0 \ No newline at end of file diff --git a/tests/test_common.py b/tests/test_common.py index afcb611..d18090d 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -12,8 +12,25 @@ testdir = os.path.dirname(os.path.abspath(__file__)) testdir = os.path.join(testdir, "files") +def test_parsing_report(): + parsing_report = { + 'accuracy': 99.02, + 'whitespace': 12.24, + 'order': 1, + 'page': 1 + } + + filename = os.path.join(testdir, "foo.pdf") + tables = camelot.read_pdf(filename) + assert tables[0].parsing_report == parsing_report + + def test_stream(): - pass + df = pd.DataFrame(data_stream) + + filename = os.path.join(testdir, "health.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + assert df.equals(tables[0].df) def test_stream_table_rotated(): @@ -29,7 +46,7 @@ def test_stream_table_rotated(): def test_stream_table_area(): - df = pd.DataFrame(data_stream_table_area_single) + df = pd.DataFrame(data_stream_table_area) filename = os.path.join(testdir, "tabula/us-007.pdf") tables = camelot.read_pdf(filename, flavor="stream", table_area=["320,500,573,335"]) @@ -45,6 +62,23 @@ def test_stream_columns(): assert df.equals(tables[0].df) +def test_stream_split_text(): + df = pd.DataFrame(data_stream_split_text) + + filename = os.path.join(testdir, "tabula/m27.pdf") + tables = camelot.read_pdf( + filename, flavor="stream", columns=["72,95,209,327,442,529,566,606,683"], split_text=True) + assert df.equals(tables[0].df) + + +def test_stream_flag_size(): + df = pd.DataFrame(data_stream_flag_size) + + filename = os.path.join(testdir, "superscript.pdf") + tables = camelot.read_pdf(filename, flavor="stream", flag_size=True) + assert df.equals(tables[0].df) + + def test_lattice(): df = pd.DataFrame(data_lattice) @@ -66,6 +100,14 @@ def test_lattice_table_rotated(): assert df.equals(tables[0].df) +def test_lattice_table_area(): + df = pd.DataFrame(data_lattice_table_area) + + filename = os.path.join(testdir, "twotables_2.pdf") + tables = camelot.read_pdf(filename, table_area=["80,693,535,448"]) + assert df.equals(tables[0].df) + + def test_lattice_process_background(): df = pd.DataFrame(data_lattice_process_background) @@ -79,4 +121,20 @@ def test_lattice_copy_text(): filename = os.path.join(testdir, "row_span_1.pdf") tables = camelot.read_pdf(filename, line_size_scaling=60, copy_text="v") - assert df.equals(tables[0].df) \ No newline at end of file + assert df.equals(tables[0].df) + + +def test_lattice_shift_text(): + df_lt = pd.DataFrame(data_lattice_shift_text_left_top) + df_disable = pd.DataFrame(data_lattice_shift_text_disable) + df_rb = pd.DataFrame(data_lattice_shift_text_right_bottom) + + filename = os.path.join(testdir, "column_span_2.pdf") + tables = camelot.read_pdf(filename, line_size_scaling=40) + assert df_lt.equals(tables[0].df) + + tables = camelot.read_pdf(filename, line_size_scaling=40, shift_text=['']) + assert df_disable.equals(tables[0].df) + + tables = camelot.read_pdf(filename, line_size_scaling=40, shift_text=['r', 'b']) + assert df_rb.equals(tables[0].df) \ No newline at end of file diff --git a/tests/test_plotting.py b/tests/test_plotting.py deleted file mode 100755 index 7c68785..0000000 --- a/tests/test_plotting.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- \ No newline at end of file