Code Monkey home page Code Monkey logo

camelot's People

Contributors

christinegarcia avatar davidkong0987 avatar dimitern avatar eamanu avatar gison93 avatar himanshu-sikaria avatar johnnymetz avatar jonathanlloyd avatar kolanich avatar navinpai avatar oshawk avatar pecey avatar pqrth avatar rbares avatar suyashb95 avatar symroe avatar tksumanth1994 avatar updbqn avatar vaibhavmule avatar vinayak-mehta avatar vmesel avatar yatintaluja avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

camelot's Issues

Replace imagemagick with ghostscript

imagemagick uses ghostscript for PDF->PNG conversion. However, it calls gs twice, first for PDF->PS and then PS->PNG. According to this SO answer it doesn't keep quality in first step. gs can do PDF->PNG in one go and with better quality. (checked this on some PDFs in which more joints were being detected #51)

Improve image generation

Currently, sometimes due to poor image quality*, extra lines are detected which leads to more/less joints contributing to table building. For dealing with more joints, a filter based on line length can be added. For less joints, a better quality image by tweaking Wand parameters, or using heuristics like merging close contours could be done.

Fix magic grid extension

In Stream, the table boundary is taken as (0, width) and (0, height) where width and height are PDF dimensions. This should be changed to (x0 of first text object, x1 of last text object on x-axis) and (y0 of first text object, y1 of last text object on y-axis) respectively because logic.

troughs vs. text for stream

again, two ways of getting to the grid finally for using the stream method, either you analyse the text to get to vertices OR analyse the blank spaces to get to vertices.
will be parameterised, by default the stream method should utilize both to get to a final set of vertices.

Improve logging

Current logs for such cases are of the form WARNING:root:Text did not fit any column. which don't provide any details.

Can initializing Stream column generation be improved?

Currently, the list of x-axis projections of text objects is sorted in (-y, x) style. These projections are then sequentially merged based on overlaps. This may fail when the projection of the last text object in a column extends to projection of the first text object in the next column, as it will merge the two columns into one. A better way to do this would be to group text objects into columns based on their list index and only merge their boundaries, though more discussion is required.

Informative output log

The output log should contain more information like the number of tables found, display any tables that couldn't be parsed etc.

Indicate the presence of lines explicitly in output

In case of tables where there are insufficient lines to demarcate all cells, the relatively smaller lines should be shown in the output as rows or columns of cells filled with the word line, just to help out someone in post processing.

Make stats more usable

Use-cases:

  1. Help the user drop tables in an ETL workflow based on parsing accuracy, whitespace in table cells.

Add option for batch input

For example,

camelot method pdf_dir/

or

camelot method *.pdf

Initially the files would be processed sequentially, but in the future, support for distributed processing should be implemented.

Replace Lattice chars with textlines

When filling chars in cells after sorting them according to their coordinates, 6th gets filled as th6. By replacing chars with textlines, which are made by grouping chars, we can get 6th as output. Though we need to take care of splitting textlines if they span across multiple cells. There should also be an option in both methods to specify whether textlines should be splitted if they span across multiple cells.

Deprecate joint tolerance in Lattice

jtol is used to take care of any errors that might arise while converting from image coordinate space to the pdf coordinate space, converting line contours to lines. There is no need for it to be user configurable.

Tolerance parameter for overlap and its cascading effect

Will be used for generating better grid coordinates for stream. Happens within the set of rows with mode number of columns and the overlap will lead to increase or decrease in the number of columns which stream guesses. We don't go beyond this 1-pass in the recursion.

Shift text up in hybrid spanning cells

Shift text up based on the presence of horizontal lines and some metric based on blank rows. If the vertical lines are not present then, Stream generated columns/user given separators should be used.

For example:

Process partial grid using lattice itself

Can process a partial grid using lattice method if the grid generation is done using hough but will need to specify some version of a bounding box calculation of which is already done using contours.
Division of the page will be needed pre-running the hough transform.

Port to Python 3

Have to figure out if the following dependencies work as expected, in Python 3:

Thinking of starting with using things from __future__ wherever possible (mostly print, division and unicode_literals), and create a release for Python 2. That should make it easy for us to create a Python 3 release once the deps are sorted.

PDFMiner sanity check

Check if the LTObjects hierarchy is changed when modifying margins. Also, see how PDFMiner generates newlines and spaces.

Improve documentation

This thread is for discussion around documentation, what to add/improve, where to host etc.

Configuration to guide the morph transform

Cases where the user is aware of which section of PDF houses the interesting things (tables here mostly), a simple configuration option to guide the image processing will reduce run-times further.
For example - when half of the PDF is blank, no need to process those pixels

Process pages in chunks

When loading a lot of pages (~42000) at once, memory gets filled up quickly and parsing stalls. A way to solve this would be to process pages in chunks. (think of generators) Or using multiprocessing maybe. @sharky93 Would you like to add something?

Add Build/CI

This thread is for discussion about what CI tool to use.

Tolerance parameter for assigning text object into cell for Stream

Currently, LTTextLH are assigned to cells based on their x0 coord. Additionally, the area overlap between the LTTextLH and cell could be used for better assignment. A tolerance parameter for minimum area overlap required for assignment into a cell can be added. For example (see image), it makes sense to add the third text box to column 2 instead of 1. @sharky93

Needs documentation

A documentation explaining the working, installation instructions etc. should be there. README should also be improved.

Autodetect bounding box for Stream

This will help in cases where a pdf page has two or more tables with a box outline, but without internal lines to demarcate cells. Need to think on how to integrate find_table_contours from imgproc with Stream column generation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.