From df1d4d5054d57f0b828eef27af0fd0f7138c4bb7 Mon Sep 17 00:00:00 2001 From: Philippe Prados Date: Fri, 10 Jan 2025 13:45:02 +0100 Subject: [PATCH] Fix remarques --- libs/community/extended_testing_deps.txt | 1 + .../document_loaders/parsers/__init__.py | 10 +- .../document_loaders/parsers/images.py | 97 ++++++++++-------- .../document_loaders/parsers/pdf.py | 90 +++++++++++----- .../document_loaders/pdf.py | 18 ++-- .../document_loaders/parsers/test_images.py | 55 ++++++++++ .../parsers/test_pdf_parsers.py | 39 ++++--- .../document_loaders/test_images.py | 51 --------- .../document_loaders/test_pdf.py | 4 +- .../integration_tests/examples/building.jpg | Bin 0 -> 55349 bytes 10 files changed, 213 insertions(+), 152 deletions(-) create mode 100644 libs/community/tests/integration_tests/document_loaders/parsers/test_images.py delete mode 100644 libs/community/tests/integration_tests/document_loaders/test_images.py create mode 100644 libs/community/tests/integration_tests/examples/building.jpg diff --git a/libs/community/extended_testing_deps.txt b/libs/community/extended_testing_deps.txt index 975bbfb0b069b3..e6f0d13d3afd6b 100644 --- a/libs/community/extended_testing_deps.txt +++ b/libs/community/extended_testing_deps.txt @@ -66,6 +66,7 @@ praw>=7.7.1,<8 premai>=0.3.25,<0.4 psychicapi>=0.8.0,<0.9 pydantic>=2.7.4,<3 +pytesseract>=0.3.13 py-trello>=0.19.0,<0.20 pyjwt>=2.8.0,<3 pymupdf>=1.22.3,<2 diff --git a/libs/community/langchain_community/document_loaders/parsers/__init__.py b/libs/community/langchain_community/document_loaders/parsers/__init__.py index 790402dd3cf428..5f5a9f9d96f3cb 100644 --- a/libs/community/langchain_community/document_loaders/parsers/__init__.py +++ b/libs/community/langchain_community/document_loaders/parsers/__init__.py @@ -17,6 +17,11 @@ from langchain_community.document_loaders.parsers.html import ( BS4HTMLParser, ) + from langchain_community.document_loaders.parsers.images import ( + MultimodalBlobParser, + RapidOCRBlobParser, + TesseractBlobParser, + ) from langchain_community.document_loaders.parsers.language import ( LanguageParser, ) @@ -30,11 +35,6 @@ from langchain_community.document_loaders.parsers.vsdx import ( VsdxParser, ) - from langchain_community.document_loaders.parsers.images import ( - MultimodalBlobParser, - RapidOCRBlobParser, - TesseractBlobParser, - ) _module_lookup = { diff --git a/libs/community/langchain_community/document_loaders/parsers/images.py b/libs/community/langchain_community/document_loaders/parsers/images.py index 496131fafd0d5f..c34ee698fc0f5f 100644 --- a/libs/community/langchain_community/document_loaders/parsers/images.py +++ b/libs/community/langchain_community/document_loaders/parsers/images.py @@ -3,68 +3,80 @@ import io import logging from abc import abstractmethod +from typing import TYPE_CHECKING, Iterator, Literal -from PIL import Image -from typing import Iterator, Literal - -from langchain_community.document_loaders.base import BaseBlobParser -from langchain_community.document_loaders.blob_loaders import Blob +import numpy as np from langchain_core.documents import Document from langchain_core.language_models import BaseChatModel from langchain_core.messages import HumanMessage +if TYPE_CHECKING: + from PIL.Image import Image + +from langchain_community.document_loaders.base import BaseBlobParser +from langchain_community.document_loaders.blob_loaders import Blob + logger = logging.getLogger(__name__) class ImageBlobParser(BaseBlobParser): def __init__( - self, - *, - format: Literal["text", "markdown", "html"] = "text", + self, + *, + format: Literal["text", "markdown", "html"] = "text", ): self.format = format @abstractmethod - def _analyze_image(self, img: Image) -> str: + def _analyze_image(self, img: "Image") -> str: pass def lazy_parse(self, blob: Blob) -> Iterator[Document]: - with blob.as_bytes_io() as buf: - img = Image.open(buf) - content = self._analyze_image(img) - if content: - if self.format == "markdown": - content = content.replace("]", r"\\]") - content = f"![{content}](.)" - elif self.format == "html": - content = f'{html.escape(content, quote=True)}' - logger.debug("Image text: %s", content.replace("\n", "\\n")) - yield Document( - page_content=content, - metadata={"source": blob.source}, + try: + from PIL import Image as Img + + with blob.as_bytes_io() as buf: + img = Img.open(buf) + content = self._analyze_image(img) + if content: + if self.format == "markdown": + content = content.replace("]", r"\\]") + content = f"![{content}](.)" + elif self.format == "html": + content = f'{html.escape(content, quote=True)}' + logger.debug("Image text: %s", content.replace("\n", "\\n")) + yield Document( + page_content=content, + metadata={"source": blob.source}, + ) + except ImportError: + raise ImportError( + "`rapidocr-onnxruntime` package not found, please install it with " + "`pip install Pillow`" ) class RapidOCRBlobParser(ImageBlobParser): def __init__( - self, - *, - format: Literal["text", "markdown", "html"] = "text", + self, + *, + format: Literal["text", "markdown", "html"] = "text", ): super().__init__(format=format) self.ocr = None - def _analyze_image(self, img: Image) -> str: + def _analyze_image(self, img: "Image") -> str: if not self.ocr: try: from rapidocr_onnxruntime import RapidOCR + + self.ocr = RapidOCR() except ImportError: raise ImportError( "`rapidocr-onnxruntime` package not found, please install it with " "`pip install rapidocr-onnxruntime`" ) - self.ocr = RapidOCR() - ocr_result, _ = self.ocr(img) + ocr_result, _ = self.ocr(np.array(img)) # type: ignore content = "" if ocr_result: content = ("\n".join([text[1] for text in ocr_result])).strip() @@ -72,18 +84,16 @@ def _analyze_image(self, img: Image) -> str: class TesseractBlobParser(ImageBlobParser): - def __init__( - self, - *, - format: Literal["text", "markdown", "html"] = "text", - langs: list[str] = ["eng"], - + self, + *, + format: Literal["text", "markdown", "html"] = "text", + langs: list[str] = ["eng"], ): super().__init__(format=format) self.langs = langs - def _analyze_image(self, img: Image) -> str: + def _analyze_image(self, img: "Image") -> str: try: import pytesseract except ImportError: @@ -99,24 +109,23 @@ def _analyze_image(self, img: Image) -> str: "images for retrieval. " "These summaries will be embedded and used to retrieve the raw image. " "Give a concise summary of the image that is well optimized for retrieval " - "and extract all the text from the image.") + "and extract all the text from the image." +) class MultimodalBlobParser(ImageBlobParser): - def __init__( - self, - *, - format: Literal["text", "markdown", "html"] = "text", - model: BaseChatModel, - prompt: str = _prompt_images_to_description, - + self, + *, + format: Literal["text", "markdown", "html"] = "text", + model: BaseChatModel, + prompt: str = _prompt_images_to_description, ): super().__init__(format=format) self.model = model self.prompt = prompt - def _analyze_image(self, img: Image) -> str: + def _analyze_image(self, img: "Image") -> str: image_bytes = io.BytesIO() img.save(image_bytes, format="PNG") img_base64 = base64.b64encode(image_bytes.getvalue()).decode("utf-8") diff --git a/libs/community/langchain_community/document_loaders/parsers/pdf.py b/libs/community/langchain_community/document_loaders/parsers/pdf.py index 5933e3220737f3..d053528799ba19 100644 --- a/libs/community/langchain_community/document_loaders/parsers/pdf.py +++ b/libs/community/langchain_community/document_loaders/parsers/pdf.py @@ -2,18 +2,15 @@ from __future__ import annotations -import html import io import logging import threading import warnings from datetime import datetime -from urllib.parse import urlparse - -import numpy as np from typing import ( TYPE_CHECKING, Any, + Iterable, Iterator, Literal, Mapping, @@ -21,12 +18,17 @@ Sequence, Union, ) +from urllib.parse import urlparse + +import numpy as np +from langchain_core.documents import Document from langchain_community.document_loaders.base import BaseBlobParser from langchain_community.document_loaders.blob_loaders import Blob -from langchain_community.document_loaders.parsers.images import ImageBlobParser, \ - RapidOCRBlobParser -from langchain_core.documents import Document +from langchain_community.document_loaders.parsers.images import ( + ImageBlobParser, + RapidOCRBlobParser, +) if TYPE_CHECKING: import pdfminer @@ -53,6 +55,38 @@ "JBIG2Decode", ] + +def extract_from_images_with_rapidocr( + images: Sequence[Union[Iterable[np.ndarray], bytes]], +) -> str: + """Extract text from images with RapidOCR. + + Args: + images: Images to extract text from. + + Returns: + Text extracted from images. + + Raises: + ImportError: If `rapidocr-onnxruntime` package is not installed. + """ + try: + from rapidocr_onnxruntime import RapidOCR + except ImportError: + raise ImportError( + "`rapidocr-onnxruntime` package not found, please install it with " + "`pip install rapidocr-onnxruntime`" + ) + ocr = RapidOCR() + text = "" + for img in images: + result, _ = ocr(img) + if result: + result = [text[1] for text in result] + text += "\n".join(result) + return text + + logger = logging.getLogger(__name__) _FORMAT_IMAGE_STR = "\n\n{image_text}\n\n" @@ -60,9 +94,10 @@ _JOIN_TABLES = "\n" _DEFAULT_PAGE_DELIMITOR = "\n\f" -_STD_METADATA_KEYS={"source", "total_pages", "creationdate", "creator", "producer"} +_STD_METADATA_KEYS = {"source", "total_pages", "creationdate", "creator", "producer"} + -def _validate_metadata(metadata: dict[str, Any]) -> dict[str,Any]: +def _validate_metadata(metadata: dict[str, Any]) -> dict[str, Any]: """Validates the presence of at least the following keys: - source - page (if mode='page') @@ -73,7 +108,7 @@ def _validate_metadata(metadata: dict[str, Any]) -> dict[str,Any]: """ if not _STD_METADATA_KEYS.issubset(metadata.keys()): raise ValueError("The PDF parser must valorize the standard metadata.") - if not isinstance(metadata.get("page",0), int): + if not isinstance(metadata.get("page", 0), int): raise ValueError("The PDF metadata page must be a integer.") return metadata @@ -116,7 +151,10 @@ def _purge_metadata(metadata: dict[str, Any]) -> dict[str, Any]: return new_metadata -_PARAGRAPH_DELIMITOR = ["\n\n\n", "\n\n"] # To insert images or table in the middle of the page. +_PARAGRAPH_DELIMITOR = [ + "\n\n\n", + "\n\n", +] # To insert images or table in the middle of the page. def _merge_text_and_extras(extras: list[str], text_from_page: str) -> str: @@ -132,7 +170,7 @@ def _merge_text_and_extras(extras: list[str], text_from_page: str) -> str: """ def _recurs_merge_text_and_extras( - extras: list[str], text_from_page: str, recurs: bool + extras: list[str], text_from_page: str, recurs: bool ) -> Optional[str]: if extras: for delim in _PARAGRAPH_DELIMITOR: @@ -151,8 +189,9 @@ def _recurs_merge_text_and_extras( str_extras = "\n\n".join(filter(lambda x: x, extras)) if str_extras: all_extras = delim + str_extras - all_text = text_from_page[:pos] + all_extras + text_from_page[ - pos:] + all_text = ( + text_from_page[:pos] + all_extras + text_from_page[pos:] + ) break else: all_text = None @@ -171,7 +210,6 @@ def _recurs_merge_text_and_extras( return all_text - class ImagesPdfParser(BaseBlobParser): """Abstract interface for blob parsers with images_to_text.""" @@ -218,8 +256,7 @@ def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-ty ) def _extract_text_from_page(page: pypdf.PageObject) -> str: - """Extract text from image given the version of pypdf. - """ + """Extract text from image given the version of pypdf.""" if pypdf.__version__.startswith("3"): return page.extract_text() else: @@ -561,11 +598,11 @@ def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-ty for page in doc: all_text = self._get_page_content(doc, page, blob).strip() if self.mode == "page": - yield Document( page_content=all_text, - metadata=_validate_metadata(doc_metadata | - {"page": page.number}), + metadata=_validate_metadata( + doc_metadata | {"page": page.number} + ), ) else: full_content.append(all_text) @@ -658,17 +695,16 @@ def _extract_images_from_page( if self.images_parser: xref = img[0] pix = pymupdf.Pixmap(doc, xref) - image=np.frombuffer(pix.samples, dtype=np.uint8).reshape( - pix.height, pix.width, -1 - ) + image = np.frombuffer(pix.samples, dtype=np.uint8).reshape( + pix.height, pix.width, -1 + ) image_bytes = io.BytesIO() Image.fromarray(image).save(image_bytes, format="PNG") - blob=Blob.from_data(image_bytes.getvalue(), mime_type="image/png") + blob = Blob.from_data(image_bytes.getvalue(), mime_type="image/png") images.append(next(self.images_parser.lazy_parse(blob)).page_content) return _FORMAT_IMAGE_STR.format( - image_text=_JOIN_IMAGES.join(filter(None,images)) - ) - + image_text=_JOIN_IMAGES.join(filter(None, images)) + ) def _extract_tables_from_page(self, page: pymupdf.Page) -> str: """Extract tables from a PDF page. diff --git a/libs/community/langchain_community/document_loaders/pdf.py b/libs/community/langchain_community/document_loaders/pdf.py index f39c02fe921f8a..4af3aefdb8895a 100644 --- a/libs/community/langchain_community/document_loaders/pdf.py +++ b/libs/community/langchain_community/document_loaders/pdf.py @@ -7,9 +7,6 @@ from abc import ABC from io import StringIO from pathlib import Path, PurePath -from urllib.parse import urlparse - -import requests from typing import ( TYPE_CHECKING, Any, @@ -22,13 +19,21 @@ Union, cast, ) +from urllib.parse import urlparse + +import requests +from langchain_core.documents import Document +from langchain_core.utils import get_from_dict_or_env from langchain_community.document_loaders.base import BaseLoader from langchain_community.document_loaders.blob_loaders import Blob from langchain_community.document_loaders.dedoc import DedocBaseLoader -from langchain_community.document_loaders.parsers.images import ImageBlobParser, \ - RapidOCRBlobParser +from langchain_community.document_loaders.parsers.images import ( + ImageBlobParser, + RapidOCRBlobParser, +) from langchain_community.document_loaders.parsers.pdf import ( + _DEFAULT_PAGE_DELIMITOR, AmazonTextractPDFParser, DocumentIntelligenceParser, PDFMinerParser, @@ -36,11 +41,8 @@ PyMuPDFParser, PyPDFium2Parser, PyPDFParser, - _DEFAULT_PAGE_DELIMITOR, ) from langchain_community.document_loaders.unstructured import UnstructuredFileLoader -from langchain_core.documents import Document -from langchain_core.utils import get_from_dict_or_env if TYPE_CHECKING: from textractor.data.text_linearization_config import TextLinearizationConfig diff --git a/libs/community/tests/integration_tests/document_loaders/parsers/test_images.py b/libs/community/tests/integration_tests/document_loaders/parsers/test_images.py new file mode 100644 index 00000000000000..fe899fb21f80c5 --- /dev/null +++ b/libs/community/tests/integration_tests/document_loaders/parsers/test_images.py @@ -0,0 +1,55 @@ +import re +from pathlib import Path +from typing import Any, Type + +import pytest +from langchain_core.documents.base import Blob +from langchain_openai import ChatOpenAI + +from langchain_community.document_loaders.parsers.images import ( + MultimodalBlobParser, + RapidOCRBlobParser, + TesseractBlobParser, +) + +path_base = Path(__file__).parent.parent.parent +building_image = Blob.from_path(path_base / "examples/building.jpg") +text_image = Blob.from_path(path_base / "examples/text.png") + + +@pytest.mark.parametrize( + "blob,body", + [ + (building_image, ""), + (text_image, r".*\bMAKE *TEXT\b.*\bSTAND\b.*\bOUT *FROM\b.*\bBACKGROUNDS\b.*"), + ], +) +@pytest.mark.parametrize( + "format,pattern", + [ + ("text", r"(?ism)^{body}$"), + ("markdown", r"(?ism)^!\[{body}]\(\.\)|$"), + ("html", r'(?ism)^({body}|)'), + ], +) +@pytest.mark.parametrize( + "blob_loader,kw", + [ + (RapidOCRBlobParser, {}), + (TesseractBlobParser, {}), + (MultimodalBlobParser, {"model": ChatOpenAI(model="gpt-4o", max_tokens=1024)}), + ], +) +def test_image_parser_with_differents_format_and_files( + blob_loader: Type, + kw: dict[str, Any], + format: str, + pattern: str, + blob: Blob, + body: str, +) -> None: + if blob_loader == MultimodalBlobParser and "building" in str(blob.path): + body = ".*building.*" + documents = list(blob_loader(format=format, **kw).lazy_parse(blob)) + assert len(documents) == 1 + assert re.compile(pattern.format(body=body)).match(documents[0].page_content) diff --git a/libs/community/tests/integration_tests/document_loaders/parsers/test_pdf_parsers.py b/libs/community/tests/integration_tests/document_loaders/parsers/test_pdf_parsers.py index 5ebbeda5642e7d..4928bac15656a3 100644 --- a/libs/community/tests/integration_tests/document_loaders/parsers/test_pdf_parsers.py +++ b/libs/community/tests/integration_tests/document_loaders/parsers/test_pdf_parsers.py @@ -2,10 +2,9 @@ import re from pathlib import Path +from typing import Iterator -import numpy as np import pytest -from typing import Iterator, Type import langchain_community.document_loaders.parsers as pdf_parsers from langchain_community.document_loaders.base import BaseBlobParser @@ -14,7 +13,7 @@ PDFMinerParser, PDFPlumberParser, PyPDFium2Parser, - PyPDFParser, PyMuPDFParser, + PyPDFParser, ) # PDFs to test parsers on. @@ -135,13 +134,11 @@ def test_extract_images_text_from_pdf_pypdfium2parser() -> None: @pytest.mark.parametrize( "mode", - # ["single", "page"], - ["single"], # FIXME + ["single", "page"], ) @pytest.mark.parametrize( "extract_images", - # [True, False], - [True], # FIXME + [True, False], ) @pytest.mark.parametrize( "parser_factory,params", @@ -152,8 +149,15 @@ def test_extract_images_text_from_pdf_pypdfium2parser() -> None: def test_mode_and_extract_images_variations( parser_factory: str, params: dict, mode: str, extract_images: bool ) -> None: + """Apply the same test for all *standard* PDF parsers. + + - Try with mode `single` and `page` + - Try with extract_images `true` and `false` + """ + from PIL.Image import Image + from langchain_community.document_loaders.parsers.images import ImageBlobParser - from PIL import Image + def _std_assert_with_parser(parser: BaseBlobParser) -> None: """Standard tests to verify that the given parser works. @@ -219,17 +223,21 @@ def _analyze_image(self, img: Image) -> str: ["markdown", "html", "csv", None], ) @pytest.mark.parametrize( - "parser_class,params", + "parser_factory,params", [ - (PyMuPDFParser, {}), + ("PyMuPDFParser", {}), ], ) def test_parser_with_table( - parser_class: Type, + parser_factory: str, params: dict, mode: str, extract_tables: str, ) -> None: + from PIL.Image import Image + + from langchain_community.document_loaders.parsers.images import ImageBlobParser + def _std_assert_with_parser(parser: BaseBlobParser) -> None: """Standard tests to verify that the given parser works. @@ -271,15 +279,16 @@ def _std_assert_with_parser(parser: BaseBlobParser) -> None: else: assert not len(tables) + class EmptyImageBlobParser(ImageBlobParser): + def _analyze_image(self, img: Image) -> str: + return "![image](.)" - - def images_to_text(images: list[np.ndarray]) -> Iterator[str]: - return iter([""] * len(images)) + parser_class = getattr(pdf_parsers, parser_factory) parser = parser_class( mode=mode, extract_tables=extract_tables, - # images_to_text=images_to_text, # FIXME + images_parser=EmptyImageBlobParser(), **params, ) _std_assert_with_parser(parser) diff --git a/libs/community/tests/integration_tests/document_loaders/test_images.py b/libs/community/tests/integration_tests/document_loaders/test_images.py deleted file mode 100644 index f2acb1c2a9a91e..00000000000000 --- a/libs/community/tests/integration_tests/document_loaders/test_images.py +++ /dev/null @@ -1,51 +0,0 @@ -import re -from pathlib import Path -from typing import Any - -import pytest - -from langchain_community.document_loaders.parsers.images import RapidOCRBlobParser, \ - _ImageBlobParser, TesseractBlobParser, MultimodalBlobParser -from langchain_core.documents.base import Blob -from langchain_openai import ChatOpenAI - -building_image = Blob.from_path(Path(__file__).parent.parent / "examples/building.jpg") -text_image = Blob.from_path(Path(__file__).parent.parent / "examples/text.png") - - -@pytest.mark.parametrize( - 'blob,body', - [ - (building_image, ""), - (text_image, r".*\bMAKE *TEXT\b.*\bSTAND\b.*\bOUT *FROM\b.*\bBACKGROUNDS\b.*") - ] -) -@pytest.mark.parametrize( - "format,pattern", - [ - ("text", r"(?sm)^{body}$"), - ("markdown", r"(?sm)^!\[{body}]\(\.\)|$"), - ("html", r'(?sm)^({body}|)'), - ], -) -@pytest.mark.parametrize( - "blob_loader,kw", - [ - (RapidOCRBlobParser,{}), - (TesseractBlobParser,{}), - (MultimodalBlobParser,{"model":ChatOpenAI(model="gpt-4o", max_tokens=1024)}) - ] -) -def test_image_parser_with_differents_format_and_files( - blob_loader, #: _ImageBlobParser, - kw:dict[str,any], - blob: Blob, - body: str, - format: str, - pattern: str, - ) -> None: - if blob_loader == MultimodalBlobParser: - body=".*building.*" - documents = list(blob_loader(format=format,**kw).lazy_parse(blob)) - assert (len(documents) == 1) - assert re.compile(pattern.format(body=body)).match(documents[0].page_content) diff --git a/libs/community/tests/integration_tests/document_loaders/test_pdf.py b/libs/community/tests/integration_tests/document_loaders/test_pdf.py index 1f22ba8c24be10..c1b8e43caa7b3d 100644 --- a/libs/community/tests/integration_tests/document_loaders/test_pdf.py +++ b/libs/community/tests/integration_tests/document_loaders/test_pdf.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from typing import Sequence, Union, Type +from typing import Sequence, Union import pytest @@ -209,7 +209,7 @@ def test_amazontextract_loader_failures() -> None: @pytest.mark.parametrize( - "loader_class,params", + "parser_factory,params", [ ("PyMuPDFLoader", {}), ], diff --git a/libs/community/tests/integration_tests/examples/building.jpg b/libs/community/tests/integration_tests/examples/building.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2fdfcbff8e9429570fadb06265057ad03397468e GIT binary patch literal 55349 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 Di~$-% literal 0 HcmV?d00001