From 87a2f4fdc9590e5df90a813df5bf27d4b7eb983c Mon Sep 17 00:00:00 2001 From: Vinayak Mehta Date: Wed, 12 Dec 2018 07:36:07 +0530 Subject: [PATCH 1/4] Add textedge plot type --- camelot/cli.py | 2 +- camelot/parsers/lattice.py | 1 + camelot/parsers/stream.py | 3 ++ camelot/plotting.py | 75 +++++++++++++++++++++++++++++++++++--- 4 files changed, 75 insertions(+), 6 deletions(-) diff --git a/camelot/cli.py b/camelot/cli.py index eaae955..1b995aa 100644 --- a/camelot/cli.py +++ b/camelot/cli.py @@ -138,7 +138,7 @@ def lattice(c, *args, **kwargs): @click.option('-c', '--col_close_tol', default=0, help='Tolerance parameter' ' used to combine text horizontally, to generate columns.') @click.option('-plot', '--plot_type', - type=click.Choice(['text', 'grid']), + type=click.Choice(['text', 'grid', 'contour', 'textedge']), help='Plot elements found on PDF page for visual debugging.') @click.argument('filepath', type=click.Path(exists=True)) @pass_config diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index 22c77e8..14d8f6c 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -341,6 +341,7 @@ class Lattice(BaseParser): table._text = _text table._image = (self.image, self.table_bbox_unscaled) table._segments = (self.vertical_segments, self.horizontal_segments) + table._textedges = None return table diff --git a/camelot/parsers/stream.py b/camelot/parsers/stream.py index 3b9c068..b6785df 100644 --- a/camelot/parsers/stream.py +++ b/camelot/parsers/stream.py @@ -263,6 +263,7 @@ class Stream(BaseParser): textedges.generate(textlines) # select relevant edges relevant_textedges = textedges.get_relevant() + self.textedges.extend(relevant_textedges) # guess table areas using textlines and relevant edges table_bbox = textedges.get_table_areas(textlines, relevant_textedges) # treat whole page as table area if no table areas found @@ -272,6 +273,7 @@ class Stream(BaseParser): return table_bbox def _generate_table_bbox(self): + self.textedges = [] if self.table_areas is not None: table_bbox = {} for area in self.table_areas: @@ -378,6 +380,7 @@ class Stream(BaseParser): table._text = _text table._image = None table._segments = None + table._textedges = self.textedges return table diff --git a/camelot/plotting.py b/camelot/plotting.py index 3b91cee..1320267 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -33,7 +33,10 @@ class PlotMethods(object): if not _HAS_MPL: raise ImportError('matplotlib is required for plotting.') - if table.flavor == 'stream' and kind in ['contour', 'joint', 'line']: + if table.flavor == 'lattice' and kind in ['textedge']: + raise NotImplementedError("Lattice flavor does not support kind='{}'".format( + kind)) + elif table.flavor == 'stream' and kind in ['joint', 'line']: raise NotImplementedError("Stream flavor does not support kind='{}'".format( kind)) @@ -114,20 +117,82 @@ class PlotMethods(object): fig : matplotlib.fig.Figure """ - img, table_bbox = table._image + try: + img, table_bbox = table._image + _FOR_LATTICE = True + except TypeError: + img, table_bbox = (None, {table._bbox: None}) + _FOR_LATTICE = False fig = plt.figure() ax = fig.add_subplot(111, aspect='equal') + + xs, ys = [], [] + if not _FOR_LATTICE: + for t in table._text: + xs.extend([t[0], t[2]]) + ys.extend([t[1], t[3]]) + ax.add_patch( + patches.Rectangle( + (t[0], t[1]), + t[2] - t[0], + t[3] - t[1], + color='blue' + ) + ) + for t in table_bbox.keys(): ax.add_patch( patches.Rectangle( (t[0], t[1]), t[2] - t[0], t[3] - t[1], - fill=None, - edgecolor='red' + fill=False, + color='red' ) ) - ax.imshow(img) + if not _FOR_LATTICE: + xs.extend([t[0], t[2]]) + ys.extend([t[1], t[3]]) + ax.set_xlim(min(xs) - 10, max(xs) + 10) + ax.set_ylim(min(ys) - 10, max(ys) + 10) + + if _FOR_LATTICE: + ax.imshow(img) + return fig + + def textedge(self, table): + """Generates a plot for relevant textedges. + + Parameters + ---------- + table : camelot.core.Table + + Returns + ------- + fig : matplotlib.fig.Figure + + """ + fig = plt.figure() + ax = fig.add_subplot(111, aspect='equal') + xs, ys = [], [] + for t in table._text: + xs.extend([t[0], t[2]]) + ys.extend([t[1], t[3]]) + ax.add_patch( + patches.Rectangle( + (t[0], t[1]), + t[2] - t[0], + t[3] - t[1], + color='blue' + ) + ) + ax.set_xlim(min(xs) - 10, max(xs) + 10) + ax.set_ylim(min(ys) - 10, max(ys) + 10) + + for te in table._textedges: + ax.plot([te.x, te.x], + [te.y0, te.y1]) + return fig def joint(self, table): From b56d2246ad8f3ee39b9db0076ffc559a579a6678 Mon Sep 17 00:00:00 2001 From: Vinayak Mehta Date: Wed, 12 Dec 2018 08:09:48 +0530 Subject: [PATCH 2/4] Add new plot type tests --- .../test_lattice_contour_plot.png | Bin 0 -> 34094 bytes .../test_stream_contour_plot.png | Bin 0 -> 13521 bytes .../baseline_plots/test_textedge_plot.png | Bin 0 -> 17978 bytes tests/test_plotting.py | 18 +++++++++++++++++- 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/files/baseline_plots/test_lattice_contour_plot.png create mode 100644 tests/files/baseline_plots/test_stream_contour_plot.png create mode 100644 tests/files/baseline_plots/test_textedge_plot.png diff --git a/tests/files/baseline_plots/test_lattice_contour_plot.png b/tests/files/baseline_plots/test_lattice_contour_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..57b39620e37c4fe51e1396af240658aa73955494 GIT binary patch literal 34094 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�aY!gywdD3bdpKO(l<4#_x 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 CtK;JU literal 0 HcmV?d00001 diff --git a/tests/files/baseline_plots/test_stream_contour_plot.png b/tests/files/baseline_plots/test_stream_contour_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e77f77c06075cd2be7ccb2c2fbbf0b50aa4025 GIT binary patch literal 13521 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 Dfuj$d literal 0 HcmV?d00001 diff --git a/tests/files/baseline_plots/test_textedge_plot.png b/tests/files/baseline_plots/test_textedge_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..63fc23664a941e856f3e8b1d95825ab67175eeb0 GIT binary patch literal 17978 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 ZH`May{61Zp1ej#lIX%PE*}C@k{tu9|tfc?| literal 0 HcmV?d00001 diff --git a/tests/test_plotting.py b/tests/test_plotting.py index eeea81a..f267e29 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -29,12 +29,20 @@ def test_grid_plot(): @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) -def test_contour_plot(): +def test_lattice_contour_plot(): filename = os.path.join(testdir, "foo.pdf") tables = camelot.read_pdf(filename) return camelot.plot(tables[0], kind='contour') +@pytest.mark.mpl_image_compare( + baseline_dir="files/baseline_plots", remove_text=True) +def test_stream_contour_plot(): + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor='stream') + return camelot.plot(tables[0], kind='contour') + + @pytest.mark.mpl_image_compare( baseline_dir="files/baseline_plots", remove_text=True) def test_line_plot(): @@ -49,3 +57,11 @@ def test_joint_plot(): filename = os.path.join(testdir, "foo.pdf") tables = camelot.read_pdf(filename) return camelot.plot(tables[0], kind='joint') + + +@pytest.mark.mpl_image_compare( + baseline_dir="files/baseline_plots", remove_text=True) +def test_textedge_plot(): + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor='stream') + return camelot.plot(tables[0], kind='textedge') From 656c4e09bc9d6d46878422b5619d55687b5572e1 Mon Sep 17 00:00:00 2001 From: Vinayak Mehta Date: Wed, 12 Dec 2018 08:18:49 +0530 Subject: [PATCH 3/4] Update docs --- docs/_static/png/plot_textedge.png | Bin 0 -> 69180 bytes docs/user/advanced.rst | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100755 docs/_static/png/plot_textedge.png diff --git a/docs/_static/png/plot_textedge.png b/docs/_static/png/plot_textedge.png new file mode 100755 index 0000000000000000000000000000000000000000..fb2f36b141c71a539639e09671e59c716483491d GIT binary patch literal 69180 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, i.e. when ``flavor='lattice'``. +.. note:: 'line' and 'joint' can only be used with :ref:`Lattice ` and 'textedge' can only be used with :ref:`Stream `. Let's generate a plot for each type using this `PDF <../_static/pdf/foo.pdf>`__ as an example. First, let's get all the tables out. @@ -143,6 +144,23 @@ Finally, let's plot all line intersections present on the table's PDF page. :alt: A plot of all line intersections on a PDF page :align: left +textedge +^^^^^^^^ + +You can also visualize the textedges found on a page by specifying ``kind='textedge'``. To know more about what a "textedge" is, you can see pages 20, 35 and 40 of `Anssi Nurminen's master's thesis `_. + +:: + + >>> camelot.plot(tables[0], kind='textedge') + >>> plt.show() + +.. figure:: ../_static/png/plot_textedge.png + :height: 674 + :width: 1366 + :scale: 50% + :alt: A plot of relevant textedges on a PDF page + :align: left + Specify table areas ------------------- From 92e02fa03d9bc7903806cb36de5d730969500f09 Mon Sep 17 00:00:00 2001 From: Vinayak Mehta Date: Wed, 12 Dec 2018 08:26:59 +0530 Subject: [PATCH 4/4] Update HISTORY.md --- HISTORY.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index 4cf77ba..878dc08 100755 --- a/HISTORY.md +++ b/HISTORY.md @@ -4,6 +4,18 @@ Release History master ------ +**Improvements** + +* [#207](https://github.com/socialcopsdev/camelot/issues/207) Add a plot type for Stream text edges and detected table areas. [#224](https://github.com/socialcopsdev/camelot/pull/224) by Vinayak Mehta. + +**Bugfixes** + +* [#217](https://github.com/socialcopsdev/camelot/issues/217) Fix IndexError when scale is large. + +**Documentation** + +* Add pdfplumber comparison and update Tabula (stream) comparison. Check out the [wiki page](https://github.com/socialcopsdev/camelot/wiki/Comparison-with-other-PDF-Table-Extraction-libraries-and-tools). + 0.4.1 (2018-12-05) ------------------