community[minor]: 05 - Refactoring PyPDFium2 parser (#29625)

This is one part of a larger Pull Request (PR) that is too large to be
submitted all at once. This specific part focuses on updating the
PyPDFium2 parser.

For more details, see
https://github.com/langchain-ai/langchain/pull/28970.
This commit is contained in:
Philippe PRADOS
2025-02-08 03:31:12 +01:00
committed by GitHub
parent 723031d548
commit beb75b2150
6 changed files with 1281 additions and 126 deletions

View File

@@ -12,7 +12,6 @@ from langchain_community.document_loaders.blob_loaders import Blob
from langchain_community.document_loaders.parsers import (
BaseImageBlobParser,
PDFPlumberParser,
PyPDFium2Parser,
)
if TYPE_CHECKING:
@@ -96,12 +95,6 @@ def _assert_with_duplicate_parser(parser: BaseBlobParser, dedupe: bool = False)
assert "11000000 SSeerriieess" == docs[0].page_content.split("\n")[0]
def test_pypdfium2_parser() -> None:
"""Test PyPDFium2 parser."""
# Does not follow defaults to split by page.
_assert_with_parser(PyPDFium2Parser())
def test_pdfplumber_parser() -> None:
"""Test PDFPlumber parser."""
_assert_with_parser(PDFPlumberParser())
@@ -109,11 +102,6 @@ def test_pdfplumber_parser() -> None:
_assert_with_duplicate_parser(PDFPlumberParser(dedupe=True), dedupe=True)
def test_extract_images_text_from_pdf_pypdfium2parser() -> None:
"""Test extract image from pdf and recognize text with rapid ocr - PyPDFium2Parser""" # noqa: E501
_assert_with_parser(PyPDFium2Parser(extract_images=True))
class EmptyImageBlobParser(BaseImageBlobParser):
def _analyze_image(self, img: "Image") -> str:
return "Hello world"
@@ -128,6 +116,7 @@ class EmptyImageBlobParser(BaseImageBlobParser):
[
("PDFMinerParser", {}),
("PyMuPDFParser", {}),
("PyPDFium2Parser", {}),
("PyPDFParser", {"extraction_mode": "plain"}),
("PyPDFParser", {"extraction_mode": "layout"}),
],
@@ -157,6 +146,7 @@ def test_mode_and_extract_images_variations(
[
("PDFMinerParser", {}),
("PyMuPDFParser", {}),
("PyPDFium2Parser", {}),
("PyPDFParser", {"extraction_mode": "plain"}),
("PyPDFParser", {"extraction_mode": "layout"}),
],

View File

@@ -9,7 +9,6 @@ from langchain_community.document_loaders import (
AmazonTextractPDFLoader,
MathpixPDFLoader,
PDFMinerPDFasHTMLLoader,
PyPDFium2Loader,
UnstructuredPDFLoader,
)
@@ -56,21 +55,6 @@ def test_pdfminer_pdf_as_html_loader() -> None:
assert len(docs) == 1
def test_pypdfium2_loader() -> None:
"""Test PyPDFium2Loader."""
file_path = Path(__file__).parent.parent / "examples/hello.pdf"
loader = PyPDFium2Loader(file_path)
docs = loader.load()
assert len(docs) == 1
file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf"
loader = PyPDFium2Loader(file_path)
docs = loader.load()
assert len(docs) == 16
@pytest.mark.skipif(
not os.environ.get("MATHPIX_API_KEY"), reason="Mathpix API key not found"
)
@@ -184,6 +168,7 @@ def test_amazontextract_loader_failures() -> None:
[
("PDFMinerLoader", {}),
("PyMuPDFLoader", {}),
("PyPDFium2Loader", {}),
("PyPDFLoader", {}),
],
)
@@ -206,8 +191,6 @@ def test_standard_parameters(
images_parser=None,
images_inner_format="text",
password=None,
extract_tables=None,
extract_tables_settings=None,
)
docs = loader.load()
assert len(docs) == 16