From 43c8fc8557528463c99598049b7005ae96ab8084 Mon Sep 17 00:00:00 2001 From: jwyawney Date: Tue, 22 Feb 2022 15:20:26 -0500 Subject: [PATCH] Ignore empty characters when analyzing layout (#689) * Adding in checks for spurious lines that contain either only spaces or new line characters * Added spurious lines check and unit tests * Updated CHANGELOG.md with changes * Simplify code * Simplify code * Simplify code * Remove changes to lines that are not actually changed * Format import * Improve CHANGELOG.md * Improve CHANGELOG.md * Fix cicd * Blacken Co-authored-by: Pieter Marsman --- CHANGELOG.md | 1 + pdfminer/layout.py | 3 ++ samples/contrib/issue-449-horizontal.pdf | Bin 0 -> 34334 bytes samples/contrib/issue-449-vertical.pdf | Bin 0 -> 34505 bytes tests/test_layout.py | 39 +++++++++++++++++++++++ 5 files changed, 43 insertions(+) create mode 100644 samples/contrib/issue-449-horizontal.pdf create mode 100644 samples/contrib/issue-449-vertical.pdf diff --git a/CHANGELOG.md b/CHANGELOG.md index c79674c..2e30bb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix extraction of jbig2 files, which was producing invalid files ([#652](https://github.com/pdfminer/pdfminer.six/pull/653)) - Crash in `pdf2txt.py --boxes-flow=disabled` ([#682](https://github.com/pdfminer/pdfminer.six/pull/682)) - Only use xref fallback if `PDFNoValidXRef` is raised and `fallback` is True ([#684](https://github.com/pdfminer/pdfminer.six/pull/684)) +- Ignore empty characters when analyzing layout ([#499](https://github.com/pdfminer/pdfminer.six/pull/499)) ### Changed - Replace warnings.warn with logging.Logger.warning in line with [recommended use](https://docs.python.org/3/howto/logging.html#when-to-use-logging) ([#673](https://github.com/pdfminer/pdfminer.six/pull/673)) diff --git a/pdfminer/layout.py b/pdfminer/layout.py index 3b84ce6..9196a88 100644 --- a/pdfminer/layout.py +++ b/pdfminer/layout.py @@ -504,6 +504,9 @@ class LTTextLine(LTTextContainer[TextLineElement]): ) -> List["LTTextLine"]: raise NotImplementedError + def is_empty(self) -> bool: + return super().is_empty() or self.get_text().isspace() + class LTTextLineHorizontal(LTTextLine): def __init__(self, word_margin: float) -> None: diff --git a/samples/contrib/issue-449-horizontal.pdf b/samples/contrib/issue-449-horizontal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..33e08a74da6da9e9c9b98c33016dcf20242f618c GIT binary patch literal 34334 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 Nm|2_-Nsx>|$YQ;bP%v_QwYIpAA7lR3r;W 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 literal 0 HcmV?d00001 diff --git a/tests/test_layout.py b/tests/test_layout.py index ce13fc9..fd393a4 100644 --- a/tests/test_layout.py +++ b/tests/test_layout.py @@ -1,12 +1,16 @@ import unittest +from pdfminer.high_level import extract_pages from pdfminer.layout import ( LTLayoutContainer, LAParams, LTTextLineHorizontal, LTTextLineVertical, + LTTextBoxHorizontal, + LTTextBoxVertical, ) from pdfminer.utils import Plane +from helpers import absolute_sample_path class TestGroupTextLines(unittest.TestCase): @@ -107,3 +111,38 @@ class TestFindNeigbors(unittest.TestCase): centrally_aligned_overlapping, ], ) + + +def test_pdf_with_empty_characters_horizontal(): + """Regression test for issue #449 + + See: https://github.com/pdfminer/pdfminer.six/pull/689 + + The page aggregator should separate the 3 horizontal lines in the + sample PDF. The used PDF sample has multiple explicit space characters + in between lines with text. + """ + path = absolute_sample_path("contrib/issue-449-horizontal.pdf") + pages = extract_pages(path) + textboxes = [ + textbox for textbox in next(pages) if isinstance(textbox, LTTextBoxHorizontal) + ] + assert len(textboxes) == 3 + + +def test_pdf_with_empty_characters_vertical(): + """Regression test for issue #449 + + See: https://github.com/pdfminer/pdfminer.six/pull/689 + + The page aggregator should separate the 3 horizontal lines in the + sample PDF. The used PDF sample has multiple explicit space characters + in between lines with text. + """ + path = absolute_sample_path("contrib/issue-449-vertical.pdf") + laparams = LAParams(detect_vertical=True) + pages = extract_pages(path, laparams=laparams) + textboxes = [ + textbox for textbox in next(pages) if isinstance(textbox, LTTextBoxVertical) + ] + assert len(textboxes) == 3