diff --git a/docs/docs/how_to/document_loader_custom.ipynb b/docs/docs/how_to/document_loader_custom.ipynb index 8ebeae8fb63a3..62f6e586fcb2a 100644 --- a/docs/docs/how_to/document_loader_custom.ipynb +++ b/docs/docs/how_to/document_loader_custom.ipynb @@ -67,22 +67,47 @@ "When implementing a document loader do **NOT** provide parameters via the `lazy_load` or `alazy_load` methods.\n", "\n", "All configuration is expected to be passed through the initializer (__init__). This was a design choice made by LangChain to make sure that once a document loader has been instantiated it has all the information needed to load documents.\n", - ":::\n", - "\n", + ":::" + ] + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "### Installation\n", "\n", + "Install **langchain-core** and **langchain_community**." + ], + "id": "520edbbabde7df6e" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qqU langchain_core langchain_community", + "id": "58ba495427205dde" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ "### Implementation\n", "\n", "Let's create an example of a standard document loader that loads a file and creates a document from each line in the file." - ] + ], + "id": "a93f17a87d323bdd" }, { "cell_type": "code", - "execution_count": 1, "id": "20f128c1-1a2c-43b9-9e7b-cf9b3a86d1db", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.134084Z", + "start_time": "2024-12-04T14:47:17.673645Z" + } }, - "outputs": [], "source": [ "from typing import AsyncIterator, Iterator\n", "\n", @@ -122,7 +147,8 @@ " self,\n", " ) -> AsyncIterator[Document]: # <-- Does not take any arguments\n", " \"\"\"An async lazy loader that reads a file line by line.\"\"\"\n", - " # Requires aiofiles (install with pip)\n", + " # Requires aiofiles\n", + " # Install with `pip install aiofiles`\n", " # https://github.com/Tinche/aiofiles\n", " import aiofiles\n", "\n", @@ -134,7 +160,9 @@ " metadata={\"line_number\": line_number, \"source\": self.file_path},\n", " )\n", " line_number += 1" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", @@ -151,27 +179,49 @@ }, { "cell_type": "code", - "execution_count": 2, "id": "b1751198-c6dd-4149-95bd-6370ce8fa06f", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.146670Z", + "start_time": "2024-12-04T14:47:18.142846Z" + } }, - "outputs": [], "source": [ "with open(\"./meow.txt\", \"w\", encoding=\"utf-8\") as f:\n", " quality_content = \"meow meow🐱 \\n meow meow🐱 \\n meow😻😻\"\n", " f.write(quality_content)\n", "\n", "loader = CustomDocumentLoader(\"./meow.txt\")" - ] + ], + "outputs": [], + "execution_count": 2 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -q aiofiles", + "id": "31aaedb9c0587c21" }, { "cell_type": "code", - "execution_count": 3, "id": "71ef1482-f9de-4852-b5a4-0938f350612e", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.300287Z", + "start_time": "2024-12-04T14:47:18.297288Z" + } }, + "source": [ + "## Test out the lazy load interface\n", + "for doc in loader.lazy_load():\n", + " print()\n", + " print(type(doc))\n", + " print(doc)" + ], "outputs": [ { "name": "stdout", @@ -179,31 +229,37 @@ "text": [ "\n", "\n", - "page_content='meow meow🐱 \\n' metadata={'line_number': 0, 'source': './meow.txt'}\n", + "page_content='meow meow🐱 \n", + "' metadata={'line_number': 0, 'source': './meow.txt'}\n", "\n", "\n", - "page_content=' meow meow🐱 \\n' metadata={'line_number': 1, 'source': './meow.txt'}\n", + "page_content=' meow meow🐱 \n", + "' metadata={'line_number': 1, 'source': './meow.txt'}\n", "\n", "\n", "page_content=' meow😻😻' metadata={'line_number': 2, 'source': './meow.txt'}\n" ] } ], - "source": [ - "## Test out the lazy load interface\n", - "for doc in loader.lazy_load():\n", - " print()\n", - " print(type(doc))\n", - " print(doc)" - ] + "execution_count": 3 }, { "cell_type": "code", - "execution_count": 4, "id": "1588e78c-e81a-4d40-b36c-634242c84a6a", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.364698Z", + "start_time": "2024-12-04T14:47:18.355603Z" + } }, + "source": [ + "## Test out the async implementation\n", + "async for doc in loader.alazy_load():\n", + " print()\n", + " print(type(doc))\n", + " print(doc)" + ], "outputs": [ { "name": "stdout", @@ -211,23 +267,19 @@ "text": [ "\n", "\n", - "page_content='meow meow🐱 \\n' metadata={'line_number': 0, 'source': './meow.txt'}\n", + "page_content='meow meow🐱 \n", + "' metadata={'line_number': 0, 'source': './meow.txt'}\n", "\n", "\n", - "page_content=' meow meow🐱 \\n' metadata={'line_number': 1, 'source': './meow.txt'}\n", + "page_content=' meow meow🐱 \n", + "' metadata={'line_number': 1, 'source': './meow.txt'}\n", "\n", "\n", "page_content=' meow😻😻' metadata={'line_number': 2, 'source': './meow.txt'}\n" ] } ], - "source": [ - "## Test out the async implementation\n", - "async for doc in loader.alazy_load():\n", - " print()\n", - " print(type(doc))\n", - " print(doc)" - ] + "execution_count": 4 }, { "cell_type": "markdown", @@ -245,28 +297,32 @@ }, { "cell_type": "code", - "execution_count": 6, "id": "df5ad46a-9e00-4073-8505-489fc4f3799e", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.423301Z", + "start_time": "2024-12-04T14:47:18.416034Z" + } }, + "source": [ + "loader.load()" + ], "outputs": [ { "data": { "text/plain": [ - "[Document(page_content='meow meow🐱 \\n', metadata={'line_number': 0, 'source': './meow.txt'}),\n", - " Document(page_content=' meow meow🐱 \\n', metadata={'line_number': 1, 'source': './meow.txt'}),\n", - " Document(page_content=' meow😻😻', metadata={'line_number': 2, 'source': './meow.txt'})]" + "[Document(metadata={'line_number': 0, 'source': './meow.txt'}, page_content='meow meow🐱 \\n'),\n", + " Document(metadata={'line_number': 1, 'source': './meow.txt'}, page_content=' meow meow🐱 \\n'),\n", + " Document(metadata={'line_number': 2, 'source': './meow.txt'}, page_content=' meow😻😻')]" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "loader.load()" - ] + "execution_count": 5 }, { "cell_type": "markdown", @@ -286,12 +342,14 @@ }, { "cell_type": "code", - "execution_count": 7, "id": "209f6a91-2f15-4cb2-9237-f79fc9493b82", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.482123Z", + "start_time": "2024-12-04T14:47:18.478469Z" + } }, - "outputs": [], "source": [ "from langchain_core.document_loaders import BaseBlobParser, Blob\n", "\n", @@ -309,35 +367,47 @@ " page_content=line,\n", " metadata={\"line_number\": line_number, \"source\": blob.source},\n", " )" - ] + ], + "outputs": [], + "execution_count": 6 }, { "cell_type": "code", - "execution_count": 8, "id": "b1275c59-06d4-458f-abd2-fcbad0bde442", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.531060Z", + "start_time": "2024-12-04T14:47:18.525851Z" + } }, - "outputs": [], "source": [ "blob = Blob.from_path(\"./meow.txt\")\n", "parser = MyParser()" - ] + ], + "outputs": [], + "execution_count": 7 }, { "cell_type": "code", - "execution_count": 8, "id": "56a3d707-2086-413b-ae82-50e92ddb27f6", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.586407Z", + "start_time": "2024-12-04T14:47:18.581807Z" + } }, + "source": [ + "list(parser.lazy_parse(blob))" + ], "outputs": [ { "data": { "text/plain": [ - "[Document(page_content='meow meow🐱 \\n', metadata={'line_number': 1, 'source': './meow.txt'}),\n", - " Document(page_content=' meow meow🐱 \\n', metadata={'line_number': 2, 'source': './meow.txt'}),\n", - " Document(page_content=' meow😻😻', metadata={'line_number': 3, 'source': './meow.txt'})]" + "[Document(metadata={'line_number': 1, 'source': './meow.txt'}, page_content='meow meow🐱 \\n'),\n", + " Document(metadata={'line_number': 2, 'source': './meow.txt'}, page_content=' meow meow🐱 \\n'),\n", + " Document(metadata={'line_number': 3, 'source': './meow.txt'}, page_content=' meow😻😻')]" ] }, "execution_count": 8, @@ -345,9 +415,7 @@ "output_type": "execute_result" } ], - "source": [ - "list(parser.lazy_parse(blob))" - ] + "execution_count": 8 }, { "cell_type": "markdown", @@ -359,17 +427,24 @@ }, { "cell_type": "code", - "execution_count": 9, "id": "20d03092-ba35-47d7-b612-9d1631c261cd", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.648010Z", + "start_time": "2024-12-04T14:47:18.642620Z" + } }, + "source": [ + "blob = Blob(data=b\"some data from memory\\nmeow\")\n", + "list(parser.lazy_parse(blob))" + ], "outputs": [ { "data": { "text/plain": [ - "[Document(page_content='some data from memory\\n', metadata={'line_number': 1, 'source': None}),\n", - " Document(page_content='meow', metadata={'line_number': 2, 'source': None})]" + "[Document(metadata={'line_number': 1, 'source': None}, page_content='some data from memory\\n'),\n", + " Document(metadata={'line_number': 2, 'source': None}, page_content='meow')]" ] }, "execution_count": 9, @@ -377,10 +452,7 @@ "output_type": "execute_result" } ], - "source": [ - "blob = Blob(data=b\"some data from memory\\nmeow\")\n", - "list(parser.lazy_parse(blob))" - ] + "execution_count": 9 }, { "cell_type": "markdown", @@ -394,23 +466,33 @@ }, { "cell_type": "code", - "execution_count": 10, "id": "a9e92e0e-c8da-401c-b8c6-f0676004cf58", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.700918Z", + "start_time": "2024-12-04T14:47:18.698186Z" + } }, - "outputs": [], "source": [ "blob = Blob.from_path(\"./meow.txt\", metadata={\"foo\": \"bar\"})" - ] + ], + "outputs": [], + "execution_count": 10 }, { "cell_type": "code", - "execution_count": 11, "id": "6b559d30-8b0c-4e45-86b1-e4602d9aaa7e", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.755054Z", + "start_time": "2024-12-04T14:47:18.751290Z" + } }, + "source": [ + "blob.encoding" + ], "outputs": [ { "data": { @@ -423,17 +505,21 @@ "output_type": "execute_result" } ], - "source": [ - "blob.encoding" - ] + "execution_count": 11 }, { "cell_type": "code", - "execution_count": 12, "id": "2f7b145a-9c6f-47f9-9487-1f4b25aff46f", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.815391Z", + "start_time": "2024-12-04T14:47:18.811107Z" + } }, + "source": [ + "blob.as_bytes()" + ], "outputs": [ { "data": { @@ -446,17 +532,21 @@ "output_type": "execute_result" } ], - "source": [ - "blob.as_bytes()" - ] + "execution_count": 12 }, { "cell_type": "code", - "execution_count": 13, "id": "9b9482fa-c49c-42cd-a2ef-80bc93214631", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.874818Z", + "start_time": "2024-12-04T14:47:18.870403Z" + } }, + "source": [ + "blob.as_string()" + ], "outputs": [ { "data": { @@ -469,22 +559,26 @@ "output_type": "execute_result" } ], - "source": [ - "blob.as_string()" - ] + "execution_count": 13 }, { "cell_type": "code", - "execution_count": 14, "id": "04cc7a81-290e-4ef8-b7e1-d885fcc59ece", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.931239Z", + "start_time": "2024-12-04T14:47:18.927846Z" + } }, + "source": [ + "blob.as_bytes_io()" + ], "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 14, @@ -492,17 +586,21 @@ "output_type": "execute_result" } ], - "source": [ - "blob.as_bytes_io()" - ] + "execution_count": 14 }, { "cell_type": "code", - "execution_count": 15, "id": "ec8de0ab-51d7-4e41-82c9-3ce0a6fdc2cd", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:18.989857Z", + "start_time": "2024-12-04T14:47:18.986277Z" + } }, + "source": [ + "blob.metadata" + ], "outputs": [ { "data": { @@ -515,17 +613,21 @@ "output_type": "execute_result" } ], - "source": [ - "blob.metadata" - ] + "execution_count": 15 }, { "cell_type": "code", - "execution_count": 16, "id": "19eae991-ae48-43c2-8952-7347cdb76a34", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:19.047526Z", + "start_time": "2024-12-04T14:47:19.043682Z" + } }, + "source": [ + "blob.source" + ], "outputs": [ { "data": { @@ -538,9 +640,7 @@ "output_type": "execute_result" } ], - "source": [ - "blob.source" - ] + "execution_count": 16 }, { "cell_type": "markdown", @@ -551,130 +651,213 @@ "\n", "While a parser encapsulates the logic needed to parse binary data into documents, *blob loaders* encapsulate the logic that's necessary to load blobs from a given storage location.\n", "\n", - "A the moment, `LangChain` only supports `FileSystemBlobLoader`.\n", + "A the moment, `LangChain` supports `FileSystemBlobLoader` and `CloudBlobLoader`.\n", "\n", "You can use the `FileSystemBlobLoader` to load blobs and then use the parser to parse them." ] }, { "cell_type": "code", - "execution_count": 17, "id": "c093becb-2e84-4329-89e3-956a3bd765e5", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:19.102593Z", + "start_time": "2024-12-04T14:47:19.095340Z" + } }, - "outputs": [], "source": [ "from langchain_community.document_loaders.blob_loaders import FileSystemBlobLoader\n", "\n", - "blob_loader = FileSystemBlobLoader(path=\".\", glob=\"*.mdx\", show_progress=True)" - ] + "filesystem_blob_loader = FileSystemBlobLoader(\n", + " path=\".\", glob=\"*.mdx\", show_progress=True\n", + ")" + ], + "outputs": [], + "execution_count": 17 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -q tqdm", + "id": "4552945bda84a925" }, { "cell_type": "code", - "execution_count": 18, "id": "77739dab-2a1e-4b64-8daa-fee8aa029972", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:47:19.302261Z", + "start_time": "2024-12-04T14:47:19.168818Z" + } }, + "source": [ + "parser = MyParser()\n", + "for blob in filesystem_blob_loader.yield_blobs():\n", + " for doc in parser.lazy_parse(blob):\n", + " print(doc)\n", + " break" + ], "outputs": [ { "data": { + "text/plain": [ + "0it [00:00, ?it/s]" + ], "application/vnd.jupyter.widget-view+json": { - "model_id": "45e85d3f63224bb59db02a40ae2e3268", "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/8 [00:00 8\u001B[0m \u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mblob\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mcloud_blob_loader\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43myield_blobs\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 9\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mprint\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mblob\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/langchain_community/document_loaders/blob_loaders/cloud_blob_loader.py:217\u001B[0m, in \u001B[0;36mCloudBlobLoader.yield_blobs\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 212\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"Yield blobs that match the requested pattern.\"\"\"\u001B[39;00m\n\u001B[1;32m 213\u001B[0m iterator \u001B[38;5;241m=\u001B[39m _make_iterator(\n\u001B[1;32m 214\u001B[0m length_func\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcount_matching_files, show_progress\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mshow_progress\n\u001B[1;32m 215\u001B[0m )\n\u001B[0;32m--> 217\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m path \u001B[38;5;129;01min\u001B[39;00m \u001B[43miterator\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_yield_paths\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m)\u001B[49m:\n\u001B[1;32m 218\u001B[0m \u001B[38;5;66;03m# yield Blob.from_path(path)\u001B[39;00m\n\u001B[1;32m 219\u001B[0m \u001B[38;5;28;01myield\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mfrom_path(path)\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/langchain_community/document_loaders/blob_loaders/cloud_blob_loader.py:115\u001B[0m, in \u001B[0;36m_make_iterator.._with_tqdm\u001B[0;34m(iterable)\u001B[0m\n\u001B[1;32m 113\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21m_with_tqdm\u001B[39m(iterable: Iterable[T]) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Iterator[T]:\n\u001B[1;32m 114\u001B[0m \u001B[38;5;250m \u001B[39m\u001B[38;5;124;03m\"\"\"Wrap an iterable in a tqdm progress bar.\"\"\"\u001B[39;00m\n\u001B[0;32m--> 115\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m tqdm(iterable, total\u001B[38;5;241m=\u001B[39m\u001B[43mlength_func\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m)\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/langchain_community/document_loaders/blob_loaders/cloud_blob_loader.py:242\u001B[0m, in \u001B[0;36mCloudBlobLoader.count_matching_files\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 239\u001B[0m \u001B[38;5;66;03m# Carry out a full iteration to count the files without\u001B[39;00m\n\u001B[1;32m 240\u001B[0m \u001B[38;5;66;03m# materializing anything expensive in memory.\u001B[39;00m\n\u001B[1;32m 241\u001B[0m num \u001B[38;5;241m=\u001B[39m \u001B[38;5;241m0\u001B[39m\n\u001B[0;32m--> 242\u001B[0m \u001B[43m\u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43m_\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_yield_paths\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 243\u001B[0m \u001B[43m \u001B[49m\u001B[43mnum\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m+\u001B[39;49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;241;43m1\u001B[39;49m\n\u001B[1;32m 244\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m num\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/langchain_community/document_loaders/blob_loaders/cloud_blob_loader.py:228\u001B[0m, in \u001B[0;36mCloudBlobLoader._yield_paths\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 225\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m\n\u001B[1;32m 227\u001B[0m paths \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mpath\u001B[38;5;241m.\u001B[39mglob(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mglob) \u001B[38;5;66;03m# type: ignore[attr-defined]\u001B[39;00m\n\u001B[0;32m--> 228\u001B[0m \u001B[43m\u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mpath\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mpaths\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 229\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mif\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mexclude\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 230\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mif\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43many\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mpath\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mmatch\u001B[49m\u001B[43m(\u001B[49m\u001B[43mglob\u001B[49m\u001B[43m)\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mglob\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mexclude\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/cloudpathlib/cloudpath.py:523\u001B[0m, in \u001B[0;36mCloudPath.glob\u001B[0;34m(self, pattern, case_sensitive)\u001B[0m\n\u001B[1;32m 518\u001B[0m pattern_parts \u001B[38;5;241m=\u001B[39m PurePosixPath(pattern)\u001B[38;5;241m.\u001B[39mparts\n\u001B[1;32m 519\u001B[0m selector \u001B[38;5;241m=\u001B[39m _make_selector(\n\u001B[1;32m 520\u001B[0m \u001B[38;5;28mtuple\u001B[39m(pattern_parts), _posix_flavour, case_sensitive\u001B[38;5;241m=\u001B[39mcase_sensitive\n\u001B[1;32m 521\u001B[0m )\n\u001B[0;32m--> 523\u001B[0m \u001B[38;5;28;01myield from\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_glob(\n\u001B[1;32m 524\u001B[0m selector,\n\u001B[1;32m 525\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m/\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;129;01min\u001B[39;00m pattern\n\u001B[1;32m 526\u001B[0m \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m**\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 527\u001B[0m \u001B[38;5;129;01min\u001B[39;00m pattern, \u001B[38;5;66;03m# recursive listing needed if explicit ** or any sub folder in pattern\u001B[39;00m\n\u001B[1;32m 528\u001B[0m )\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/cloudpathlib/cloudpath.py:501\u001B[0m, in \u001B[0;36mCloudPath._glob\u001B[0;34m(self, selector, recursive)\u001B[0m\n\u001B[1;32m 500\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21m_glob\u001B[39m(\u001B[38;5;28mself\u001B[39m, selector, recursive: \u001B[38;5;28mbool\u001B[39m) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Generator[Self, \u001B[38;5;28;01mNone\u001B[39;00m, \u001B[38;5;28;01mNone\u001B[39;00m]:\n\u001B[0;32m--> 501\u001B[0m file_tree \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_build_subtree\u001B[49m\u001B[43m(\u001B[49m\u001B[43mrecursive\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 503\u001B[0m root \u001B[38;5;241m=\u001B[39m _CloudPathSelectable(\n\u001B[1;32m 504\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mname,\n\u001B[1;32m 505\u001B[0m [], \u001B[38;5;66;03m# nothing above self will be returned, so initial parents is empty\u001B[39;00m\n\u001B[1;32m 506\u001B[0m file_tree,\n\u001B[1;32m 507\u001B[0m )\n\u001B[1;32m 509\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m p \u001B[38;5;129;01min\u001B[39;00m selector\u001B[38;5;241m.\u001B[39mselect_from(root):\n\u001B[1;32m 510\u001B[0m \u001B[38;5;66;03m# select_from returns self.name/... so strip before joining\u001B[39;00m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/cloudpathlib/cloudpath.py:488\u001B[0m, in \u001B[0;36mCloudPath._build_subtree\u001B[0;34m(self, recursive)\u001B[0m\n\u001B[1;32m 484\u001B[0m _build_tree(trunk[branch], next_branch, nodes, is_dir)\n\u001B[1;32m 486\u001B[0m file_tree \u001B[38;5;241m=\u001B[39m Tree()\n\u001B[0;32m--> 488\u001B[0m \u001B[43m\u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mf\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mis_dir\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mclient\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_list_dir\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mrecursive\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrecursive\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 489\u001B[0m \u001B[43m \u001B[49m\u001B[43mparts\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;28;43mstr\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43mf\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mrelative_to\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msplit\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43m/\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 491\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;66;43;03m# skip self\u001B[39;49;00m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/cloudpathlib/s3/s3client.py:233\u001B[0m, in \u001B[0;36mS3Client._list_dir\u001B[0;34m(self, cloud_path, recursive)\u001B[0m\n\u001B[1;32m 229\u001B[0m yielded_dirs \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mset\u001B[39m()\n\u001B[1;32m 231\u001B[0m paginator \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mclient\u001B[38;5;241m.\u001B[39mget_paginator(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mlist_objects_v2\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m--> 233\u001B[0m \u001B[43m\u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mresult\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mpaginator\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mpaginate\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 234\u001B[0m \u001B[43m \u001B[49m\u001B[43mBucket\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcloud_path\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbucket\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 235\u001B[0m \u001B[43m \u001B[49m\u001B[43mPrefix\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mprefix\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 236\u001B[0m \u001B[43m \u001B[49m\u001B[43mDelimiter\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mif\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mrecursive\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01melse\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43m/\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 237\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mboto3_list_extra_args\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 238\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 239\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;66;43;03m# yield everything in common prefixes as directories\u001B[39;49;00m\n\u001B[1;32m 240\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mfor\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mresult_prefix\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;129;43;01min\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mresult\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mCommonPrefixes\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m[\u001B[49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m\u001B[43m:\u001B[49m\n\u001B[1;32m 241\u001B[0m \u001B[43m \u001B[49m\u001B[43mcanonical\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m \u001B[49m\u001B[43mresult_prefix\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mPrefix\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mrstrip\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43m/\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;66;43;03m# keep a canonical form\u001B[39;49;00m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/botocore/paginate.py:269\u001B[0m, in \u001B[0;36mPageIterator.__iter__\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 267\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_inject_starting_params(current_kwargs)\n\u001B[1;32m 268\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m \u001B[38;5;28;01mTrue\u001B[39;00m:\n\u001B[0;32m--> 269\u001B[0m response \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_make_request\u001B[49m\u001B[43m(\u001B[49m\u001B[43mcurrent_kwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 270\u001B[0m parsed \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_extract_parsed_response(response)\n\u001B[1;32m 271\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m first_request:\n\u001B[1;32m 272\u001B[0m \u001B[38;5;66;03m# The first request is handled differently. We could\u001B[39;00m\n\u001B[1;32m 273\u001B[0m \u001B[38;5;66;03m# possibly have a resume/starting token that tells us where\u001B[39;00m\n\u001B[1;32m 274\u001B[0m \u001B[38;5;66;03m# to index into the retrieved page.\u001B[39;00m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/botocore/paginate.py:357\u001B[0m, in \u001B[0;36mPageIterator._make_request\u001B[0;34m(self, current_kwargs)\u001B[0m\n\u001B[1;32m 356\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21m_make_request\u001B[39m(\u001B[38;5;28mself\u001B[39m, current_kwargs):\n\u001B[0;32m--> 357\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_method\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mcurrent_kwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/botocore/client.py:569\u001B[0m, in \u001B[0;36mClientCreator._create_api_method.._api_call\u001B[0;34m(self, *args, **kwargs)\u001B[0m\n\u001B[1;32m 565\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mTypeError\u001B[39;00m(\n\u001B[1;32m 566\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mpy_operation_name\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m() only accepts keyword arguments.\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 567\u001B[0m )\n\u001B[1;32m 568\u001B[0m \u001B[38;5;66;03m# The \"self\" in this scope is referring to the BaseClient.\u001B[39;00m\n\u001B[0;32m--> 569\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_make_api_call\u001B[49m\u001B[43m(\u001B[49m\u001B[43moperation_name\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mkwargs\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/workspace.bda/patch_langchain_common/.venv/lib/python3.12/site-packages/botocore/client.py:1023\u001B[0m, in \u001B[0;36mBaseClient._make_api_call\u001B[0;34m(self, operation_name, api_params)\u001B[0m\n\u001B[1;32m 1019\u001B[0m error_code \u001B[38;5;241m=\u001B[39m error_info\u001B[38;5;241m.\u001B[39mget(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mQueryErrorCode\u001B[39m\u001B[38;5;124m\"\u001B[39m) \u001B[38;5;129;01mor\u001B[39;00m error_info\u001B[38;5;241m.\u001B[39mget(\n\u001B[1;32m 1020\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mCode\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1021\u001B[0m )\n\u001B[1;32m 1022\u001B[0m error_class \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mexceptions\u001B[38;5;241m.\u001B[39mfrom_code(error_code)\n\u001B[0;32m-> 1023\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m error_class(parsed_response, operation_name)\n\u001B[1;32m 1024\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1025\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m parsed_response\n", + "\u001B[0;31mClientError\u001B[0m: An error occurred (ExpiredToken) when calling the ListObjectsV2 operation: The provided token has expired." + ] + } + ], + "execution_count": 3 }, { - "cell_type": "markdown", - "id": "f016390c-d38b-4261-946d-34eefe546df7", "metadata": {}, + "cell_type": "markdown", "source": [ "### Generic Loader\n", "\n", "LangChain has a `GenericLoader` abstraction which composes a `BlobLoader` with a `BaseBlobParser`.\n", "\n", - "`GenericLoader` is meant to provide standardized classmethods that make it easy to use existing `BlobLoader` implementations. At the moment, only the `FileSystemBlobLoader` is supported." - ] + "`GenericLoader` is meant to provide standardized classmethods that make it easy to use existing `BlobLoader` implementations. At the moment, the `FileSystemBlobLoader` and `CloudBlobLoader` are supported." + ], + "id": "40c361ba4cd30164" }, { - "cell_type": "code", - "execution_count": 19, - "id": "1de74daf-70ee-4616-9089-d28e26b16851", "metadata": { - "tags": [] + "ExecuteTime": { + "end_time": "2024-12-04T14:48:15.185543Z", + "start_time": "2024-12-04T14:48:15.181114Z" + } }, + "cell_type": "code", + "source": [ + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "generic_loader_filesystem = GenericLoader(\n", + " blob_loader=filesystem_blob_loader, blob_parser=parser\n", + ")\n", + "for idx, doc in enumerate(loader.lazy_load()):\n", + " if idx < 5:\n", + " print(doc)\n", + "\n", + "print(\"... output truncated for demo purposes\")" + ], + "id": "5dfb2be02fe662c5", "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "5f1f6810a71a4909ac9fe1e8f8cb9e0a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/8 [00:00[The Microsoft Office](https://www.office.com/) suite of productivity software includes Microsoft Word, Microsoft Excel, Microsoft PowerPoint, Microsoft Outlook, and Microsoft OneNote. It is available for Microsoft Windows and macOS operating systems. It is also available on Android and iOS.\\n' metadata={'line_number': 3, 'source': 'office_file.mdx'}\n", - "page_content='\\n' metadata={'line_number': 4, 'source': 'office_file.mdx'}\n", - "page_content='This covers how to load commonly used file formats including `DOCX`, `XLSX` and `PPTX` documents into a document format that we can use downstream.\\n' metadata={'line_number': 5, 'source': 'office_file.mdx'}\n", + "page_content='meow meow🐱 \n", + "' metadata={'line_number': 0, 'source': './meow.txt'}\n", + "page_content=' meow meow🐱 \n", + "' metadata={'line_number': 1, 'source': './meow.txt'}\n", + "page_content=' meow😻😻' metadata={'line_number': 2, 'source': './meow.txt'}\n", "... output truncated for demo purposes\n" ] } ], + "execution_count": 20 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ "from langchain_community.document_loaders.generic import GenericLoader\n", "\n", - "loader = GenericLoader.from_filesystem(\n", - " path=\".\", glob=\"*.mdx\", show_progress=True, parser=MyParser()\n", - ")\n", - "\n", + "generic_loader_cloud = GenericLoader(blob_loader=cloud_blob_loader, blob_parser=parser)\n", "for idx, doc in enumerate(loader.lazy_load()):\n", " if idx < 5:\n", " print(doc)\n", "\n", "print(\"... output truncated for demo purposes\")" - ] + ], + "id": "5f339daa2fb09819" }, { "cell_type": "markdown", @@ -690,12 +873,14 @@ }, { "cell_type": "code", - "execution_count": 20, "id": "23633102-dc44-4fed-a4e1-8159489101c8", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:49:41.134539Z", + "start_time": "2024-12-04T14:49:41.128893Z" + } }, - "outputs": [], "source": [ "from typing import Any\n", "\n", @@ -705,26 +890,40 @@ " def get_parser(**kwargs: Any) -> BaseBlobParser:\n", " \"\"\"Override this method to associate a default parser with the class.\"\"\"\n", " return MyParser()" - ] + ], + "outputs": [], + "execution_count": 21 }, { "cell_type": "code", - "execution_count": 21, "id": "dc95be85-4a29-4c6f-a260-08afa3c95538", "metadata": { - "tags": [] + "tags": [], + "ExecuteTime": { + "end_time": "2024-12-04T14:49:46.243777Z", + "start_time": "2024-12-04T14:49:46.231480Z" + } }, + "source": [ + "loader = MyCustomLoader.from_filesystem(path=\".\", glob=\"*.mdx\", show_progress=True)\n", + "\n", + "for idx, doc in enumerate(loader.lazy_load()):\n", + " if idx < 5:\n", + " print(doc)\n", + "\n", + "print(\"... output truncated for demo purposes\")" + ], "outputs": [ { "data": { + "text/plain": [ + "0it [00:00, ?it/s]" + ], "application/vnd.jupyter.widget-view+json": { - "model_id": "4320598ea3b44a52b1873e1c801db312", "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/8 [00:00[The Microsoft Office](https://www.office.com/) suite of productivity software includes Microsoft Word, Microsoft Excel, Microsoft PowerPoint, Microsoft Outlook, and Microsoft OneNote. It is available for Microsoft Windows and macOS operating systems. It is also available on Android and iOS.\\n' metadata={'line_number': 3, 'source': 'office_file.mdx'}\n", - "page_content='\\n' metadata={'line_number': 4, 'source': 'office_file.mdx'}\n", - "page_content='This covers how to load commonly used file formats including `DOCX`, `XLSX` and `PPTX` documents into a document format that we can use downstream.\\n' metadata={'line_number': 5, 'source': 'office_file.mdx'}\n", "... output truncated for demo purposes\n" ] } ], - "source": [ - "loader = MyCustomLoader.from_filesystem(path=\".\", glob=\"*.mdx\", show_progress=True)\n", - "\n", - "for idx, doc in enumerate(loader.lazy_load()):\n", - " if idx < 5:\n", - " print(doc)\n", - "\n", - "print(\"... output truncated for demo purposes\")" - ] + "execution_count": 22 } ], "metadata": { diff --git a/docs/docs/how_to/document_loader_pdf.ipynb b/docs/docs/how_to/document_loader_pdf.ipynb index 766560c1db643..338c39ea9475f 100644 --- a/docs/docs/how_to/document_loader_pdf.ipynb +++ b/docs/docs/how_to/document_loader_pdf.ipynb @@ -17,6 +17,28 @@ "- Run [OCR](https://en.wikipedia.org/wiki/Optical_character_recognition) on images to detect text therein;\n", "- Classify text as belonging to paragraphs, lists, tables, or other structures;\n", "- Structure text into table rows and columns, or key-value pairs.\n", + "- Use multimodal LLM to extrat the body, page by page\n", + "\n", + "PDF files are organized in pages. This is not a good strategy. Indeed, this approach creates memory gaps in RAG projects. If a paragraph spans two pages, the beginning of the paragraph is at the end of one page, while the rest is at the start of the next. With a page-based approach, there will be two separate chunks, each containing part of a sentence. The corresponding vectors won’t be relevant. These chunks are unlikely to be selected when there’s a question specifically about the split paragraph. If one of the chunks is selected, there’s little chance the LLM can answer the question. This issue is worsened by the injection of headers, footers (if parsers haven’t properly removed them), images, or tables at the end of a page, as most current implementations tend to do. \n", + "\n", + "Images and tables are difficult challenges for PDF parsers.\n", + "\n", + "Some parsers can retrieve images. The question is what to do with them. It may be interesting to apply an OCR algorithm to extract the textual content of images, or to use a multimodal LLM to request the description of each image. With the result of an image conversion, where do I place it in the document flow? At the end? At the risk of breaking the content of a paragraph present on several pages? Implementations try to find a neutral location, between two paragraphs, if possible.\n", + "\n", + "When it comes to extracting tables, some can do it, with varying degrees of success, with or without integrating the tables into the text flow. A Markdown table cannot describe combined cells, unlike an HTML table.\n", + "\n", + "Finally, the metadata extracted from PDF files by the various parsers varies. We propose a minimum set that parsers should offer:\n", + "\n", + "- `source`\n", + "- `page`\n", + "- `total_page`\n", + "- `creationdate`\n", + "- `creator`\n", + "- `producer`\n", + "\n", + "Most parsers offer similar parameters, such as mode, which allows you to request the retrieval of one document per page (`mode=\"page\"`), or the entire file stream in a single document (`mode=\"single\"`). Other modes can return the structure of the document, following the identification of each component.\n", + "\n", + "LangChain tries to unify the different parsers, to facilitate migration from one to the other. Why is it important? Each has its own characteristics and strategies, more or less effective depending on the family of PDF files. One strategy is to identify the family of the PDF file (by inspecting the metadata or the content of the first page) and then select the most efficient parser in that case. By unifying parsers, the following code doesn't need to deal with the specifics of different parsers, as the result is similar for each. \n", "\n", "LangChain integrates with a host of PDF parsers. Some are simple and relatively low-level; others will support OCR and image-processing, or perform advanced document layout analysis. The right choice will depend on your needs. Below we enumerate the possibilities.\n", "\n", @@ -24,21 +46,20 @@ ] }, { - "cell_type": "code", - "execution_count": 1, - "id": "3b5c65c1-1f12-4dc1-98f0-9a5b2bf8ebc2", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "file_path = (\n", " \"../../docs/integrations/document_loaders/example_data/layout-parser-paper.pdf\"\n", ")" - ] + ], + "id": "7ec1eddef73eca64" }, { - "cell_type": "markdown", - "id": "d5a5bc0d-4e92-4c0d-94c8-5699c5a2a2db", "metadata": {}, + "cell_type": "markdown", "source": [ ":::info A note on multimodal models\n", "\n", @@ -48,163 +69,87 @@ "\n", "## Simple and fast text extraction\n", "\n", - "If you are looking for a simple string representation of text that is embedded in a PDF, the method below is appropriate. It will return a list of [Document](https://python.langchain.com/api_reference/core/documents/langchain_core.documents.base.Document.html) objects-- one per page-- containing a single string of the page's text in the Document's `page_content` attribute. It will not parse text in images or scanned PDF pages. Under the hood it uses the [pypdf](https://pypdf.readthedocs.io/en/stable/) Python library.\n", + "If you are looking for a simple string representation of text that is embedded in a PDF, the method below is appropriate. It will return a list of [Document](https://python.langchain.com/api_reference/core/documents/langchain_core.documents.base.Document.html) objects-- one per page-- containing a single string of the page's text in the Document's `page_content` attribute. It will not parse text in images, tables or scanned PDF pages. Under the hood it uses the [pypdf](https://pypdf.readthedocs.io/en/stable/) Python library.\n", "\n", "LangChain [document loaders](/docs/concepts/document_loaders) implement `lazy_load` and its async variant, `alazy_load`, which return iterators of `Document` objects. We will use these below." - ] + ], + "id": "21c9ba0aa49de9a6" }, { - "cell_type": "code", - "execution_count": null, - "id": "35c08d82-8b0a-45e2-8167-73e70f88208a", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [ - "%pip install -qU pypdf" - ] + "execution_count": null, + "source": "%pip install -qU langchain_community pypdf", + "id": "b742c1ed9fda8ba7" }, { - "cell_type": "code", - "execution_count": 2, - "id": "0746557c-6f65-43a4-a15e-8d270e6c1349", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ + "from pprint import pprint\n", + "\n", "from langchain_community.document_loaders import PyPDFLoader\n", "\n", "loader = PyPDFLoader(file_path)\n", "pages = []\n", "async for page in loader.alazy_load():\n", " pages.append(page)" - ] + ], + "id": "edd87605b7d1a46a" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 3, - "id": "839bde4a-e490-413e-93a4-cce4468f2f34", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'source': '../../docs/integrations/document_loaders/example_data/layout-parser-paper.pdf', 'page': 0}\n", - "\n", - "LayoutParser : A Unified Toolkit for Deep\n", - "Learning Based Document Image Analysis\n", - "Zejiang Shen1( \u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", - "Lee4, Jacob Carlson3, and Weining Li5\n", - "1Allen Institute for AI\n", - "shannons@allenai.org\n", - "2Brown University\n", - "ruochen zhang@brown.edu\n", - "3Harvard University\n", - "{melissadell,jacob carlson }@fas.harvard.edu\n", - "4University of Washington\n", - "bcgl@cs.washington.edu\n", - "5University of Waterloo\n", - "w422li@uwaterloo.ca\n", - "Abstract. Recent advances in document image analysis (DIA) have been\n", - "primarily driven by the application of neural networks. Ideally, research\n", - "outcomes could be easily deployed in production and extended for further\n", - "investigation. However, various factors like loosely organized codebases\n", - "and sophisticated model configurations complicate the easy reuse of im-\n", - "portant innovations by a wide audience. Though there have been on-going\n", - "efforts to improve reusability and simplify deep learning (DL) model\n", - "development in disciplines like natural language processing and computer\n", - "vision, none of them are optimized for challenges in the domain of DIA.\n", - "This represents a major gap in the existing toolkit, as DIA is central to\n", - "academic research across a wide range of disciplines in the social sciences\n", - "and humanities. This paper introduces LayoutParser , an open-source\n", - "library for streamlining the usage of DL in DIA research and applica-\n", - "tions. The core LayoutParser library comes with a set of simple and\n", - "intuitive interfaces for applying and customizing DL models for layout de-\n", - "tection, character recognition, and many other document processing tasks.\n", - "To promote extensibility, LayoutParser also incorporates a community\n", - "platform for sharing both pre-trained models and full document digiti-\n", - "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", - "lightweight and large-scale digitization pipelines in real-word use cases.\n", - "The library is publicly available at https://layout-parser.github.io .\n", - "Keywords: Document Image Analysis ·Deep Learning ·Layout Analysis\n", - "·Character Recognition ·Open Source library ·Toolkit.\n", - "1 Introduction\n", - "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", - "document image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n" - ] - } - ], - "source": [ - "print(f\"{pages[0].metadata}\\n\")\n", + "outputs": [], + "execution_count": null, + "source": [ + "pprint(pages[0].metadata)\n", "print(pages[0].page_content)" - ] + ], + "id": "b81a1025132de879" }, { - "cell_type": "markdown", - "id": "78ce6d1d-86cc-45e3-8259-e21fbd2c7e6c", "metadata": {}, + "cell_type": "markdown", "source": [ "Note that the metadata of each document stores the corresponding page number.\n", "\n", "### Vector search over PDFs\n", "\n", "Once we have loaded PDFs into LangChain `Document` objects, we can index them (e.g., a RAG application) in the usual way. Below we use OpenAI embeddings, although any LangChain [embeddings](https://python.langchain.com/docs/concepts/embedding_models) model will suffice." - ] + ], + "id": "89e816b3b2329eec" }, { - "cell_type": "code", - "execution_count": null, - "id": "a5391b1b-2b1b-401e-a6ee-381b7165a54a", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [ - "%pip install -qU langchain-openai" - ] + "execution_count": null, + "source": "%pip install -qU langchain-openai", + "id": "1416fe4ee37ec458" }, { - "cell_type": "code", - "execution_count": 4, - "id": "7ba35f1c-0a85-4f2f-a56e-3a994c69180d", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "import getpass\n", "import os\n", "\n", "if \"OPENAI_API_KEY\" not in os.environ:\n", " os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API Key:\")" - ] + ], + "id": "8f6a9e773d93313b" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 5, - "id": "e0eaec77-f5cf-4172-8e39-41e1520eabba", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Page 13: 14 Z. Shen et al.\n", - "6 Conclusion\n", - "LayoutParser provides a comprehensive toolkit for deep learning-based document\n", - "image analysis. The off-the-shelf library is easy to install, and can be used to\n", - "build flexible and accurate pipelines for processing documents with complicated\n", - "structures. It also supports hi\n", - "\n", - "Page 0: LayoutParser : A Unified Toolkit for Deep\n", - "Learning Based Document Image Analysis\n", - "Zejiang Shen1( \u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", - "Lee4, Jacob Carlson3, and Weining Li5\n", - "1Allen Institute for AI\n", - "shannons@allenai.org\n", - "2Brown University\n", - "ruochen zhang@brown.edu\n", - "3Harvard University\n", - "\n", - "\n" - ] - } - ], + "outputs": [], + "execution_count": null, "source": [ "from langchain_core.vectorstores import InMemoryVectorStore\n", "from langchain_openai import OpenAIEmbeddings\n", @@ -213,12 +158,127 @@ "docs = vector_store.similarity_search(\"What is LayoutParser?\", k=2)\n", "for doc in docs:\n", " print(f'Page {doc.metadata[\"page\"]}: {doc.page_content[:300]}\\n')" - ] + ], + "id": "c92174e6a92fd0de" }, { + "metadata": {}, "cell_type": "markdown", - "id": "ef200c75-a141-45d9-acdc-261e4d632d1b", + "source": [ + "# Extract and analyse images\n", + "\n" + ], + "id": "6d49ba69a73bc7f2" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qU rapidocr-onnxruntime", + "id": "bba167297068b834" + }, + { "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PyPDFLoader(\n", + " file_path,\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"markdown\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "id": "a6cfde55c0a65bf1" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "It is possible to ask a multimodal LLM to describe the image.", + "id": "435c9502f24cce3d" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ], + "id": "fcc75ed84bb08e98" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "loader = PyPDFLoader(\n", + " file_path,\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o-mini\", max_tokens=1024), format=\"text\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "id": "c016f4eb9a29c2b8" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "# Extract tables\n", + "\n", + "Some parsers can extract tables. This is the case of `PDFPlumberLoader`\n" + ], + "id": "699073731662a94f" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qU langchain_community pdfplumber", + "id": "7a996fde187b536d" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from langchain_community.document_loaders import PDFPlumberLoader\n", + "\n", + "loader = PDFPlumberLoader(\n", + " file_path,\n", + " mode=\"page\",\n", + " extract_tables=\"markdown\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[4].page_content)" + ], + "id": "1cc1a6b6c8fc6e98" + }, + { + "metadata": {}, + "cell_type": "markdown", "source": [ "## Layout analysis and extraction of text from images\n", "\n", @@ -227,84 +287,46 @@ "Under the hood it uses the `langchain-unstructured` library. See the [integration docs](/docs/integrations/document_loaders/unstructured_file/) for more information about using [Unstructured](https://docs.unstructured.io/welcome) with LangChain.\n", "\n", "Unstructured supports multiple parameters for PDF parsing:\n", - "- `strategy` (e.g., `\"fast\"` or `\"hi-res\"`)\n", + "- `strategy` (e.g., `\"auto\"`, `\"fast\"`, `\"ocr_only\"` or `\"hi-res\"`)\n", "- API or local processing. You will need an API key to use the API.\n", "\n", "The [hi-res](https://docs.unstructured.io/api-reference/how-to/choose-hi-res-model) strategy provides support for document layout analysis and OCR. We demonstrate it below via the API. See [local parsing](/docs/how_to/document_loader_pdf/#local-parsing) section below for considerations when running locally." - ] + ], + "id": "88bca3a8ab5af262" }, { - "cell_type": "code", - "execution_count": null, - "id": "b448489a-c1a5-43c8-a69f-1c1e7bc26b69", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [ - "%pip install -qU langchain-unstructured" - ] + "execution_count": null, + "source": "%pip install -qU langchain-unstructured", + "id": "affb07602a288330" }, { - "cell_type": "code", - "execution_count": 2, - "id": "dc403c36-25a0-4fc0-b31a-cc2022f8e5a9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Unstructured API Key: ········\n" - ] - } - ], + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ "import getpass\n", "import os\n", "\n", "if \"UNSTRUCTURED_API_KEY\" not in os.environ:\n", " os.environ[\"UNSTRUCTURED_API_KEY\"] = getpass.getpass(\"Unstructured API Key:\")" - ] + ], + "id": "226f9c2ee2b3132f" }, { - "cell_type": "markdown", - "id": "12a024db-bec2-4f21-b4a8-dd6b94fd0d21", "metadata": {}, - "source": [ - "As before, we initialize a loader and load documents lazily:" - ] + "cell_type": "markdown", + "source": "As before, we initialize a loader and load documents lazily:", + "id": "770bc93d79d2867a" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 7, - "id": "be0575c3-566b-4e26-99c8-ae69b53cfb09", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: Preparing to split document for partition.\n", - "INFO: Starting page number set to 1\n", - "INFO: Allow failed set to 0\n", - "INFO: Concurrency level set to 5\n", - "INFO: Splitting pages 1 to 16 (16 total)\n", - "INFO: Determined optimal split size of 4 pages.\n", - "INFO: Partitioning 4 files with 4 page(s) each.\n", - "INFO: Partitioning set #1 (pages 1-4).\n", - "INFO: Partitioning set #2 (pages 5-8).\n", - "INFO: Partitioning set #3 (pages 9-12).\n", - "INFO: Partitioning set #4 (pages 13-16).\n", - "INFO: HTTP Request: POST https://api.unstructuredapp.io/general/v0/general \"HTTP/1.1 200 OK\"\n", - "INFO: HTTP Request: POST https://api.unstructuredapp.io/general/v0/general \"HTTP/1.1 200 OK\"\n", - "INFO: HTTP Request: POST https://api.unstructuredapp.io/general/v0/general \"HTTP/1.1 200 OK\"\n", - "INFO: HTTP Request: POST https://api.unstructuredapp.io/general/v0/general \"HTTP/1.1 200 OK\"\n", - "INFO: Successfully partitioned set #1, elements added to the final result.\n", - "INFO: Successfully partitioned set #2, elements added to the final result.\n", - "INFO: Successfully partitioned set #3, elements added to the final result.\n", - "INFO: Successfully partitioned set #4, elements added to the final result.\n" - ] - } - ], + "outputs": [], + "execution_count": null, "source": [ "from langchain_unstructured import UnstructuredLoader\n", "\n", @@ -317,74 +339,45 @@ "docs = []\n", "for doc in loader.lazy_load():\n", " docs.append(doc)" - ] + ], + "id": "dd6700c019f5df1b" }, { - "cell_type": "markdown", - "id": "a9f20eff-3df7-425d-84ab-70a76e5f22ce", "metadata": {}, - "source": [ - "Here we recover 171 distinct structures over the 16 page document:" - ] + "cell_type": "markdown", + "source": "Here we recover more than 100 distinct structures over the 16 page document:", + "id": "732f04cc101a6966" }, { - "cell_type": "code", - "execution_count": 8, - "id": "35945b71-f2ca-4480-be18-c8fcc0a7035f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "171\n" - ] - } - ], - "source": [ - "print(len(docs))" - ] + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "print(len(docs))", + "id": "191f924443ba0828" }, { - "cell_type": "markdown", - "id": "619eb7c5-69d9-4d8b-9aa1-fbdd015bb8cd", "metadata": {}, - "source": [ - "We can use the document metadata to recover content from a single page:" - ] + "cell_type": "markdown", + "source": "We can use the document metadata to recover content from a single page:", + "id": "77a5d8a84fe96ab" }, { - "cell_type": "code", - "execution_count": 9, - "id": "648876b4-a686-489d-8a82-d7df4e78754c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LayoutParser: A Unified Toolkit for Deep Learning Based Document Image Analysis\n", - "1 2 0 2 n u J 1 2 ] V C . s c [ 2 v 8 4 3 5 1 . 3 0 1 2 : v i X r a\n", - "Zejiang Shen® (<), Ruochen Zhang?, Melissa Dell®, Benjamin Charles Germain Lee?, Jacob Carlson®, and Weining Li®\n", - "1 Allen Institute for AI shannons@allenai.org 2 Brown University ruochen zhang@brown.edu 3 Harvard University {melissadell,jacob carlson}@fas.harvard.edu 4 University of Washington bcgl@cs.washington.edu 5 University of Waterloo w422li@uwaterloo.ca\n", - "Abstract. Recent advances in document image analysis (DIA) have been primarily driven by the application of neural networks. Ideally, research outcomes could be easily deployed in production and extended for further investigation. However, various factors like loosely organized codebases and sophisticated model configurations complicate the easy reuse of im- portant innovations by a wide audience. Though there have been on-going efforts to improve reusability and simplify deep learning (DL) model development in disciplines like natural language processing and computer vision, none of them are optimized for challenges in the domain of DIA. This represents a major gap in the existing toolkit, as DIA is central to academic research across a wide range of disciplines in the social sciences and humanities. This paper introduces LayoutParser, an open-source library for streamlining the usage of DL in DIA research and applica- tions. The core LayoutParser library comes with a set of simple and intuitive interfaces for applying and customizing DL models for layout de- tection, character recognition, and many other document processing tasks. To promote extensibility, LayoutParser also incorporates a community platform for sharing both pre-trained models and full document digiti- zation pipelines. We demonstrate that LayoutParser is helpful for both lightweight and large-scale digitization pipelines in real-word use cases. The library is publicly available at https://layout-parser.github.io.\n", - "Keywords: Document Image Analysis · Deep Learning · Layout Analysis · Character Recognition · Open Source library · Toolkit.\n", - "1 Introduction\n", - "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of document image analysis (DIA) tasks including document image classification [11,\n" - ] - } - ], + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "first_page_docs = [doc for doc in docs if doc.metadata.get(\"page_number\") == 1]\n", + "first_page_docs = [doc for doc in docs if doc.metadata.get(\"page_number\") == 0]\n", "\n", "for doc in first_page_docs:\n", " print(doc.page_content)" - ] + ], + "id": "f41b10c7ac676042" }, { - "cell_type": "markdown", - "id": "41c07f49-091d-4197-afea-c36f30196f31", "metadata": {}, + "cell_type": "markdown", "source": [ "### Extracting tables and other structures\n", "\n", @@ -395,31 +388,31 @@ "2. Parsed into a more structured representation.\n", "\n", "Below, we identify and extract a table:" - ] + ], + "id": "1138684a520264b9" }, { - "cell_type": "markdown", - "id": "4cccf340-e272-41af-8280-6e97ca687d45", "metadata": {}, + "cell_type": "markdown", "source": [ "
\n", "Click to expand code for rendering pages" - ] + ], + "id": "8586c73ccff251da" }, { - "cell_type": "markdown", - "id": "c9afb64a-eee8-4965-a9f2-176b0224926a", "metadata": {}, - "source": [ - "%pip install -qU matplotlib PyMuPDF pillow" - ] + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qU matplotlib PyMuPDF pillow", + "id": "2d1e76e9fbbd7e37" }, { - "cell_type": "code", - "execution_count": 12, - "id": "5cedb6a7-bd75-4270-9d49-b6806f7cd7c4", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "import fitz\n", "import matplotlib.patches as patches\n", @@ -477,77 +470,34 @@ " if print_text:\n", " for doc in page_docs:\n", " print(f\"{doc.page_content}\\n\")" - ] + ], + "id": "2587cf7318135eab" }, { - "cell_type": "markdown", - "id": "91a9e09d-fed1-42aa-9a8e-07aeedbc5388", "metadata": {}, - "source": [ - "
" - ] + "cell_type": "markdown", + "source": "", + "id": "1bb946cc345de78a" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 28, - "id": "6b44ab2e-52df-4af6-9950-b3f5b46a9b47", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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hUyj0eB2u3G5XNTU1LBt2zbGx8fR6XTMzMxw/vx5tm3bJulKeXl5t1QE4vE4w8PDuFwuysvLaWpqIp1O88orr1BZWSmvUSqVHDhwALh5lubn51lcXMRut6+rTOaQwzsVOU9ADnctLndeBsBeYGf//v38zd/8DQMDA9KSMz4+TmtrK263m3PnznH27FlUKhVbtmzh+eefZ2pqis7OTv72b/+Ww4cP43Q66e7u5vLly1y8eJFz587R3t7O888/TyAQoL6+npqaGu6//35KSkpW8PxFrMG3vvUt3G43DQ0NRKNR+fennnqKixcvUl9fT3NzM9/97nepr6+nqamJyspKjh49ikaj4a//+q/l/YWFhXz729/G7Xbz/e9/n9nZWcrLyzl27BharZaWlhZ2795NW1sbjY2NlJaW8uKLL+JyuZienubChQv09/fT3t7OmTNn6OzsJBQKUVpayv/4H/8DQHoUTp06tWJuDQYD6XSavr4+rl+/Tnt7O2fPnuXpp59mYWGBpqYmvvSlL7G8vIzL5eL8+fN8+9vfxm63097ezunTp3n66aclFWpiYoLKykp0Oh29vb08//zzKz6WAwMD/P3f/z21tbVs2bKFEydO0NPTg1ar5ZlnnmF0dJT6+npeffVVvvnNb2I0GvH7/bzxxhssLy+v2Rv/8i//wuLiImazmePHj9Pb20thYSE3btzg5MmTLCwssGvXLr72ta9JZefFF18kFouxe/dulpaW1nXpX7t2jZmZGex2Ozt37mRgYIDS0lJqampoaWnh6NGjFBYWyjaj0ShFRUX80R/9EalUin379t12zR977LEVlsREIsHCwgLf/e53aWhoQKfT0d/fz7Fjx6isrMRuv7n/BRdawGq1UldXR1tbG+3t7TQ1NcnCTU6nE4fDwY4dO/irv/orlpeXOX78OM8++yx1dXVs2bKFJ554gomJiRV7PJPJ8Pzzz+P3+zGZTHz5y18mkUjQ0NDAsWPHeO655wAYGhrinnvuoaKigpaWFvbu3btGEDabzZSUlPA//sf/QKFQkEwmOXXqFI8//jgtLS0888wzzMzM0Nvby8WLFxkZGWHv3r289tprXLt2jfn5eaanp/lf/+t/sWfPHtRqtbTQxmIxvvSlL5Gfn09zczM+n48nn3xyxfMHBgbo6upi165dkqqyEfVF9H18fJypqakVFL94PE5H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gK6uLp577jm5dzs7O7nrrru47777pNIo6JgrKysAUsEoHQ+4lM3Jbreze/du7rvvPu6//37a29sZHR0lHA5TVVXF/fffz7e+9S1mZ2eZmpraZAgpo4z3KsqBwWXc9JiemWZsbIxnn32We++9l/r6emZmZpienubkyZMYjUYGBwelVel973sfp0+fxmKxYLFYsNvtfOUrX+H73/8+RqOR5eVluru7CYfDfOITn8BoNMpCXPX19Tz66KN0dHTQ0tLC7t27yefzvPLKK0SjUT72sY+xa9euTVSD1tZWXnvtNVZXV6UlUVAWEomEpMaMj4/T39/P6uoq2WxWZlbp7++XQmlDQwOf+MQn+PjHP843v/lNBgcH8fl85HI5jhw5woEDBxgcHJSZWEpx8uRJFhcXuffee9m7dy+tra24XC6ZQScejzM9PU1tbS0TExOMjY2xtLRERUUFs7OzXLx4kXg8jtfrZWlpibm5OdLptLSOxWIxpqen+f3f/31Jn5icnGRycpLf+73fo6+vj7m5OWpra8lmszz77LMEAgHJsfDzkQAAkLhJREFUxd4aSFdRUUFVVRVHjx6loaGBxcVF5ufnWVhY4Pjx46jVamZmZpiampLei5GREUnx0ul0dHZ2smfPHl566SVuvfVW6uvr5f0F5WZxcVEKRT6fj5aWFgYHB1lcXCSdTvOhD32Ij3/843z961+nr6+PyclJVCoVhw4dkvfq6elhdnaWgwcPUlFRQWNjIz6fj/7+fqampiR1RIxZVVUV99xzD3v37qWvrw+tVksoFJJBmKdOncJgMDAwMCD53MePH2dubo6Kigqy2SwDAwNUVFTwr//1v+anP/0poVCI7du3EwwGef/734/JZCIQCDA3N0c4HGZ2dhaXy8X8/DyJRILjx4+jUCiYn59namoKm82G0+nklVde4fbbb2d+fp7p6WnUajXnz5/n8OHDbNu2jWQyicPhYNu2bZvmS6/Xs23bNu677z6OHz+OXq+XgdBNTU1ks1kmJyeZnZ1ldnaW/v5+YrEY73vf+ySF75577uHWW2/le9/7HufOnSMSidDa2komk+G1115jamqKD3zgAzQ2NtLZ2UkwGOTo0aNYrVZcLheTk5N0d3czNTXF5OQk/f39LC8vo1KpOHDgABaLhVdffZV9+/ZtChAXbXrjjTdkoPrExATHjh3jrrvu4vDh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MCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADAjAQAAMCMBAAAwIwEAADATRrQUAfNzasYAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LayoutParser: A Unified Toolkit for DL-Based DIA\n", - "\n", - "5\n", - "\n", - "Table 1: Current layout detection models in the LayoutParser model zoo\n", - "\n", - "Dataset Base Model1 Large Model Notes PubLayNet [38] PRImA [3] Newspaper [17] TableBank [18] HJDataset [31] F / M M F F F / M M - - F - Layouts of modern scientific documents Layouts of scanned modern magazines and scientific reports Layouts of scanned US newspapers from the 20th century Table region on modern scientific and business document Layouts of history Japanese documents\n", - "\n", - "1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101 backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model zoo in coming months.\n", - "\n", - "layout data structures, which are optimized for efficiency and versatility. 3) When necessary, users can employ existing or customized OCR models via the unified API provided in the OCR module. 4) LayoutParser comes with a set of utility functions for the visualization and storage of the layout data. 5) LayoutParser is also highly customizable, via its integration with functions for layout data annotation and model training. We now provide detailed descriptions for each component.\n", - "\n", - "3.1 Layout Detection Models\n", - "\n", - "In LayoutParser, a layout model takes a document image as an input and generates a list of rectangular boxes for the target content regions. Different from traditional methods, it relies on deep convolutional neural networks rather than manually curated rules to identify content regions. It is formulated as an object detection problem and state-of-the-art models like Faster R-CNN [28] and Mask R-CNN [12] are used. This yields prediction results of high accuracy and makes it possible to build a concise, generalized interface for layout detection. LayoutParser, built upon Detectron2 [35], provides a minimal API that can perform layout detection with only four lines of code in Python:\n", - "\n", - "1 import layoutparser as lp 2 image = cv2 . imread ( \" image_file \" ) # load images 3 model = lp . De t e c tro n2 Lay outM odel ( \" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config \" ) 4 5 layout = model . detect ( image )\n", - "\n", - "LayoutParser provides a wealth of pre-trained model weights using various datasets covering different languages, time periods, and document types. Due to domain shift [7], the prediction performance can notably drop when models are ap- plied to target samples that are significantly different from the training dataset. As document structures and layouts vary greatly in different domains, it is important to select models trained on a dataset similar to the test samples. A semantic syntax is used for initializing the model weights in LayoutParser, using both the dataset name and model name lp:///.\n", - "\n" - ] - } - ], - "source": [ - "render_page(docs, 5)" - ] + "outputs": [], + "execution_count": null, + "source": "render_page(docs, 5)", + "id": "2789c8be1888b548" }, { - "cell_type": "markdown", - "id": "0267a271-e1bd-483c-96c3-36eb1387dd3f", "metadata": {}, - "source": [ - "Note that although the table text is collapsed into a single string in the document's content, the metadata contains a representation of its rows and columns:" - ] + "cell_type": "markdown", + "source": "Note that although the table text is collapsed into a single string in the document's content, the metadata contains a representation of its rows and columns:", + "id": "7432b359a1c4a998" }, { - "cell_type": "code", - "execution_count": null, - "id": "3f91df64-94db-4228-8a75-34bf83117e15", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "from IPython.display import HTML, display\n", "\n", @@ -558,64 +508,40 @@ "]\n", "\n", "display(HTML(segments[0][\"text_as_html\"]))" - ] + ], + "id": "2119580a626cba86" }, { - "cell_type": "markdown", - "id": "3ac2c37a-06a1-40d3-a192-9078eb83994b", "metadata": {}, - "source": [ - "
able 1. LUllclll 1ayoul actCCLloll 1110AdCs 111 L1C LayoOulralsel 1110U4cl 200
Dataset| Base Model\\'|Notes
PubLayNet [38]F/MLayouts of modern scientific documents
PRImAMLayouts of scanned modern magazines and scientific reports
NewspaperFLayouts of scanned US newspapers from the 20th century
TableBank [18]FTable region on modern scientific and business document
HJDatasetF/MLayouts of history Japanese documents
" - ] + "cell_type": "markdown", + "source": "
able 1. LUllclll 1ayoul actCCLloll 1110AdCs 111 L1C LayoOulralsel 1110U4cl 200
Dataset| Base Model\\'|Notes
PubLayNet [38]F/MLayouts of modern scientific documents
PRImAMLayouts of scanned modern magazines and scientific reports
NewspaperFLayouts of scanned US newspapers from the 20th century
TableBank [18]FTable region on modern scientific and business document
HJDatasetF/MLayouts of history Japanese documents
", + "id": "a562193d4c974378" }, { - "cell_type": "markdown", - "id": "c16d24f8-be5f-4616-9a79-9761788b30f8", "metadata": {}, + "cell_type": "markdown", "source": [ "### Extracting text from specific sections\n", "\n", "Structures may have parent-child relationships -- for example, a paragraph might belong to a section with a title. If a section is of particular interest (e.g., for indexing) we can isolate the corresponding `Document` objects.\n", "\n", "Below, we extract all text associated with the document's \"Conclusion\" section:" - ] + ], + "id": "9ecc9e161c5dea9b" }, { - "cell_type": "code", - "execution_count": 31, - "id": "abb9f9e1-3a64-40bc-bea8-7ab74e3a4ca2", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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njzJ2NgY6XSaUCjErl27aGhooKenB5lMxoc+9CG6u7v5H//jf4h9qra2lpMnT6JWqzlw4IB47uzsLEtLSxw8eJCVlRXS6TR1dXV0dnYSCoUYHh4ml8thsVhwOp1s2bJl3dpPJpMcPnwYhULBpUuXyOVy1NbWYjQacblc7N+/XyghVVTxbkaVDlTFLQm57MrU3bFzB729vRw+fFhU4BwfH+dHP/oRCoWCpaUlfvzjH+PxeKipqaGvr49XXnkFmUxGNBplfn4et9tNc3MzTz31FH19feh0OqxWK1/+8peBK0L2pUuXeOWVVwT//u/+7u+EpXRgYIBLly5RKBT4h3/4ByKRCHq9nh/84AccPHjwqlzU5XKZv/7rv8ZisbBv3z7K5TL/43/8D4xGI729vezcuZOenh7q6+tvqC80Gg1ms5m5uTlhpb9RtLW1MTs7yze/+U3kcjkWi4X//t//O0NDQ+j1ekZGRrh48SLFYpF/+Zd/4dSpU+zbt49du3bx5S9/GY/Hw+DgIM899xyRSIQDBw6wurpKKpUik8kwOzvLww8/zF133cXY2BhDQ0NEo1Hx/kQiwdjYGH6/n507d7K0tCSEMQmlUomvfe1rZDIZenp6UKvVfPOb3yQej2OxWHj88cc5e/YsTqeTwcFBhoaGROVVCUajkaWlJaampohGo5hMJp588kkSiQRtbW0MDw/zve99T4zvz3/+c6ampkSl3meeeUaM79GjR2loaMDhcPCf/tN/wufzodPpiMfjHDlyBL1ej8/nY2JigunpaaampvjmN7/JoUOHGBwcZHh4+CrayeLiIqdOneL48ePceeedRKNRoQTMzc3xpS99iX379rF3716OHTvGL37xC5LJJP/0T/9EMpmko6OD5eVlnn76aZxOJ7/85S+JRCI4nU4KhQI//vGPAbBarTz66KNcuHABu93OhQsX+O53v0tTUxMTExP86le/Ip/P4/f7+fa3v41er0er1fLKK6+QyWRYWFjg6aefJpVKYTab+cd//EcADhw4wK5du9i9ezd33HHHVfNMp9PR0dHB97//feLxOAaDAbfbzT/+4z/S3d3N0NAQjzzyCG63m7q6Oh5++GFhjT116hTnzp1j586d/M//+T/x+Xxks1lee+01vvvd73L48GG++c1vUldXh8lkYmRkhO9///vcf//9nD59mqmpqauoabOz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4eabb77gnswjj/cy8nSgPPI4D5RKJT//+c/54Q9/yAc/+EEmJib46le/itlsprm5mU2bNrFlyxYqKir45je/iVarlRUiT5w4QU1NDcXFxbJy5BVXXIFarebKK69kenoan8/H0NAQP/jBD6ipqaGyspLh4WGi0ShXXnklkUiE++67j61bt84qBrQQli9fzhVXXMFdd93Fddddx8MPP0wwGJxVAOhC/f3Rj37ET37yE+69916mp6f56le/SnFxMZWVlZjNZgwGAzt27CCRSGC1Wqmvr6e1tZWrrrqKmpoaotEo+/btY/fu3fh8Pq655hpUKhVTU1N0dnYSjUb5l3/5FxKJBPv27cPn80nt+NOnT3PfffdRUFCA1+vFarXygQ98gFOnTsnqoQD9/f0YjUaam5upqanhuuuu4zOf+czFT/RFQqFQcP3117N69Wri8Ti7d++e9XeDwUBtbS0333wzHo+H5uZmNBoN09PTGI1GvvzlL1NdXc0VV1zBli1bsFqtPPTQQ6TTaTZs2EBDQwNNTU38zd/8zaKMjUQiwcTEBPfddx8//vGPOXLkyGXtb0NDA+Xl5fLUZ/v27ZKWc/LkSSKRCHfffTcf/OAHJX1oaGiIM2fOUF9fz5/92Z/x61//GofDQXV1NTabjQMHDlBfX49Go6G2tpY77riDe++994LOSyKRwOPxMDo6SkVFBV/96leXbJQVFRVx44038uyzz7J3714sFgsrVqxAq9Wya9cuqqqq8Pv9DA4OMj09TX19PSqVitbWVjZv3ozNZuPQoUPAW8nZzc3NbN26lbq6Ovbt28fExAQHDx5Eo9Fw4403csMNN/AP//APs/aTXq9nx44dJJNJ9u/fj8PhoK6ujptvvpmPfOQjMhm2p6eHp556ii9/+cu8//3v56WXXuLUqVPU19ezYsUKXnjhhQvmulitVu6++26eeuop/H7/ktRv5qKuro6CggL8fj8TExOMjY1RUVFBSUkJq1at4uqrr6a6upqHHnqIUChET08Pb775JsePH2fHjh1YrVZWrFghTxw3bdokaYMHDhygs7OTm266iWuvvVae9LW1tfHLX/6S2tpaVq1axbFjx9BoNGzduhV4az+uWbOGnTt3csstt7Br1y7sdjuvvfYafr+furo61q1bRygUYtu2bZSUlODxeBaVs3Xrrbfi9/s5cODAJY1bHnm8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7ej1etavXy8Uy3Q6fc2879y5k46ODrLZLAcPHsTj8bB79270ej16vZ6GhgampqbQarV85CMfYceOHdTU1LBz5078fj/PPfccwWCQiooKmpqaqKio4A//8A958803uXTpErW1tfh8Pg4fPozL5cJiseByudiyZQtr1qyhp6eH5557jnPnzolK55cuXSIej3Px4kXeeOMN+vr6uOOOO5iamuLw4cNMT0/j9/sxm5f6+5vNZtauXUt7eztarVa8c3fv3s19993HN7/5TZRKJVarFZPJxP3338/DDz8slE6lUonBYGDnzp10dXXR2dmJXq9naGiIQ4cOYbVa0el0pFIpKisr+Xf/7t/xyiuvYLFYePDBBzlw4ABdXV1ifbhcrlvqcikj824hr1KZ9z2SO0IsFqOvr4+pqSnm5uYoFos3fS2lUonP52NhYYGxsTEGBwcZHh5m165dNDY2srCwQDqdRqlU0t7eLlwZDAYDR48eRafT0drayve//33Wrl2L2WxelUXfYrHgdDqx2+03lXFnJcrlMjMzM0xNTREKhXA6nWzZskVYxJLJJHNzc2zdupVyuUw6nb4pf3yVSoXFYsFms/H666/T0NBwS6xikqX1hRde4C//8i8xmUykUimSySRqtRqPx4NCoVi1y9fVlEolzpw5w+bNm5cVSm+EUqmkoqJCuFHAFeVosftVLpcjm/23amxOp1MIipI71fWQhL8NGzZw4MABMd6FhQVqa68NcF8Nc3NzBAIBpqensVgsbN68WVjpJVcIaX1ks9lVBUzfDCutjTvvvBO4YpXu7u4Wv/f19aHX64Url16vF1WyU6kUAwMD/M3f/A1f+9rXcDqdlEol4R7idDqFgDY2NsY3vvEN/ut//a/4fD6KxSKRSIRsNivu2eIK2tL/x8bGSKVS+Hy+Jc+IQqFgeHj4ujs5AA6HA61WKxRO6V3R3d2NSqVienqaUqnEM888w6c+9Snq6uqWrJlMJiN2x+DXGZSSSUql0jW7dcVi8ZpnYWxsjB/+8Ifs3LmT2tpadDod4XCY++67jx/96Edks1laWlro6emho6MDnU7HxMQEFy5cYH5+nkceeURUGpdcjZxOJ3DlGaqsrGTLli3Y7XbWrFmDxWJBr9eLOBFpzRaLRRwOB16vl23bttHV1UUul+PDH/4wd911F/39/XzrW9/iE5/4BHq9nnPn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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "render_page(docs, 14, print_text=False)" - ] + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "render_page(docs, 14, print_text=False)", + "id": "94908d5097b5db89" }, { - "cell_type": "code", - "execution_count": 32, - "id": "a9155a30-ad45-4eec-b707-8142a9c27e0e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LayoutParser provides a comprehensive toolkit for deep learning-based document image analysis. The off-the-shelf library is easy to install, and can be used to build flexible and accurate pipelines for processing documents with complicated structures. It also supports high-level customization and enables easy labeling and training of DL models on unique document image datasets. The LayoutParser community platform facilitates sharing DL models and DIA pipelines, inviting discussion and promoting code reproducibility and reusability. The LayoutParser team is committed to keeping the library updated continuously and bringing the most recent advances in DL-based DIA, such as multi-modal document modeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\n", - "Acknowledgements We thank the anonymous reviewers for their comments and suggestions. This project is supported in part by NSF Grant OIA-2033558 and funding from the Harvard Data Science Initiative and Harvard Catalyst. Zejiang Shen thanks Doug Downey for suggestions.\n" - ] - } - ], + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ "conclusion_docs = []\n", "parent_id = -1\n", @@ -627,75 +553,36 @@ "\n", "for doc in conclusion_docs:\n", " print(doc.page_content)" - ] + ], + "id": "fb3b5c8e6676c922" }, { - "cell_type": "markdown", - "id": "23d3be20-7adc-4a96-a97e-4777eb79b0cc", "metadata": {}, + "cell_type": "markdown", "source": [ "### Extracting text from images\n", "\n", "OCR is run on images, enabling the extraction of text therein:" - ] + ], + "id": "46909c119aa8d4df" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 33, - "id": "3a17993b-13d0-42f4-a3ec-4e4a600cc65c", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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Fz97y+XX/C5oD0IQcDe/UURfNAYB9FC6mxesfKvPL0jK/5Y/S6fTuHLlCgYGBlBVVYV0Oo1AIIB169bdchrP5Y4D3P7HaP6P4O22XfzdxX9bfF6rNf+Yt/ohXe74iwvW8z+Tt5n/oz//e7dL7+JCw92c02rzYrV5sJzl8mDxvu/22iyXPjldK+13/ufydounjpT3catjLPedxd9dzX273P5X81yslGcrncdK+1/u2q50fDl4n3/P3c31vZtrs5rnYbnzvRf36EpWcx1ud863OhfZcvu+1bN/L56pzxuDAHoYsDsQFQz5x2Lxj8b8HxKVSoXy8nLRBzeXy8Hn88HpdN7xce7mu7fa9nZ/u9sfw/nb3WqA3XL7X+5HenG/6ZW+e7v03qtzutPv3+kgw9sFKfeioLLc9ivtd/7n8/++mvy+2/SsZts73f9K3/8sn9/u2t7ufl5p/7d6p6z0+eJrc6fX507y824C6dula7XnvJpt7+S4d3osIloZgwB6qHUuvwL9Z6AAdG6gyI3wvE+DOWDBB0RERCu4979NRPcegwB6KLnUgEEBfL3zfqeEiIhoKYPi5m8V0YOKYwLooTWUAILLz7RIRER0X7nUQLnu9t8jul8YBBARERERFZi7Gy1EREREREQPLQYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERUYBgFERERERAWGQQARERERUYFhEEBEREREVGAYBBARERERFRgGAUREREREBYZBABERERFRgWEQQERERERUYBgEEBEREREVGAYBREREREQFhkEAEREREVGBYRBARERERFRgGAQQERERERWY/x9i+iv/PHtlUAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "LayoutParser: A Unified Toolkit for DL-Based DIA\n", - "\n", - "focuses on precision, efficiency, and robustness. The target documents may have complicated structures, and may require training multiple layout detection models to achieve the optimal accuracy. Light-weight pipelines are built for relatively simple documents, with an emphasis on development ease, speed and flexibility. Ideally one only needs to use existing resources, and model training should be avoided. Through two exemplar projects, we show how practitioners in both academia and industry can easily build such pipelines using LayoutParser and extract high-quality structured document data for their downstream tasks. The source code for these projects will be publicly available in the LayoutParser community hub.\n", - "\n", - "11\n", - "\n", - "5.1 A Comprehensive Historical Document Digitization Pipeline\n", - "\n", - "The digitization of historical documents can unlock valuable data that can shed light on many important social, economic, and historical questions. Yet due to scan noises, page wearing, and the prevalence of complicated layout structures, ob- taining a structured representation of historical document scans is often extremely complicated. In this example, LayoutParser was used to develop a comprehensive pipeline, shown in Figure 5, to gener- ate high-quality structured data from historical Japanese firm financial ta- bles with complicated layouts. The pipeline applies two layout models to identify different levels of document structures and two customized OCR engines for optimized character recog- nition accuracy.\n", - "\n", - "‘Active Learning Layout Annotate Layout Dataset | +—— Annotation Toolkit A4 Deep Learning Layout Layout Detection Model Training & Inference, A Post-processing — Handy Data Structures & \\ Lo orajport 7 ) Al Pls for Layout Data A4 Default and Customized Text Recognition 0CR Models ¥ Visualization & Export Layout Structure Visualization & Storage The Japanese Document Helpful LayoutParser Modules Digitization Pipeline\n", - "\n", - "As shown in Figure 4 (a), the document contains columns of text written vertically 15, a common style in Japanese. Due to scanning noise and archaic printing technology, the columns can be skewed or have vari- able widths, and hence cannot be eas- ily identified via rule-based methods. Within each column, words are sepa- rated by white spaces of variable size, and the vertical positions of objects can be an indicator of their layout type.\n", - "\n", - "Fig. 5: Illustration of how LayoutParser helps with the historical document digi- tization pipeline.\n", - "\n", - "15 A document page consists of eight rows like this. For simplicity we skip the row segmentation discussion and refer readers to the source code when available.\n", - "\n" - ] - } - ], - "source": [ - "render_page(docs, 11)" - ] + "outputs": [], + "execution_count": null, + "source": "render_page(docs, 11)", + "id": "9038ca7186debbf5" }, { - "cell_type": "markdown", - "id": "8a1082e2-ba2f-407f-8334-7636a126286d", "metadata": {}, - "source": [ - "Note that the text from the figure on the right is extracted and incorporated into the content of the `Document`." - ] + "cell_type": "markdown", + "source": "Note that the text from the figure on the right is extracted and incorporated into the content of the `Document`.", + "id": "183205ea7757c8f7" }, { - "cell_type": "markdown", - "id": "e54be5d8-8492-4ea1-b67d-e6d2d6479313", "metadata": {}, + "cell_type": "markdown", "source": [ "### Local parsing\n", "\n", @@ -712,77 +599,28 @@ "- Windows: https://github.com/UB-Mannheim/tesseract/wiki#tesseract-installer-for-windows\n", "\n", "We will also need to install the `unstructured` PDF extras:" - ] + ], + "id": "b13695da1644829b" }, { - "cell_type": "code", - "execution_count": null, - "id": "1b40d487-d29c-49be-9dea-4419d1c90067", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [ - "%pip install -qU \"unstructured[pdf]\"" - ] + "execution_count": null, + "source": "%pip install -qU \"unstructured[pdf]\"", + "id": "2713c8364b586bb0" }, { - "cell_type": "markdown", - "id": "6c1ccfbe-eb94-4238-9e05-975383c9e426", "metadata": {}, - "source": [ - "We can then use the [UnstructuredLoader](https://python.langchain.com/api_reference/unstructured/document_loaders/langchain_unstructured.document_loaders.UnstructuredLoader.html) much the same way, forgoing the API key and `partition_via_api` setting:" - ] + "cell_type": "markdown", + "source": "We can then use the [UnstructuredLoader](https://python.langchain.com/api_reference/unstructured/document_loaders/langchain_unstructured.document_loaders.UnstructuredLoader.html) much the same way, forgoing the API key and `partition_via_api` setting:", + "id": "fc75c955e3058e53" }, { + "metadata": {}, "cell_type": "code", - "execution_count": 11, - "id": "a25560bc-0034-49fe-91fc-4a402804fd84", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: This function will be deprecated in a future release and `unstructured` will simply use the DEFAULT_MODEL from `unstructured_inference.model.base` to set default model name\n", - "INFO: Reading PDF for file: /Users/chestercurme/repos/langchain/libs/community/tests/integration_tests/examples/layout-parser-paper.pdf ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Detecting page elements ...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: padding image by 20 for structure detection\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: padding image by 20 for structure detection\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n", - "INFO: Processing entire page OCR with tesseract...\n" - ] - } - ], + "outputs": [], + "execution_count": null, "source": [ "loader_local = UnstructuredLoader(\n", " file_path=file_path,\n", @@ -791,12 +629,12 @@ "docs_local = []\n", "for doc in loader_local.lazy_load():\n", " docs_local.append(doc)" - ] + ], + "id": "6ad3457045865836" }, { - "cell_type": "markdown", - "id": "6a5a7a95-c7fb-40ef-b98b-bbef2d501900", "metadata": {}, + "cell_type": "markdown", "source": [ "The list of documents can then be processed similarly to those obtained from the API.\n", "\n", @@ -807,24 +645,22 @@ "In principle we can use any LangChain [chat model](/docs/concepts/chat_models) that supports multimodal inputs. A list of these models is documented [here](/docs/integrations/chat/). Below we use OpenAI's `gpt-4o-mini`.\n", "\n", "First we define a short utility function to convert a PDF page to a base64-encoded image:" - ] + ], + "id": "f0d8269765fde9fc" }, { - "cell_type": "code", - "execution_count": null, - "id": "e9f9a7f9-bab4-4278-8d9f-dea0260a7c86", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [ - "%pip install -qU PyMuPDF pillow langchain-openai" - ] + "execution_count": null, + "source": "%pip install -qU PyMuPDF pillow langchain-openai", + "id": "2746aac2f238a226" }, { - "cell_type": "code", - "execution_count": 22, - "id": "ec2fbae5-f3dc-4b84-8b43-145d27c334fd", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "import base64\n", "import io\n", @@ -843,74 +679,46 @@ " img.save(buffer, format=\"PNG\")\n", "\n", " return base64.b64encode(buffer.getvalue()).decode(\"utf-8\")" - ] + ], + "id": "1b405b235fec6d46" }, { - "cell_type": "code", - "execution_count": 23, - "id": "66f157bd-6752-45f6-9f7b-b0c650045b8a", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ "from IPython.display import Image as IPImage\n", "from IPython.display import display\n", "\n", "base64_image = pdf_page_to_base64(file_path, 11)\n", "display(IPImage(data=base64.b64decode(base64_image)))" - ] + ], + "id": "21780bc75c00a634" }, { - "cell_type": "markdown", - "id": "14e273e9-d35b-4701-a48e-b1d3cbe9892b", "metadata": {}, - "source": [ - "We can then query the model in the [usual way](/docs/how_to/multimodal_inputs/). Below we ask it a question on related to the diagram on the page." - ] + "cell_type": "markdown", + "source": "We can then query the model in the [usual way](/docs/how_to/multimodal_inputs/). Below we ask it a question on related to the diagram on the page.", + "id": "33aaf63627020362" }, { - "cell_type": "code", - "execution_count": 24, - "id": "5bbad8ef-dd8b-4ab9-88c6-0a3872c658b5", "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ "from langchain_openai import ChatOpenAI\n", "\n", "llm = ChatOpenAI(model=\"gpt-4o-mini\")" - ] + ], + "id": "b6adde8762f06e8a" }, { - "cell_type": "code", - "execution_count": 25, - "id": "c5a45247-3b80-448c-979e-642741347aba", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The first step in the pipeline is \"Annotate Layout Dataset.\"\n" - ] - } - ], + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ "from langchain_core.messages import HumanMessage\n", "\n", @@ -927,32 +735,33 @@ ")\n", "response = llm.invoke([message])\n", "print(response.content)" - ] + ], + "id": "8c56231d45e98fbb" }, { - "cell_type": "markdown", - "id": "2e1853d6-4609-4eb3-a4cd-74b8f2a4e32f", "metadata": {}, + "cell_type": "markdown", "source": [ "## Other PDF loaders\n", "\n", "For a list of available LangChain PDF loaders, please see [this table](/docs/integrations/document_loaders/#pdfs)." - ] + ], + "id": "8ed19235e5e266e1" }, { - "cell_type": "code", - "execution_count": null, - "id": "d23babb2-d538-437e-b26a-5e5e002c42a8", "metadata": {}, + "cell_type": "code", "outputs": [], - "source": [] + "execution_count": null, + "source": "", + "id": "d458df6d9142d2fe" } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "patch-langchain", "language": "python", - "name": "python3" + "name": "patch" }, "language_info": { "codemirror_mode": { @@ -964,7 +773,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.4" + "version": "3.12.7" } }, "nbformat": 4, diff --git a/docs/docs/integrations/document_loaders/pdfminer.ipynb b/docs/docs/integrations/document_loaders/pdfminer.ipynb index ccb5fff8a236f..c35b4fd5fdd84 100644 --- a/docs/docs/integrations/document_loaders/pdfminer.ipynb +++ b/docs/docs/integrations/document_loaders/pdfminer.ipynb @@ -4,39 +4,48 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PDFMiner\n", + "# PDFMinerLoader\n", + "\n", + "This notebook provides a quick overview for getting started with `PDFMiner` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all DocumentLoader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFMinerLoader.html).\n", + "\n", "\n", "## Overview\n", "### Integration details\n", "\n", - "\n", "| Class | Package | Local | Serializable | JS support|\n", "| :--- | :--- | :---: | :---: | :---: |\n", - "| [PDFMinerLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFMinerLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + "| [PDFMinerLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFMinerLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + " \n", + "--------- \n", + "\n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| PDFMinerLoader | ✅ | ❌ | \n", + "\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "| :---: | :---: | :---: | :---: |:---: |\n", + "| PDFMinerLoader | ✅ | ❌ | ✅ | ❌ |\n", "\n", "\n", "## Setup\n", "\n", "### Credentials\n", "\n", - "No credentials are needed for this loader." + "No credentials are required to use `PDFMinerLoader`." ] }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" - ] + "source": "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 1, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:53:51.062396Z", + "start_time": "2024-12-16T07:53:51.059647Z" + } + }, "outputs": [], "source": [ "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", @@ -49,17 +58,29 @@ "source": [ "### Installation\n", "\n", - "Install **langchain_community**." + "Install **langchain_community** and **pdfminer-six**." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -qU langchain_community" - ] + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:53:55.153823Z", + "start_time": "2024-12-16T07:53:52.349508Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": "%pip install -qU langchain_community pdfminer-six" }, { "cell_type": "markdown", @@ -72,8 +93,13 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:01.693021Z", + "start_time": "2024-12-16T07:54:00.941661Z" + } + }, "outputs": [], "source": [ "from langchain_community.document_loaders import PDFMinerLoader\n", @@ -85,69 +111,962 @@ { "cell_type": "markdown", "metadata": {}, + "source": "## Load" + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:03.914481Z", + "start_time": "2024-12-16T07:54:03.279522Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'author': '', 'creationdate': '2021-06-22T01:27:10+00:00', 'creator': 'LaTeX with hyperref', 'keywords': '', 'moddate': '2021-06-22T01:27:10+00:00', 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'producer': 'pdfTeX-1.40.21', 'subject': '', 'title': '', 'trapped': 'False', 'total_pages': 16, 'source': './example_data/layout-parser-paper.pdf'}, page_content='1\\n2\\n0\\n2\\n\\nn\\nu\\nJ\\n\\n1\\n2\\n\\n]\\n\\nV\\nC\\n.\\ns\\nc\\n[\\n\\n2\\nv\\n8\\n4\\n3\\n5\\n1\\n.\\n3\\n0\\n1\\n2\\n:\\nv\\ni\\nX\\nr\\na\\n\\nLayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\n\\nZejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\n\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\n\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis\\n· Character Recognition · Open Source library · Toolkit.\\n\\n1\\n\\nIntroduction\\n\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\n\\x0c2\\n\\nZ. Shen et al.\\n\\n37], layout detection [38, 22], table detection [26], and scene text detection [4].\\nA generalized learning-based framework dramatically reduces the need for the\\nmanual specification of complicated rules, which is the status quo with traditional\\nmethods. DL has the potential to transform DIA pipelines and benefit a broad\\nspectrum of large-scale document digitization projects.\\n\\nHowever, there are several practical difficulties for taking advantages of re-\\ncent advances in DL-based methods: 1) DL models are notoriously convoluted\\nfor reuse and extension. Existing models are developed using distinct frame-\\nworks like TensorFlow [1] or PyTorch [24], and the high-level parameters can\\nbe obfuscated by implementation details [8]. It can be a time-consuming and\\nfrustrating experience to debug, reproduce, and adapt existing models for DIA,\\nand many researchers who would benefit the most from using these methods lack\\nthe technical background to implement them from scratch. 2) Document images\\ncontain diverse and disparate patterns across domains, and customized training\\nis often required to achieve a desirable detection accuracy. Currently there is no\\nfull-fledged infrastructure for easily curating the target document image datasets\\nand fine-tuning or re-training the models. 3) DIA usually requires a sequence of\\nmodels and other processing to obtain the final outputs. Often research teams use\\nDL models and then perform further document analyses in separate processes,\\nand these pipelines are not documented in any central location (and often not\\ndocumented at all). This makes it difficult for research teams to learn about how\\nfull pipelines are implemented and leads them to invest significant resources in\\nreinventing the DIA wheel.\\n\\nLayoutParser provides a unified toolkit to support DL-based document image\\nanalysis and processing. To address the aforementioned challenges, LayoutParser\\nis built with the following components:\\n\\n1. An off-the-shelf toolkit for applying DL models for layout detection, character\\n\\nrecognition, and other DIA tasks (Section 3)\\n\\n2. A rich repository of pre-trained neural network models (Model Zoo) that\\n\\nunderlies the off-the-shelf usage\\n\\n3. Comprehensive tools for efficient document image data annotation and model\\n\\ntuning to support different levels of customization\\n\\n4. A DL model hub and community platform for the easy sharing, distribu-\\ntion, and discussion of DIA models and pipelines, to promote reusability,\\nreproducibility, and extensibility (Section 4)\\n\\nThe library implements simple and intuitive Python APIs without sacrificing\\ngeneralizability and versatility, and can be easily installed via pip. Its convenient\\nfunctions for handling document image data can be seamlessly integrated with\\nexisting DIA pipelines. With detailed documentations and carefully curated\\ntutorials, we hope this tool will benefit a variety of end-users, and will lead to\\nadvances in applications in both industry and academic research.\\n\\nLayoutParser is well aligned with recent efforts for improving DL model\\nreusability in other disciplines like natural language processing [8, 34] and com-\\nputer vision [35], but with a focus on unique challenges in DIA. We show\\nLayoutParser can be applied in sophisticated and large-scale digitization projects\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n3\\n\\nthat require precision, efficiency, and robustness, as well as simple and light-\\nweight document processing tasks focusing on efficacy and flexibility (Section 5).\\nLayoutParser is being actively maintained, and support for more deep learning\\nmodels and novel methods in text-based layout analysis methods [37, 34] is\\nplanned.\\n\\nThe rest of the paper is organized as follows. Section 2 provides an overview\\nof related work. The core LayoutParser library, DL Model Zoo, and customized\\nmodel training are described in Section 3, and the DL model hub and commu-\\nnity platform are detailed in Section 4. Section 5 shows two examples of how\\nLayoutParser can be used in practical DIA projects, and Section 6 concludes.\\n\\n2 Related Work\\n\\nRecently, various DL models and datasets have been developed for layout analysis\\ntasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\\ntation tasks on historical documents. Object detection-based methods like Faster\\nR-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\\nand detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\\nbeen used in table detection [27]. However, these models are usually implemented\\nindividually and there is no unified framework to load and use such models.\\n\\nThere has been a surge of interest in creating open-source tools for document\\nimage processing: a search of document image analysis in Github leads to 5M\\nrelevant code pieces 6; yet most of them rely on traditional rule-based methods\\nor provide limited functionalities. The closest prior research to our work is the\\nOCR-D project7, which also tries to build a complete toolkit for DIA. However,\\nsimilar to the platform developed by Neudecker et al. [21], it is designed for\\nanalyzing historical documents, and provides no supports for recent DL models.\\nThe DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\\ndocuments via analyzing the stored PDF data. Repositories like DeepLayout9\\nand Detectron2-PubLayNet10 are individual deep learning models trained on\\nlayout analysis datasets without support for the full DIA pipeline. The Document\\nAnalysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\\naim to improve the reproducibility of DIA methods (or DL models), yet they\\nare not actively maintained. OCR engines like Tesseract [14], easyOCR11 and\\npaddleOCR12 usually do not come with comprehensive functionalities for other\\nDIA tasks like layout analysis.\\n\\nRecent years have also seen numerous efforts to create libraries for promoting\\nreproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n\\n6 The number shown is obtained by specifying the search type as ‘code’.\\n7 https://ocr-d.de/en/about\\n8 https://github.com/BobLd/DocumentLayoutAnalysis\\n9 https://github.com/leonlulu/DeepLayout\\n10 https://github.com/hpanwar08/detectron2\\n11 https://github.com/JaidedAI/EasyOCR\\n12 https://github.com/PaddlePaddle/PaddleOCR\\n\\x0c4\\n\\nZ. Shen et al.\\n\\nFig. 1: The overall architecture of LayoutParser. For an input document image,\\nthe core LayoutParser library provides a set of off-the-shelf tools for layout\\ndetection, OCR, visualization, and storage, backed by a carefully designed layout\\ndata structure. LayoutParser also supports high level customization via efficient\\nlayout annotation and model training functions. These improve model accuracy\\non the target samples. The community platform enables the easy sharing of DIA\\nmodels and whole digitization pipelines to promote reusability and reproducibility.\\nA collection of detailed documentation, tutorials and exemplar projects make\\nLayoutParser easy to learn and use.\\n\\nAllenNLP [8] and transformers [34] have provided the community with complete\\nDL-based support for developing and deploying models for general computer\\nvision and natural language processing problems. LayoutParser, on the other\\nhand, specializes specifically in DIA tasks. LayoutParser is also equipped with a\\ncommunity platform inspired by established model hubs such as Torch Hub [23]\\nand TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\\nfull document processing pipelines that are unique to DIA tasks.\\n\\nThere have been a variety of document data collections to facilitate the\\ndevelopment of DL models. Some examples include PRImA [3](magazine layouts),\\nPubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\\npapers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\\nHJDataset [31](historical Japanese document layouts). A spectrum of models\\ntrained on these datasets are currently available in the LayoutParser model zoo\\nto support different use cases.\\n\\n3 The Core LayoutParser Library\\n\\nAt the core of LayoutParser is an off-the-shelf toolkit that streamlines DL-\\nbased document image analysis. Five components support a simple interface\\nwith comprehensive functionalities: 1) The layout detection models enable using\\npre-trained or self-trained DL models for layout detection with just four lines\\nof code. 2) The detected layout information is stored in carefully engineered\\n\\nEfficient Data AnnotationCustomized Model TrainingModel CustomizationDIA Model HubDIA Pipeline SharingCommunity PlatformLayout Detection ModelsDocument Images The Core LayoutParser LibraryOCR ModuleStorage & VisualizationLayout Data Structure\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n5\\n\\nTable 1: Current layout detection models in the LayoutParser model zoo\\n\\nDataset\\n\\nBase Model1 Large Model Notes\\n\\nPubLayNet [38]\\nPRImA [3]\\nNewspaper [17]\\nTableBank [18]\\nHJDataset [31]\\n\\nF / M\\nM\\nF\\nF\\nF / M\\n\\nM\\n-\\n-\\nF\\n-\\n\\nLayouts of modern scientific documents\\nLayouts of scanned modern magazines and scientific reports\\nLayouts of scanned US newspapers from the 20th century\\nTable region on modern scientific and business document\\nLayouts of history Japanese documents\\n\\n1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy\\nvs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\\nbackbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\\nR-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\\nusing the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\\nzoo in coming months.\\n\\nlayout data structures, which are optimized for efficiency and versatility. 3) When\\nnecessary, users can employ existing or customized OCR models via the unified\\nAPI provided in the OCR module. 4) LayoutParser comes with a set of utility\\nfunctions for the visualization and storage of the layout data. 5) LayoutParser\\nis also highly customizable, via its integration with functions for layout data\\nannotation and model training. We now provide detailed descriptions for each\\ncomponent.\\n\\n3.1 Layout Detection Models\\n\\nIn LayoutParser, a layout model takes a document image as an input and\\ngenerates a list of rectangular boxes for the target content regions. Different\\nfrom traditional methods, it relies on deep convolutional neural networks rather\\nthan manually curated rules to identify content regions. It is formulated as an\\nobject detection problem and state-of-the-art models like Faster R-CNN [28] and\\nMask R-CNN [12] are used. This yields prediction results of high accuracy and\\nmakes it possible to build a concise, generalized interface for layout detection.\\nLayoutParser, built upon Detectron2 [35], provides a minimal API that can\\nperform layout detection with only four lines of code in Python:\\n\\n1 import layoutparser as lp\\n2 image = cv2 . imread ( \" image_file \" ) # load images\\n3 model = lp . De t e c tro n2 Lay outM odel (\\n\\n\" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config \" )\\n\\n4\\n5 layout = model . detect ( image )\\n\\nLayoutParser provides a wealth of pre-trained model weights using various\\ndatasets covering different languages, time periods, and document types. Due to\\ndomain shift [7], the prediction performance can notably drop when models are ap-\\nplied to target samples that are significantly different from the training dataset. As\\ndocument structures and layouts vary greatly in different domains, it is important\\nto select models trained on a dataset similar to the test samples. A semantic syntax\\nis used for initializing the model weights in LayoutParser, using both the dataset\\nname and model name lp:///.\\n\\x0c6\\n\\nZ. Shen et al.\\n\\nFig. 2: The relationship between the three types of layout data structures.\\nCoordinate supports three kinds of variation; TextBlock consists of the co-\\nordinate information and extra features like block text, types, and reading orders;\\na Layout object is a list of all possible layout elements, including other Layout\\nobjects. They all support the same set of transformation and operation APIs for\\nmaximum flexibility.\\n\\nShown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\\non 5 different datasets. Description of the training dataset is provided alongside\\nwith the trained models such that users can quickly identify the most suitable\\nmodels for their tasks. Additionally, when such a model is not readily available,\\nLayoutParser also supports training customized layout models and community\\nsharing of the models (detailed in Section 3.5).\\n\\n3.2 Layout Data Structures\\n\\nA critical feature of LayoutParser is the implementation of a series of data\\nstructures and operations that can be used to efficiently process and manipulate\\nthe layout elements. In document image analysis pipelines, various post-processing\\non the layout analysis model outputs is usually required to obtain the final\\noutputs. Traditionally, this requires exporting DL model outputs and then loading\\nthe results into other pipelines. All model outputs from LayoutParser will be\\nstored in carefully engineered data types optimized for further processing, which\\nmakes it possible to build an end-to-end document digitization pipeline within\\nLayoutParser. There are three key components in the data structure, namely\\nthe Coordinate system, the TextBlock, and the Layout. They provide different\\nlevels of abstraction for the layout data, and a set of APIs are supported for\\ntransformations or operations on these classes.\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n7\\n\\nCoordinates are the cornerstones for storing layout information. Currently,\\nthree types of Coordinate data structures are provided in LayoutParser, shown\\nin Figure 2. Interval and Rectangle are the most common data types and\\nsupport specifying 1D or 2D regions within a document. They are parameterized\\nwith 2 and 4 parameters. A Quadrilateral class is also implemented to support\\na more generalized representation of rectangular regions when the document\\nis skewed or distorted, where the 4 corner points can be specified and a total\\nof 8 degrees of freedom are supported. A wide collection of transformations\\nlike shift, pad, and scale, and operations like intersect, union, and is_in,\\nare supported for these classes. Notably, it is common to separate a segment\\nof the image and analyze it individually. LayoutParser provides full support\\nfor this scenario via image cropping operations crop_image and coordinate\\ntransformations like relative_to and condition_on that transform coordinates\\nto and from their relative representations. We refer readers to Table 2 for a more\\ndetailed description of these operations13.\\n\\nBased on Coordinates, we implement the TextBlock class that stores both\\nthe positional and extra features of individual layout elements. It also supports\\nspecifying the reading orders via setting the parent field to the index of the parent\\nobject. A Layout class is built that takes in a list of TextBlocks and supports\\nprocessing the elements in batch. Layout can also be nested to support hierarchical\\nlayout structures. They support the same operations and transformations as the\\nCoordinate classes, minimizing both learning and deployment effort.\\n\\n3.3 OCR\\n\\nLayoutParser provides a unified interface for existing OCR tools. Though there\\nare many OCR tools available, they are usually configured differently with distinct\\nAPIs or protocols for using them. It can be inefficient to add new OCR tools into\\nan existing pipeline, and difficult to make direct comparisons among the available\\ntools to find the best option for a particular project. To this end, LayoutParser\\nbuilds a series of wrappers among existing OCR engines, and provides nearly\\nthe same syntax for using them. It supports a plug-and-play style of using OCR\\nengines, making it effortless to switch, evaluate, and compare different OCR\\nmodules:\\n\\n1 ocr_agent = lp . TesseractAgent ()\\n2 # Can be easily switched to other OCR software\\n3 tokens = ocr_agent . detect ( image )\\n\\nThe OCR outputs will also be stored in the aforementioned layout data\\nstructures and can be seamlessly incorporated into the digitization pipeline.\\nCurrently LayoutParser supports the Tesseract and Google Cloud Vision OCR\\nengines.\\n\\nLayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained\\nwith the Connectionist Temporal Classification (CTC) loss [10]. It can be used\\nlike the other OCR modules, and can be easily trained on customized datasets.\\n\\n13 This is also available in the LayoutParser documentation pages.\\n\\x0c8\\n\\nZ. Shen et al.\\n\\nTable 2: All operations supported by the layout elements. The same APIs are\\nsupported across different layout element classes including Coordinate types,\\nTextBlock and Layout.\\n\\nOperation Name\\n\\nDescription\\n\\nblock.pad(top, bottom, right, left) Enlarge the current block according to the input\\n\\nblock.scale(fx, fy)\\n\\nblock.shift(dx, dy)\\n\\nScale the current block given the ratio\\nin x and y direction\\n\\nMove the current block with the shift\\ndistances in x and y direction\\n\\nblock1.is in(block2)\\n\\nWhether block1 is inside of block2\\n\\nblock1.intersect(block2)\\n\\nblock1.union(block2)\\n\\nblock1.relative to(block2)\\n\\nblock1.condition on(block2)\\n\\nReturn the intersection region of block1 and block2.\\nCoordinate type to be determined based on the inputs.\\n\\nReturn the union region of block1 and block2.\\nCoordinate type to be determined based on the inputs.\\n\\nConvert the absolute coordinates of block1 to\\nrelative coordinates to block2\\n\\nCalculate the absolute coordinates of block1 given\\nthe canvas block2’s absolute coordinates\\n\\nblock.crop image(image)\\n\\nObtain the image segments in the block region\\n\\n3.4 Storage and visualization\\n\\nThe end goal of DIA is to transform the image-based document data into a\\nstructured database. LayoutParser supports exporting layout data into different\\nformats like JSON, csv, and will add the support for the METS/ALTO XML\\nformat 14 . It can also load datasets from layout analysis-specific formats like\\nCOCO [38] and the Page Format [25] for training layout models (Section 3.5).\\nVisualization of the layout detection results is critical for both presentation\\nand debugging. LayoutParser is built with an integrated API for displaying the\\nlayout information along with the original document image. Shown in Figure 3, it\\nenables presenting layout data with rich meta information and features in different\\nmodes. More detailed information can be found in the online LayoutParser\\ndocumentation page.\\n\\n3.5 Customized Model Training\\n\\nBesides the off-the-shelf library, LayoutParser is also highly customizable with\\nsupports for highly unique and challenging document analysis tasks. Target\\ndocument images can be vastly different from the existing datasets for train-\\ning layout models, which leads to low layout detection accuracy. Training data\\n\\n14 https://altoxml.github.io\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n9\\n\\nFig. 3: Layout detection and OCR results visualization generated by the\\nLayoutParser APIs. Mode I directly overlays the layout region bounding boxes\\nand categories over the original image. Mode II recreates the original document\\nvia drawing the OCR’d texts at their corresponding positions on the image\\ncanvas. In this figure, tokens in textual regions are filtered using the API and\\nthen displayed.\\n\\ncan also be highly sensitive and not sharable publicly. To overcome these chal-\\nlenges, LayoutParser is built with rich features for efficient data annotation and\\ncustomized model training.\\n\\nLayoutParser incorporates a toolkit optimized for annotating document lay-\\nouts using object-level active learning [32]. With the help from a layout detection\\nmodel trained along with labeling, only the most important layout objects within\\neach image, rather than the whole image, are required for labeling. The rest of\\nthe regions are automatically annotated with high confidence predictions from\\nthe layout detection model. This allows a layout dataset to be created more\\nefficiently with only around 60% of the labeling budget.\\n\\nAfter the training dataset is curated, LayoutParser supports different modes\\nfor training the layout models. Fine-tuning can be used for training models on a\\nsmall newly-labeled dataset by initializing the model with existing pre-trained\\nweights. Training from scratch can be helpful when the source dataset and\\ntarget are significantly different and a large training set is available. However, as\\nsuggested in Studer et al.’s work[33], loading pre-trained weights on large-scale\\ndatasets like ImageNet [5], even from totally different domains, can still boost\\nmodel performance. Through the integrated API provided by LayoutParser,\\nusers can easily compare model performances on the benchmark datasets.\\n\\x0c10\\n\\nZ. Shen et al.\\n\\nFig. 4: Illustration of (a) the original historical Japanese document with layout\\ndetection results and (b) a recreated version of the document image that achieves\\nmuch better character recognition recall. The reorganization algorithm rearranges\\nthe tokens based on the their detected bounding boxes given a maximum allowed\\nheight.\\n\\n4 LayoutParser Community Platform\\n\\nAnother focus of LayoutParser is promoting the reusability of layout detection\\nmodels and full digitization pipelines. Similar to many existing deep learning\\nlibraries, LayoutParser comes with a community model hub for distributing\\nlayout models. End-users can upload their self-trained models to the model hub,\\nand these models can be loaded into a similar interface as the currently available\\nLayoutParser pre-trained models. For example, the model trained on the News\\nNavigator dataset [17] has been incorporated in the model hub.\\n\\nBeyond DL models, LayoutParser also promotes the sharing of entire doc-\\nument digitization pipelines. For example, sometimes the pipeline requires the\\ncombination of multiple DL models to achieve better accuracy. Currently, pipelines\\nare mainly described in academic papers and implementations are often not pub-\\nlicly available. To this end, the LayoutParser community platform also enables\\nthe sharing of layout pipelines to promote the discussion and reuse of techniques.\\nFor each shared pipeline, it has a dedicated project page, with links to the source\\ncode, documentation, and an outline of the approaches. A discussion panel is\\nprovided for exchanging ideas. Combined with the core LayoutParser library,\\nusers can easily build reusable components based on the shared pipelines and\\napply them to solve their unique problems.\\n\\n5 Use Cases\\n\\nThe core objective of LayoutParser is to make it easier to create both large-scale\\nand light-weight document digitization pipelines. Large-scale document processing\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n11\\n\\nfocuses on precision, efficiency, and robustness. The target documents may have\\ncomplicated structures, and may require training multiple layout detection models\\nto achieve the optimal accuracy. Light-weight pipelines are built for relatively\\nsimple documents, with an emphasis on development ease, speed and flexibility.\\nIdeally one only needs to use existing resources, and model training should be\\navoided. Through two exemplar projects, we show how practitioners in both\\nacademia and industry can easily build such pipelines using LayoutParser and\\nextract high-quality structured document data for their downstream tasks. The\\nsource code for these projects will be publicly available in the LayoutParser\\ncommunity hub.\\n\\n5.1 A Comprehensive Historical Document Digitization Pipeline\\n\\nThe digitization of historical documents can unlock valuable data that can shed\\nlight on many important social, economic, and historical questions. Yet due to\\nscan noises, page wearing, and the prevalence of complicated layout structures, ob-\\ntaining a structured representation of historical document scans is often extremely\\ncomplicated.\\nIn this example, LayoutParser was\\nused to develop a comprehensive\\npipeline, shown in Figure 5, to gener-\\nate high-quality structured data from\\nhistorical Japanese firm financial ta-\\nbles with complicated layouts. The\\npipeline applies two layout models to\\nidentify different levels of document\\nstructures and two customized OCR\\nengines for optimized character recog-\\nnition accuracy.\\n\\nAs shown in Figure 4 (a), the\\ndocument contains columns of text\\nwritten vertically 15, a common style\\nin Japanese. Due to scanning noise\\nand archaic printing technology, the\\ncolumns can be skewed or have vari-\\nable widths, and hence cannot be eas-\\nily identified via rule-based methods.\\nWithin each column, words are sepa-\\nrated by white spaces of variable size,\\nand the vertical positions of objects\\ncan be an indicator of their layout\\ntype.\\n\\nFig. 5: Illustration of how LayoutParser\\nhelps with the historical document digi-\\ntization pipeline.\\n\\n15 A document page consists of eight rows like this. For simplicity we skip the row\\n\\nsegmentation discussion and refer readers to the source code when available.\\n\\x0c12\\n\\nZ. Shen et al.\\n\\nTo decipher the complicated layout\\n\\nstructure, two object detection models have been trained to recognize individual\\ncolumns and tokens, respectively. A small training set (400 images with approxi-\\nmately 100 annotations each) is curated via the active learning based annotation\\ntool [32] in LayoutParser. The models learn to identify both the categories and\\nregions for each token or column via their distinct visual features. The layout\\ndata structure enables easy grouping of the tokens within each column, and\\nrearranging columns to achieve the correct reading orders based on the horizontal\\nposition. Errors are identified and rectified via checking the consistency of the\\nmodel predictions. Therefore, though trained on a small dataset, the pipeline\\nachieves a high level of layout detection accuracy: it achieves a 96.97 AP [19]\\nscore across 5 categories for the column detection model, and a 89.23 AP across\\n4 categories for the token detection model.\\n\\nA combination of character recognition methods is developed to tackle the\\nunique challenges in this document. In our experiments, we found that irregular\\nspacing between the tokens led to a low character recognition recall rate, whereas\\nexisting OCR models tend to perform better on densely-arranged texts. To\\novercome this challenge, we create a document reorganization algorithm that\\nrearranges the text based on the token bounding boxes detected in the layout\\nanalysis step. Figure 4 (b) illustrates the generated image of dense text, which is\\nsent to the OCR APIs as a whole to reduce the transaction costs. The flexible\\ncoordinate system in LayoutParser is used to transform the OCR results relative\\nto their original positions on the page.\\n\\nAdditionally, it is common for historical documents to use unique fonts\\nwith different glyphs, which significantly degrades the accuracy of OCR models\\ntrained on modern texts. In this document, a special flat font is used for printing\\nnumbers and could not be detected by off-the-shelf OCR engines. Using the highly\\nflexible functionalities from LayoutParser, a pipeline approach is constructed\\nthat achieves a high recognition accuracy with minimal effort. As the characters\\nhave unique visual structures and are usually clustered together, we train the\\nlayout model to identify number regions with a dedicated category. Subsequently,\\nLayoutParser crops images within these regions, and identifies characters within\\nthem using a self-trained OCR model based on a CNN-RNN [6]. The model\\ndetects a total of 15 possible categories, and achieves a 0.98 Jaccard score16 and\\na 0.17 average Levinstein distances17 for token prediction on the test set.\\n\\nOverall, it is possible to create an intricate and highly accurate digitization\\npipeline for large-scale digitization using LayoutParser. The pipeline avoids\\nspecifying the complicated rules used in traditional methods, is straightforward\\nto develop, and is robust to outliers. The DL models also generate fine-grained\\nresults that enable creative approaches like page reorganization for OCR.\\n\\n16 This measures the overlap between the detected and ground-truth characters, and\\n\\nthe maximum is 1.\\n\\n17 This measures the number of edits from the ground-truth text to the predicted text,\\n\\nand lower is better.\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n13\\n\\nFig. 6: This lightweight table detector can identify tables (outlined in red) and\\ncells (shaded in blue) in different locations on a page. In very few cases (d), it\\nmight generate minor error predictions, e.g, failing to capture the top text line of\\na table.\\n\\n5.2 A light-weight Visual Table Extractor\\n\\nDetecting tables and parsing their structures (table extraction) are of central im-\\nportance for many document digitization tasks. Many previous works [26, 30, 27]\\nand tools 18 have been developed to identify and parse table structures. Yet they\\nmight require training complicated models from scratch, or are only applicable\\nfor born-digital PDF documents. In this section, we show how LayoutParser can\\nhelp build a light-weight accurate visual table extractor for legal docket tables\\nusing the existing resources with minimal effort.\\n\\nThe extractor uses a pre-trained layout detection model for identifying the\\ntable regions and some simple rules for pairing the rows and the columns in the\\nPDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the\\nLayoutParser Model Zoo can be used for detecting table regions. By filtering\\nout model predictions of low confidence and removing overlapping predictions,\\nLayoutParser can identify the tabular regions on each page, which significantly\\nsimplifies the subsequent steps. By applying the line detection functions within\\nthe tabular segments, provided in the utility module from LayoutParser, the\\npipeline can identify the three distinct columns in the tables. A row clustering\\nmethod is then applied via analyzing the y coordinates of token bounding boxes in\\nthe left-most column, which are obtained from the OCR engines. A non-maximal\\nsuppression algorithm is used to remove duplicated rows with extremely small\\ngaps. Shown in Figure 6, the built pipeline can detect tables at different positions\\non a page accurately. Continued tables from different pages are concatenated,\\nand a structured table representation has been easily created.\\n\\n18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\\n\\x0c14\\n\\nZ. Shen et al.\\n\\n6 Conclusion\\n\\nLayoutParser provides a comprehensive toolkit for deep learning-based document\\nimage analysis. The off-the-shelf library is easy to install, and can be used to\\nbuild flexible and accurate pipelines for processing documents with complicated\\nstructures. It also supports high-level customization and enables easy labeling and\\ntraining of DL models on unique document image datasets. The LayoutParser\\ncommunity platform facilitates sharing DL models and DIA pipelines, inviting\\ndiscussion and promoting code reproducibility and reusability. The LayoutParser\\nteam is committed to keeping the library updated continuously and bringing\\nthe most recent advances in DL-based DIA, such as multi-modal document\\nmodeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\\n\\nAcknowledgements We thank the anonymous reviewers for their comments\\nand suggestions. This project is supported in part by NSF Grant OIA-2033558\\nand funding from the Harvard Data Science Initiative and Harvard Catalyst.\\nZejiang Shen thanks Doug Downey for suggestions.\\n\\nReferences\\n\\n[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado,\\nG.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A.,\\nIrving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg,\\nJ., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J.,\\nSteiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V.,\\nVi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng,\\nX.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015),\\nhttps://www.tensorflow.org/, software available from tensorflow.org\\n\\n[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a\\nhighly-functional python framework for reproducible experiments. In: 2018 16th\\nInternational Conference on Frontiers in Handwriting Recognition (ICFHR). pp.\\n423–428. IEEE (2018)\\n\\n[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic\\ndataset for performance evaluation of document layout analysis. In: 2009 10th\\nInternational Conference on Document Analysis and Recognition. pp. 296–300.\\nIEEE (2009)\\n\\n[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text\\ndetection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and\\nPattern Recognition. pp. 9365–9374 (2019)\\n\\n[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\\n\\nHierarchical Image Database. In: CVPR09 (2009)\\n\\n[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with\\ncoarse-to-fine attention. In: International Conference on Machine Learning. pp.\\n980–989. PMLR (2017)\\n\\n[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation.\\nIn: International conference on machine learning. pp. 1180–1189. PMLR (2015)\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n15\\n\\n[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters,\\nM., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language\\nprocessing platform. arXiv preprint arXiv:1803.07640 (2018)\\n(cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P.,\\nGrali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in-\\nformation extraction (2020)\\n\\n[9]\\n\\n[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal\\nclassification: labelling unsegmented sequence data with recurrent neural networks.\\nIn: Proceedings of the 23rd international conference on Machine learning. pp.\\n369–376 (2006)\\n\\n[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for\\ndocument image classification and retrieval. In: 2015 13th International Conference\\non Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015)\\n[12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\\n\\nIEEE international conference on computer vision. pp. 2961–2969 (2017)\\n\\n[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition.\\nIn: Proceedings of the IEEE conference on computer vision and pattern recognition.\\npp. 770–778 (2016)\\n\\n[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\\n\\n2007(159), 2 (Jul 2007)\\n\\n[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis\\nbenchmarking. In: 2011 International Conference on Document Analysis and\\nRecognition. pp. 42–47. IEEE (2011)\\n\\n[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5\\nmillion images. In: Adjunct Publication of the 33rd Annual ACM Sym-\\nposium on User\\nInterface Software and Technology. p. 120–122. UIST\\n’20 Adjunct, Association for Computing Machinery, New York, NY, USA\\n(2020). https://doi.org/10.1145/3379350.3416143, https://doi-org.offcampus.\\nlib.washington.edu/10.1145/3379350.3416143\\n\\n[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N.,\\nThomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting\\nHeadlines and Visual Content from 16 Million Historic Newspaper Pages in\\nChronicling America, p. 3055–3062. Association for Computing Machinery, New\\nYork, NY, USA (2020), https://doi.org/10.1145/3340531.3412767\\n\\n[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark\\nfor image-based table detection and recognition. arXiv preprint arXiv:1903.01949\\n(2019)\\n\\n[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P.,\\nZitnick, C.L.: Microsoft coco: Common objects in context. In: European conference\\non computer vision. pp. 740–755. Springer (2014)\\n\\n[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic\\nsegmentation. In: Proceedings of the IEEE conference on computer vision and\\npattern recognition. pp. 3431–3440 (2015)\\n\\n[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten-\\ncroft, K.: An experimental workflow development platform for historical document\\ndigitisation and analysis. In: Proceedings of the 2011 workshop on historical\\ndocument imaging and processing. pp. 161–168 (2011)\\n\\n[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach\\nfor document segmentation. In: 2018 16th International Conference on Frontiers\\nin Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\\n\\x0c16\\n\\nZ. Shen et al.\\n\\n[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z.,\\nDesmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017)\\n[24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,\\nT., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style,\\nhigh-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019)\\n[25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth\\nelements) format framework. In: 2010 20th International Conference on Pattern\\nRecognition. pp. 257–260. IEEE (2010)\\n\\n[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet:\\nAn approach for end to end table detection and structure recognition from image-\\nbased documents. In: Proceedings of the IEEE/CVF Conference on Computer\\nVision and Pattern Recognition Workshops. pp. 572–573 (2020)\\n\\n[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph\\nneural networks. In: 2019 International Conference on Document Analysis and\\nRecognition (ICDAR). pp. 142–147. IEEE (2019)\\n\\n[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object\\ndetection with region proposal networks. In: Advances in neural information\\nprocessing systems. pp. 91–99 (2015)\\n\\n[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph\\nneural network model. IEEE transactions on neural networks 20(1), 61–80 (2008)\\n[30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning\\nfor detection and structure recognition of tables in document images. In: 2017 14th\\nIAPR international conference on document analysis and recognition (ICDAR).\\nvol. 1, pp. 1162–1167. IEEE (2017)\\n\\n[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents\\nwith complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer\\nVision and Pattern Recognition Workshops. pp. 548–549 (2020)\\n\\n[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\\n\\nbased layout annotation. arXiv preprint arXiv:2010.01762 (2020)\\n\\n[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer,\\nA., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for\\nhistorical document image analysis. In: 2019 International Conference on Document\\nAnalysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\\n\\n[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P.,\\nRault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of-\\nthe-art natural language processing. arXiv preprint arXiv:1910.03771 (2019)\\n[35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2. https://\\n\\ngithub.com/facebookresearch/detectron2 (2019)\\n\\n[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C.,\\nChe, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document\\nunderstanding. arXiv preprint arXiv:2012.14740 (2020)\\n\\n[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\\n\\ntext and layout for document image understanding (2019)\\n\\n[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\\n\\nlayout analysis.\\n\\nument\\nAnalysis and Recognition (ICDAR). pp. 1015–1022.\\nhttps://doi.org/10.1109/ICDAR.2019.00166\\n\\nlargest dataset ever for doc-\\nIn: 2019 International Conference on Document\\nIEEE (Sep 2019).')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## Load" + "docs = loader.load()\n", + "docs[0]" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:04.783162Z", + "start_time": "2024-12-16T07:54:04.780307Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'total_pages': 16,\n", + " 'source': './example_data/layout-parser-paper.pdf'}\n" + ] + } + ], + "source": [ + "import pprint\n", + "\n", + "pprint.pp(docs[0].metadata)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "## Lazy Load\n" + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:06.957327Z", + "start_time": "2024-12-16T07:54:06.360130Z" + } + }, "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf'}, page_content='1\\n2\\n0\\n2\\n\\nn\\nu\\nJ\\n\\n1\\n2\\n\\n]\\n\\nV\\nC\\n.\\ns\\nc\\n[\\n\\n2\\nv\\n8\\n4\\n3\\n5\\n1\\n.\\n3\\n0\\n1\\n2\\n:\\nv\\ni\\nX\\nr\\na\\n\\nLayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\n\\nZejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\n\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\n\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis\\n· Character Recognition · Open Source library · Toolkit.\\n\\n1\\n\\nIntroduction\\n\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\n\\n \\n \\n \\n \\n \\n \\n\\x0c2\\n\\nZ. Shen et al.\\n\\n37], layout detection [38, 22], table detection [26], and scene text detection [4].\\nA generalized learning-based framework dramatically reduces the need for the\\nmanual specification of complicated rules, which is the status quo with traditional\\nmethods. DL has the potential to transform DIA pipelines and benefit a broad\\nspectrum of large-scale document digitization projects.\\n\\nHowever, there are several practical difficulties for taking advantages of re-\\ncent advances in DL-based methods: 1) DL models are notoriously convoluted\\nfor reuse and extension. Existing models are developed using distinct frame-\\nworks like TensorFlow [1] or PyTorch [24], and the high-level parameters can\\nbe obfuscated by implementation details [8]. It can be a time-consuming and\\nfrustrating experience to debug, reproduce, and adapt existing models for DIA,\\nand many researchers who would benefit the most from using these methods lack\\nthe technical background to implement them from scratch. 2) Document images\\ncontain diverse and disparate patterns across domains, and customized training\\nis often required to achieve a desirable detection accuracy. Currently there is no\\nfull-fledged infrastructure for easily curating the target document image datasets\\nand fine-tuning or re-training the models. 3) DIA usually requires a sequence of\\nmodels and other processing to obtain the final outputs. Often research teams use\\nDL models and then perform further document analyses in separate processes,\\nand these pipelines are not documented in any central location (and often not\\ndocumented at all). This makes it difficult for research teams to learn about how\\nfull pipelines are implemented and leads them to invest significant resources in\\nreinventing the DIA wheel.\\n\\nLayoutParser provides a unified toolkit to support DL-based document image\\nanalysis and processing. To address the aforementioned challenges, LayoutParser\\nis built with the following components:\\n\\n1. An off-the-shelf toolkit for applying DL models for layout detection, character\\n\\nrecognition, and other DIA tasks (Section 3)\\n\\n2. A rich repository of pre-trained neural network models (Model Zoo) that\\n\\nunderlies the off-the-shelf usage\\n\\n3. Comprehensive tools for efficient document image data annotation and model\\n\\ntuning to support different levels of customization\\n\\n4. A DL model hub and community platform for the easy sharing, distribu-\\ntion, and discussion of DIA models and pipelines, to promote reusability,\\nreproducibility, and extensibility (Section 4)\\n\\nThe library implements simple and intuitive Python APIs without sacrificing\\ngeneralizability and versatility, and can be easily installed via pip. Its convenient\\nfunctions for handling document image data can be seamlessly integrated with\\nexisting DIA pipelines. With detailed documentations and carefully curated\\ntutorials, we hope this tool will benefit a variety of end-users, and will lead to\\nadvances in applications in both industry and academic research.\\n\\nLayoutParser is well aligned with recent efforts for improving DL model\\nreusability in other disciplines like natural language processing [8, 34] and com-\\nputer vision [35], but with a focus on unique challenges in DIA. We show\\nLayoutParser can be applied in sophisticated and large-scale digitization projects\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n3\\n\\nthat require precision, efficiency, and robustness, as well as simple and light-\\nweight document processing tasks focusing on efficacy and flexibility (Section 5).\\nLayoutParser is being actively maintained, and support for more deep learning\\nmodels and novel methods in text-based layout analysis methods [37, 34] is\\nplanned.\\n\\nThe rest of the paper is organized as follows. Section 2 provides an overview\\nof related work. The core LayoutParser library, DL Model Zoo, and customized\\nmodel training are described in Section 3, and the DL model hub and commu-\\nnity platform are detailed in Section 4. Section 5 shows two examples of how\\nLayoutParser can be used in practical DIA projects, and Section 6 concludes.\\n\\n2 Related Work\\n\\nRecently, various DL models and datasets have been developed for layout analysis\\ntasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\\ntation tasks on historical documents. Object detection-based methods like Faster\\nR-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\\nand detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\\nbeen used in table detection [27]. However, these models are usually implemented\\nindividually and there is no unified framework to load and use such models.\\n\\nThere has been a surge of interest in creating open-source tools for document\\nimage processing: a search of document image analysis in Github leads to 5M\\nrelevant code pieces 6; yet most of them rely on traditional rule-based methods\\nor provide limited functionalities. The closest prior research to our work is the\\nOCR-D project7, which also tries to build a complete toolkit for DIA. However,\\nsimilar to the platform developed by Neudecker et al. [21], it is designed for\\nanalyzing historical documents, and provides no supports for recent DL models.\\nThe DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\\ndocuments via analyzing the stored PDF data. Repositories like DeepLayout9\\nand Detectron2-PubLayNet10 are individual deep learning models trained on\\nlayout analysis datasets without support for the full DIA pipeline. The Document\\nAnalysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\\naim to improve the reproducibility of DIA methods (or DL models), yet they\\nare not actively maintained. OCR engines like Tesseract [14], easyOCR11 and\\npaddleOCR12 usually do not come with comprehensive functionalities for other\\nDIA tasks like layout analysis.\\n\\nRecent years have also seen numerous efforts to create libraries for promoting\\nreproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n\\n6 The number shown is obtained by specifying the search type as ‘code’.\\n7 https://ocr-d.de/en/about\\n8 https://github.com/BobLd/DocumentLayoutAnalysis\\n9 https://github.com/leonlulu/DeepLayout\\n10 https://github.com/hpanwar08/detectron2\\n11 https://github.com/JaidedAI/EasyOCR\\n12 https://github.com/PaddlePaddle/PaddleOCR\\n\\n\\x0c4\\n\\nZ. Shen et al.\\n\\nFig. 1: The overall architecture of LayoutParser. For an input document image,\\nthe core LayoutParser library provides a set of off-the-shelf tools for layout\\ndetection, OCR, visualization, and storage, backed by a carefully designed layout\\ndata structure. LayoutParser also supports high level customization via efficient\\nlayout annotation and model training functions. These improve model accuracy\\non the target samples. The community platform enables the easy sharing of DIA\\nmodels and whole digitization pipelines to promote reusability and reproducibility.\\nA collection of detailed documentation, tutorials and exemplar projects make\\nLayoutParser easy to learn and use.\\n\\nAllenNLP [8] and transformers [34] have provided the community with complete\\nDL-based support for developing and deploying models for general computer\\nvision and natural language processing problems. LayoutParser, on the other\\nhand, specializes specifically in DIA tasks. LayoutParser is also equipped with a\\ncommunity platform inspired by established model hubs such as Torch Hub [23]\\nand TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\\nfull document processing pipelines that are unique to DIA tasks.\\n\\nThere have been a variety of document data collections to facilitate the\\ndevelopment of DL models. Some examples include PRImA [3](magazine layouts),\\nPubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\\npapers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\\nHJDataset [31](historical Japanese document layouts). A spectrum of models\\ntrained on these datasets are currently available in the LayoutParser model zoo\\nto support different use cases.\\n\\n3 The Core LayoutParser Library\\n\\nAt the core of LayoutParser is an off-the-shelf toolkit that streamlines DL-\\nbased document image analysis. Five components support a simple interface\\nwith comprehensive functionalities: 1) The layout detection models enable using\\npre-trained or self-trained DL models for layout detection with just four lines\\nof code. 2) The detected layout information is stored in carefully engineered\\n\\nEfficient Data AnnotationCustomized Model TrainingModel CustomizationDIA Model HubDIA Pipeline SharingCommunity PlatformLayout Detection ModelsDocument Images The Core LayoutParser LibraryOCR ModuleStorage & VisualizationLayout Data Structure\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n5\\n\\nTable 1: Current layout detection models in the LayoutParser model zoo\\n\\nDataset\\n\\nBase Model1 Large Model Notes\\n\\nPubLayNet [38]\\nPRImA [3]\\nNewspaper [17]\\nTableBank [18]\\nHJDataset [31]\\n\\nF / M\\nM\\nF\\nF\\nF / M\\n\\nM\\n-\\n-\\nF\\n-\\n\\nLayouts of modern scientific documents\\nLayouts of scanned modern magazines and scientific reports\\nLayouts of scanned US newspapers from the 20th century\\nTable region on modern scientific and business document\\nLayouts of history Japanese documents\\n\\n1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy\\nvs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\\nbackbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\\nR-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\\nusing the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\\nzoo in coming months.\\n\\nlayout data structures, which are optimized for efficiency and versatility. 3) When\\nnecessary, users can employ existing or customized OCR models via the unified\\nAPI provided in the OCR module. 4) LayoutParser comes with a set of utility\\nfunctions for the visualization and storage of the layout data. 5) LayoutParser\\nis also highly customizable, via its integration with functions for layout data\\nannotation and model training. We now provide detailed descriptions for each\\ncomponent.\\n\\n3.1 Layout Detection Models\\n\\nIn LayoutParser, a layout model takes a document image as an input and\\ngenerates a list of rectangular boxes for the target content regions. Different\\nfrom traditional methods, it relies on deep convolutional neural networks rather\\nthan manually curated rules to identify content regions. It is formulated as an\\nobject detection problem and state-of-the-art models like Faster R-CNN [28] and\\nMask R-CNN [12] are used. This yields prediction results of high accuracy and\\nmakes it possible to build a concise, generalized interface for layout detection.\\nLayoutParser, built upon Detectron2 [35], provides a minimal API that can\\nperform layout detection with only four lines of code in Python:\\n\\n1 import layoutparser as lp\\n2 image = cv2 . imread ( \" image_file \" ) # load images\\n3 model = lp . De t e c tro n2 Lay outM odel (\\n\\n\" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config \" )\\n\\n4\\n5 layout = model . detect ( image )\\n\\nLayoutParser provides a wealth of pre-trained model weights using various\\ndatasets covering different languages, time periods, and document types. Due to\\ndomain shift [7], the prediction performance can notably drop when models are ap-\\nplied to target samples that are significantly different from the training dataset. As\\ndocument structures and layouts vary greatly in different domains, it is important\\nto select models trained on a dataset similar to the test samples. A semantic syntax\\nis used for initializing the model weights in LayoutParser, using both the dataset\\nname and model name lp:///.\\n\\n\\x0c6\\n\\nZ. Shen et al.\\n\\nFig. 2: The relationship between the three types of layout data structures.\\nCoordinate supports three kinds of variation; TextBlock consists of the co-\\nordinate information and extra features like block text, types, and reading orders;\\na Layout object is a list of all possible layout elements, including other Layout\\nobjects. They all support the same set of transformation and operation APIs for\\nmaximum flexibility.\\n\\nShown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\\non 5 different datasets. Description of the training dataset is provided alongside\\nwith the trained models such that users can quickly identify the most suitable\\nmodels for their tasks. Additionally, when such a model is not readily available,\\nLayoutParser also supports training customized layout models and community\\nsharing of the models (detailed in Section 3.5).\\n\\n3.2 Layout Data Structures\\n\\nA critical feature of LayoutParser is the implementation of a series of data\\nstructures and operations that can be used to efficiently process and manipulate\\nthe layout elements. In document image analysis pipelines, various post-processing\\non the layout analysis model outputs is usually required to obtain the final\\noutputs. Traditionally, this requires exporting DL model outputs and then loading\\nthe results into other pipelines. All model outputs from LayoutParser will be\\nstored in carefully engineered data types optimized for further processing, which\\nmakes it possible to build an end-to-end document digitization pipeline within\\nLayoutParser. There are three key components in the data structure, namely\\nthe Coordinate system, the TextBlock, and the Layout. They provide different\\nlevels of abstraction for the layout data, and a set of APIs are supported for\\ntransformations or operations on these classes.\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n7\\n\\nCoordinates are the cornerstones for storing layout information. Currently,\\nthree types of Coordinate data structures are provided in LayoutParser, shown\\nin Figure 2. Interval and Rectangle are the most common data types and\\nsupport specifying 1D or 2D regions within a document. They are parameterized\\nwith 2 and 4 parameters. A Quadrilateral class is also implemented to support\\na more generalized representation of rectangular regions when the document\\nis skewed or distorted, where the 4 corner points can be specified and a total\\nof 8 degrees of freedom are supported. A wide collection of transformations\\nlike shift, pad, and scale, and operations like intersect, union, and is_in,\\nare supported for these classes. Notably, it is common to separate a segment\\nof the image and analyze it individually. LayoutParser provides full support\\nfor this scenario via image cropping operations crop_image and coordinate\\ntransformations like relative_to and condition_on that transform coordinates\\nto and from their relative representations. We refer readers to Table 2 for a more\\ndetailed description of these operations13.\\n\\nBased on Coordinates, we implement the TextBlock class that stores both\\nthe positional and extra features of individual layout elements. It also supports\\nspecifying the reading orders via setting the parent field to the index of the parent\\nobject. A Layout class is built that takes in a list of TextBlocks and supports\\nprocessing the elements in batch. Layout can also be nested to support hierarchical\\nlayout structures. They support the same operations and transformations as the\\nCoordinate classes, minimizing both learning and deployment effort.\\n\\n3.3 OCR\\n\\nLayoutParser provides a unified interface for existing OCR tools. Though there\\nare many OCR tools available, they are usually configured differently with distinct\\nAPIs or protocols for using them. It can be inefficient to add new OCR tools into\\nan existing pipeline, and difficult to make direct comparisons among the available\\ntools to find the best option for a particular project. To this end, LayoutParser\\nbuilds a series of wrappers among existing OCR engines, and provides nearly\\nthe same syntax for using them. It supports a plug-and-play style of using OCR\\nengines, making it effortless to switch, evaluate, and compare different OCR\\nmodules:\\n\\n1 ocr_agent = lp . TesseractAgent ()\\n2 # Can be easily switched to other OCR software\\n3 tokens = ocr_agent . detect ( image )\\n\\nThe OCR outputs will also be stored in the aforementioned layout data\\nstructures and can be seamlessly incorporated into the digitization pipeline.\\nCurrently LayoutParser supports the Tesseract and Google Cloud Vision OCR\\nengines.\\n\\nLayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained\\nwith the Connectionist Temporal Classification (CTC) loss [10]. It can be used\\nlike the other OCR modules, and can be easily trained on customized datasets.\\n\\n13 This is also available in the LayoutParser documentation pages.\\n\\n\\x0c8\\n\\nZ. Shen et al.\\n\\nTable 2: All operations supported by the layout elements. The same APIs are\\nsupported across different layout element classes including Coordinate types,\\nTextBlock and Layout.\\n\\nOperation Name\\n\\nDescription\\n\\nblock.pad(top, bottom, right, left) Enlarge the current block according to the input\\n\\nblock.scale(fx, fy)\\n\\nblock.shift(dx, dy)\\n\\nScale the current block given the ratio\\nin x and y direction\\n\\nMove the current block with the shift\\ndistances in x and y direction\\n\\nblock1.is in(block2)\\n\\nWhether block1 is inside of block2\\n\\nblock1.intersect(block2)\\n\\nblock1.union(block2)\\n\\nblock1.relative to(block2)\\n\\nblock1.condition on(block2)\\n\\nReturn the intersection region of block1 and block2.\\nCoordinate type to be determined based on the inputs.\\n\\nReturn the union region of block1 and block2.\\nCoordinate type to be determined based on the inputs.\\n\\nConvert the absolute coordinates of block1 to\\nrelative coordinates to block2\\n\\nCalculate the absolute coordinates of block1 given\\nthe canvas block2’s absolute coordinates\\n\\nblock.crop image(image)\\n\\nObtain the image segments in the block region\\n\\n3.4 Storage and visualization\\n\\nThe end goal of DIA is to transform the image-based document data into a\\nstructured database. LayoutParser supports exporting layout data into different\\nformats like JSON, csv, and will add the support for the METS/ALTO XML\\nformat 14 . It can also load datasets from layout analysis-specific formats like\\nCOCO [38] and the Page Format [25] for training layout models (Section 3.5).\\nVisualization of the layout detection results is critical for both presentation\\nand debugging. LayoutParser is built with an integrated API for displaying the\\nlayout information along with the original document image. Shown in Figure 3, it\\nenables presenting layout data with rich meta information and features in different\\nmodes. More detailed information can be found in the online LayoutParser\\ndocumentation page.\\n\\n3.5 Customized Model Training\\n\\nBesides the off-the-shelf library, LayoutParser is also highly customizable with\\nsupports for highly unique and challenging document analysis tasks. Target\\ndocument images can be vastly different from the existing datasets for train-\\ning layout models, which leads to low layout detection accuracy. Training data\\n\\n14 https://altoxml.github.io\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n9\\n\\nFig. 3: Layout detection and OCR results visualization generated by the\\nLayoutParser APIs. Mode I directly overlays the layout region bounding boxes\\nand categories over the original image. Mode II recreates the original document\\nvia drawing the OCR’d texts at their corresponding positions on the image\\ncanvas. In this figure, tokens in textual regions are filtered using the API and\\nthen displayed.\\n\\ncan also be highly sensitive and not sharable publicly. To overcome these chal-\\nlenges, LayoutParser is built with rich features for efficient data annotation and\\ncustomized model training.\\n\\nLayoutParser incorporates a toolkit optimized for annotating document lay-\\nouts using object-level active learning [32]. With the help from a layout detection\\nmodel trained along with labeling, only the most important layout objects within\\neach image, rather than the whole image, are required for labeling. The rest of\\nthe regions are automatically annotated with high confidence predictions from\\nthe layout detection model. This allows a layout dataset to be created more\\nefficiently with only around 60% of the labeling budget.\\n\\nAfter the training dataset is curated, LayoutParser supports different modes\\nfor training the layout models. Fine-tuning can be used for training models on a\\nsmall newly-labeled dataset by initializing the model with existing pre-trained\\nweights. Training from scratch can be helpful when the source dataset and\\ntarget are significantly different and a large training set is available. However, as\\nsuggested in Studer et al.’s work[33], loading pre-trained weights on large-scale\\ndatasets like ImageNet [5], even from totally different domains, can still boost\\nmodel performance. Through the integrated API provided by LayoutParser,\\nusers can easily compare model performances on the benchmark datasets.\\n\\n\\x0c10\\n\\nZ. Shen et al.\\n\\nFig. 4: Illustration of (a) the original historical Japanese document with layout\\ndetection results and (b) a recreated version of the document image that achieves\\nmuch better character recognition recall. The reorganization algorithm rearranges\\nthe tokens based on the their detected bounding boxes given a maximum allowed\\nheight.\\n\\n4 LayoutParser Community Platform\\n\\nAnother focus of LayoutParser is promoting the reusability of layout detection\\nmodels and full digitization pipelines. Similar to many existing deep learning\\nlibraries, LayoutParser comes with a community model hub for distributing\\nlayout models. End-users can upload their self-trained models to the model hub,\\nand these models can be loaded into a similar interface as the currently available\\nLayoutParser pre-trained models. For example, the model trained on the News\\nNavigator dataset [17] has been incorporated in the model hub.\\n\\nBeyond DL models, LayoutParser also promotes the sharing of entire doc-\\nument digitization pipelines. For example, sometimes the pipeline requires the\\ncombination of multiple DL models to achieve better accuracy. Currently, pipelines\\nare mainly described in academic papers and implementations are often not pub-\\nlicly available. To this end, the LayoutParser community platform also enables\\nthe sharing of layout pipelines to promote the discussion and reuse of techniques.\\nFor each shared pipeline, it has a dedicated project page, with links to the source\\ncode, documentation, and an outline of the approaches. A discussion panel is\\nprovided for exchanging ideas. Combined with the core LayoutParser library,\\nusers can easily build reusable components based on the shared pipelines and\\napply them to solve their unique problems.\\n\\n5 Use Cases\\n\\nThe core objective of LayoutParser is to make it easier to create both large-scale\\nand light-weight document digitization pipelines. Large-scale document processing\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n11\\n\\nfocuses on precision, efficiency, and robustness. The target documents may have\\ncomplicated structures, and may require training multiple layout detection models\\nto achieve the optimal accuracy. Light-weight pipelines are built for relatively\\nsimple documents, with an emphasis on development ease, speed and flexibility.\\nIdeally one only needs to use existing resources, and model training should be\\navoided. Through two exemplar projects, we show how practitioners in both\\nacademia and industry can easily build such pipelines using LayoutParser and\\nextract high-quality structured document data for their downstream tasks. The\\nsource code for these projects will be publicly available in the LayoutParser\\ncommunity hub.\\n\\n5.1 A Comprehensive Historical Document Digitization Pipeline\\n\\nThe digitization of historical documents can unlock valuable data that can shed\\nlight on many important social, economic, and historical questions. Yet due to\\nscan noises, page wearing, and the prevalence of complicated layout structures, ob-\\ntaining a structured representation of historical document scans is often extremely\\ncomplicated.\\nIn this example, LayoutParser was\\nused to develop a comprehensive\\npipeline, shown in Figure 5, to gener-\\nate high-quality structured data from\\nhistorical Japanese firm financial ta-\\nbles with complicated layouts. The\\npipeline applies two layout models to\\nidentify different levels of document\\nstructures and two customized OCR\\nengines for optimized character recog-\\nnition accuracy.\\n\\nAs shown in Figure 4 (a), the\\ndocument contains columns of text\\nwritten vertically 15, a common style\\nin Japanese. Due to scanning noise\\nand archaic printing technology, the\\ncolumns can be skewed or have vari-\\nable widths, and hence cannot be eas-\\nily identified via rule-based methods.\\nWithin each column, words are sepa-\\nrated by white spaces of variable size,\\nand the vertical positions of objects\\ncan be an indicator of their layout\\ntype.\\n\\nFig. 5: Illustration of how LayoutParser\\nhelps with the historical document digi-\\ntization pipeline.\\n\\n15 A document page consists of eight rows like this. For simplicity we skip the row\\n\\nsegmentation discussion and refer readers to the source code when available.\\n\\n\\x0c12\\n\\nZ. Shen et al.\\n\\nTo decipher the complicated layout\\n\\nstructure, two object detection models have been trained to recognize individual\\ncolumns and tokens, respectively. A small training set (400 images with approxi-\\nmately 100 annotations each) is curated via the active learning based annotation\\ntool [32] in LayoutParser. The models learn to identify both the categories and\\nregions for each token or column via their distinct visual features. The layout\\ndata structure enables easy grouping of the tokens within each column, and\\nrearranging columns to achieve the correct reading orders based on the horizontal\\nposition. Errors are identified and rectified via checking the consistency of the\\nmodel predictions. Therefore, though trained on a small dataset, the pipeline\\nachieves a high level of layout detection accuracy: it achieves a 96.97 AP [19]\\nscore across 5 categories for the column detection model, and a 89.23 AP across\\n4 categories for the token detection model.\\n\\nA combination of character recognition methods is developed to tackle the\\nunique challenges in this document. In our experiments, we found that irregular\\nspacing between the tokens led to a low character recognition recall rate, whereas\\nexisting OCR models tend to perform better on densely-arranged texts. To\\novercome this challenge, we create a document reorganization algorithm that\\nrearranges the text based on the token bounding boxes detected in the layout\\nanalysis step. Figure 4 (b) illustrates the generated image of dense text, which is\\nsent to the OCR APIs as a whole to reduce the transaction costs. The flexible\\ncoordinate system in LayoutParser is used to transform the OCR results relative\\nto their original positions on the page.\\n\\nAdditionally, it is common for historical documents to use unique fonts\\nwith different glyphs, which significantly degrades the accuracy of OCR models\\ntrained on modern texts. In this document, a special flat font is used for printing\\nnumbers and could not be detected by off-the-shelf OCR engines. Using the highly\\nflexible functionalities from LayoutParser, a pipeline approach is constructed\\nthat achieves a high recognition accuracy with minimal effort. As the characters\\nhave unique visual structures and are usually clustered together, we train the\\nlayout model to identify number regions with a dedicated category. Subsequently,\\nLayoutParser crops images within these regions, and identifies characters within\\nthem using a self-trained OCR model based on a CNN-RNN [6]. The model\\ndetects a total of 15 possible categories, and achieves a 0.98 Jaccard score16 and\\na 0.17 average Levinstein distances17 for token prediction on the test set.\\n\\nOverall, it is possible to create an intricate and highly accurate digitization\\npipeline for large-scale digitization using LayoutParser. The pipeline avoids\\nspecifying the complicated rules used in traditional methods, is straightforward\\nto develop, and is robust to outliers. The DL models also generate fine-grained\\nresults that enable creative approaches like page reorganization for OCR.\\n\\n16 This measures the overlap between the detected and ground-truth characters, and\\n\\nthe maximum is 1.\\n\\n17 This measures the number of edits from the ground-truth text to the predicted text,\\n\\nand lower is better.\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n13\\n\\nFig. 6: This lightweight table detector can identify tables (outlined in red) and\\ncells (shaded in blue) in different locations on a page. In very few cases (d), it\\nmight generate minor error predictions, e.g, failing to capture the top text line of\\na table.\\n\\n5.2 A light-weight Visual Table Extractor\\n\\nDetecting tables and parsing their structures (table extraction) are of central im-\\nportance for many document digitization tasks. Many previous works [26, 30, 27]\\nand tools 18 have been developed to identify and parse table structures. Yet they\\nmight require training complicated models from scratch, or are only applicable\\nfor born-digital PDF documents. In this section, we show how LayoutParser can\\nhelp build a light-weight accurate visual table extractor for legal docket tables\\nusing the existing resources with minimal effort.\\n\\nThe extractor uses a pre-trained layout detection model for identifying the\\ntable regions and some simple rules for pairing the rows and the columns in the\\nPDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the\\nLayoutParser Model Zoo can be used for detecting table regions. By filtering\\nout model predictions of low confidence and removing overlapping predictions,\\nLayoutParser can identify the tabular regions on each page, which significantly\\nsimplifies the subsequent steps. By applying the line detection functions within\\nthe tabular segments, provided in the utility module from LayoutParser, the\\npipeline can identify the three distinct columns in the tables. A row clustering\\nmethod is then applied via analyzing the y coordinates of token bounding boxes in\\nthe left-most column, which are obtained from the OCR engines. A non-maximal\\nsuppression algorithm is used to remove duplicated rows with extremely small\\ngaps. Shown in Figure 6, the built pipeline can detect tables at different positions\\non a page accurately. Continued tables from different pages are concatenated,\\nand a structured table representation has been easily created.\\n\\n18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\\n\\n\\x0c14\\n\\nZ. Shen et al.\\n\\n6 Conclusion\\n\\nLayoutParser provides a comprehensive toolkit for deep learning-based document\\nimage analysis. The off-the-shelf library is easy to install, and can be used to\\nbuild flexible and accurate pipelines for processing documents with complicated\\nstructures. It also supports high-level customization and enables easy labeling and\\ntraining of DL models on unique document image datasets. The LayoutParser\\ncommunity platform facilitates sharing DL models and DIA pipelines, inviting\\ndiscussion and promoting code reproducibility and reusability. The LayoutParser\\nteam is committed to keeping the library updated continuously and bringing\\nthe most recent advances in DL-based DIA, such as multi-modal document\\nmodeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\\n\\nAcknowledgements We thank the anonymous reviewers for their comments\\nand suggestions. This project is supported in part by NSF Grant OIA-2033558\\nand funding from the Harvard Data Science Initiative and Harvard Catalyst.\\nZejiang Shen thanks Doug Downey for suggestions.\\n\\nReferences\\n\\n[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado,\\nG.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A.,\\nIrving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg,\\nJ., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J.,\\nSteiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V.,\\nVi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng,\\nX.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015),\\nhttps://www.tensorflow.org/, software available from tensorflow.org\\n\\n[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a\\nhighly-functional python framework for reproducible experiments. In: 2018 16th\\nInternational Conference on Frontiers in Handwriting Recognition (ICFHR). pp.\\n423–428. IEEE (2018)\\n\\n[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic\\ndataset for performance evaluation of document layout analysis. In: 2009 10th\\nInternational Conference on Document Analysis and Recognition. pp. 296–300.\\nIEEE (2009)\\n\\n[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text\\ndetection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and\\nPattern Recognition. pp. 9365–9374 (2019)\\n\\n[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\\n\\nHierarchical Image Database. In: CVPR09 (2009)\\n\\n[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with\\ncoarse-to-fine attention. In: International Conference on Machine Learning. pp.\\n980–989. PMLR (2017)\\n\\n[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation.\\nIn: International conference on machine learning. pp. 1180–1189. PMLR (2015)\\n\\n\\x0cLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n15\\n\\n[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters,\\nM., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language\\nprocessing platform. arXiv preprint arXiv:1803.07640 (2018)\\n(cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P.,\\nGrali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in-\\nformation extraction (2020)\\n\\n[9]\\n\\n[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal\\nclassification: labelling unsegmented sequence data with recurrent neural networks.\\nIn: Proceedings of the 23rd international conference on Machine learning. pp.\\n369–376 (2006)\\n\\n[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for\\ndocument image classification and retrieval. In: 2015 13th International Conference\\non Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015)\\n[12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\\n\\nIEEE international conference on computer vision. pp. 2961–2969 (2017)\\n\\n[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition.\\nIn: Proceedings of the IEEE conference on computer vision and pattern recognition.\\npp. 770–778 (2016)\\n\\n[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\\n\\n2007(159), 2 (Jul 2007)\\n\\n[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis\\nbenchmarking. In: 2011 International Conference on Document Analysis and\\nRecognition. pp. 42–47. IEEE (2011)\\n\\n[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5\\nmillion images. In: Adjunct Publication of the 33rd Annual ACM Sym-\\nposium on User\\nInterface Software and Technology. p. 120–122. UIST\\n’20 Adjunct, Association for Computing Machinery, New York, NY, USA\\n(2020). https://doi.org/10.1145/3379350.3416143, https://doi-org.offcampus.\\nlib.washington.edu/10.1145/3379350.3416143\\n\\n[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N.,\\nThomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting\\nHeadlines and Visual Content from 16 Million Historic Newspaper Pages in\\nChronicling America, p. 3055–3062. Association for Computing Machinery, New\\nYork, NY, USA (2020), https://doi.org/10.1145/3340531.3412767\\n\\n[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark\\nfor image-based table detection and recognition. arXiv preprint arXiv:1903.01949\\n(2019)\\n\\n[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P.,\\nZitnick, C.L.: Microsoft coco: Common objects in context. In: European conference\\non computer vision. pp. 740–755. Springer (2014)\\n\\n[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic\\nsegmentation. In: Proceedings of the IEEE conference on computer vision and\\npattern recognition. pp. 3431–3440 (2015)\\n\\n[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten-\\ncroft, K.: An experimental workflow development platform for historical document\\ndigitisation and analysis. In: Proceedings of the 2011 workshop on historical\\ndocument imaging and processing. pp. 161–168 (2011)\\n\\n[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach\\nfor document segmentation. In: 2018 16th International Conference on Frontiers\\nin Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\\n\\n\\x0c16\\n\\nZ. Shen et al.\\n\\n[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z.,\\nDesmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017)\\n[24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,\\nT., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style,\\nhigh-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019)\\n[25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth\\nelements) format framework. In: 2010 20th International Conference on Pattern\\nRecognition. pp. 257–260. IEEE (2010)\\n\\n[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet:\\nAn approach for end to end table detection and structure recognition from image-\\nbased documents. In: Proceedings of the IEEE/CVF Conference on Computer\\nVision and Pattern Recognition Workshops. pp. 572–573 (2020)\\n\\n[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph\\nneural networks. In: 2019 International Conference on Document Analysis and\\nRecognition (ICDAR). pp. 142–147. IEEE (2019)\\n\\n[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object\\ndetection with region proposal networks. In: Advances in neural information\\nprocessing systems. pp. 91–99 (2015)\\n\\n[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph\\nneural network model. IEEE transactions on neural networks 20(1), 61–80 (2008)\\n[30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning\\nfor detection and structure recognition of tables in document images. In: 2017 14th\\nIAPR international conference on document analysis and recognition (ICDAR).\\nvol. 1, pp. 1162–1167. IEEE (2017)\\n\\n[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents\\nwith complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer\\nVision and Pattern Recognition Workshops. pp. 548–549 (2020)\\n\\n[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\\n\\nbased layout annotation. arXiv preprint arXiv:2010.01762 (2020)\\n\\n[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer,\\nA., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for\\nhistorical document image analysis. In: 2019 International Conference on Document\\nAnalysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\\n\\n[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P.,\\nRault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of-\\nthe-art natural language processing. arXiv preprint arXiv:1910.03771 (2019)\\n[35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2. https://\\n\\ngithub.com/facebookresearch/detectron2 (2019)\\n\\n[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C.,\\nChe, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document\\nunderstanding. arXiv preprint arXiv:2012.14740 (2020)\\n\\n[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\\n\\ntext and layout for document image understanding (2019)\\n\\n[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\\n\\nlayout analysis.\\n\\nument\\nAnalysis and Recognition (ICDAR). pp. 1015–1022.\\nhttps://doi.org/10.1109/ICDAR.2019.00166\\n\\nlargest dataset ever for doc-\\nIn: 2019 International Conference on Document\\nIEEE (Sep 2019).\\n\\n\\x0c')" + "1" ] }, - "execution_count": 2, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:07.601657Z", + "start_time": "2024-12-16T07:54:07.598489Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "0\n", + "2\n", + "\n", + "n\n", + "u\n", + "J\n", + "\n", + "1\n", + "2\n", + "\n", + "]\n", + "\n", + "V\n", + "C\n", + ".\n", + "s\n", + "c\n", + "[\n", + "\n", + "2\n", + "v\n", + "8\n", + "4\n", + "3\n", + "5\n", + "1\n", + ".\n", + "3\n", + "0\n", + "1\n", + "2\n", + ":\n", + "v\n", + "i\n", + "X\n", + "r\n", + "a\n", + "\n", + "LayoutParser: A Unified Too\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'total_pages': 16,\n", + " 'source': './example_data/layout-parser-paper.pdf'}\n" + ] + } + ], + "source": [ + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata attribute contains at least the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", + "\n", + "Additional metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Splitting mode & custom pages delimiter" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", + "\n", + "By default PDFMinerLoader will split the PDF as a single text flow." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:25.834238Z", + "start_time": "2024-12-16T07:54:25.283510Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'total_pages': 16,\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'page': 0}\n" + ] + } + ], + "source": [ + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + ")\n", "docs = loader.load()\n", - "docs[0]" + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the whole PDF as a single langchain Document object:" + }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:29.093923Z", + "start_time": "2024-12-16T07:54:28.541455Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'total_pages': 16,\n", + " 'source': './example_data/layout-parser-paper.pdf'}\n" + ] + } + ], + "source": [ + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ] + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:31.788562Z", + "start_time": "2024-12-16T07:54:31.099818Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': './example_data/layout-parser-paper.pdf'}\n" + "1\n", + "2\n", + "0\n", + "2\n", + "\n", + "n\n", + "u\n", + "J\n", + "\n", + "1\n", + "2\n", + "\n", + "]\n", + "\n", + "V\n", + "C\n", + ".\n", + "s\n", + "c\n", + "[\n", + "\n", + "2\n", + "v\n", + "8\n", + "4\n", + "3\n", + "5\n", + "1\n", + ".\n", + "3\n", + "0\n", + "1\n", + "2\n", + ":\n", + "v\n", + "i\n", + "X\n", + "r\n", + "a\n", + "\n", + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "\n", + "Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "\n", + "Keywords: Document Image Analysis · Deep Learning · Layout Analysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "\n", + "1\n", + "\n", + "Introduction\n", + "\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "2\n", + "\n", + "Z. Shen et al.\n", + "\n", + "37], layout detection [38, 22], table detection [26], and scene text detection [4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manual specification of complicated rules, which is the status quo with traditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "\n", + "However, there are several practical difficulties for taking advantages of re-\n", + "cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame-\n", + "works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\n", + "be obfuscated by implementation details [8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "models and other processing to obtain the final outputs. Often research teams use\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel.\n", + "\n", + "LayoutParser provides a unified toolkit to support DL-based document image\n", + "analysis and processing. To address the aforementioned challenges, LayoutParser\n", + "is built with the following components:\n", + "\n", + "1. An off-the-shelf toolkit for applying DL models for layout detection, character\n", + "\n", + "recognition, and other DIA tasks (Section 3)\n", + "\n", + "2. A rich repository of pre-trained neural network models (Model Zoo) that\n", + "\n", + "underlies the off-the-shelf usage\n", + "\n", + "3. Comprehensive tools for efficient document image data annotation and model\n", + "\n", + "tuning to support different levels of customization\n", + "\n", + "4. A DL model hub and community platform for the easy sharing, distribu-\n", + "tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [8, 34] and com-\n", + "puter vision [35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParser can be applied in sophisticated and large-scale digitization projects\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "LayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "3\n", + "\n", + "that require precision,\n" ] } ], "source": [ - "print(docs[0].metadata)" + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "# Extract images from the PDF" + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Lazy Load" + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", + "\n", + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with rapidOCR:" + }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 11, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:54:36.747677Z", + "start_time": "2024-12-16T07:54:35.149970Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -qU rapidocr-onnxruntime" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:02.014847Z", + "start_time": "2024-12-16T07:54:37.429433Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "\n", + "3.2 Layout Data Structures\n", + "\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\"Coordinate\n",\n" + ] + } + ], + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "### Extract images from the PDF with Tesseract:" + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:05.900469Z", + "start_time": "2024-12-16T07:55:04.700332Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -qU pytesseract" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:17.399048Z", + "start_time": "2024-12-16T07:55:06.602174Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "\n", + "3.2 Layout Data Structures\n", + "\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "Coordinate\n", + "\n", + "textblock\n", + "\n", + "x-interval\n", + "\n", + "JeAsaqui-A\n", + "\n", + "Coordinate\n", + "+\n", + "\n", + "Extra features\n", + "\n", + "Rectangle\n", + "\n", + "Quadrilateral\n", + "\n", + "Block\n", + "Text\n", + "\n", + "Block\n", + "Type\n", + "\n", + "Reading\n", + "Order\n", + "\n", + "layout\n", + "\n", + "[ coordinatel1 textblock1 |\n", + "'\n", + "\n", + "“y textblock2 , layout1 ]\n", + "\n", + "A list of the layout elements\n", + "\n", + "The same transformation and operation APIs\n" + ] + } + ], + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with multimodal model:" + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:20.606670Z", + "start_time": "2024-12-16T07:55:19.355677Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install -qU langchain_openai" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:21.438988Z", + "start_time": "2024-12-16T07:55:21.415651Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:55:22.547752Z", + "start_time": "2024-12-16T07:55:22.544055Z" + } + }, "outputs": [], "source": [ - "page = []\n", - "for doc in loader.lazy_load():\n", - " page.append(doc)\n", - " if len(page) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + "from getpass import getpass\n", "\n", - " page = []" + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:05.392741Z", + "start_time": "2024-12-16T07:55:23.413340Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "\n", + "3.2 Layout Data Structures\n", + "\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "![Image showing a diagram of layout elements and their components. It includes coordinate, textblock, and layout sections, illustrating rectangles and quadrilaterals with features like block text and reading order. The image highlights the transformation and operation APIs.\n", + "\n", + "Text in image:\n", + "- Coordinate\n", + "- [x1, y1\\\\]\n", + "- (x1, y1)\n", + "- (x2, y2)\n", + "- (x3, y3)\n", + "- (x4, y4)\n", + "- Rectangle\n", + "- Quadrilateral\n", + "- start\n", + "- end\n", + "- x-interval\n", + "- y-interval\n", + "- textblock\n", + "- Coordinate\n", + "- Extra features\n", + "- Block Text\n", + "- Block Type\n", + "- Reading Order\n", + "- layout\n", + "- [coordinate1, textblock1, ..., textblock2, layout1\\\\]\n", + "- A list of the layout elements\n", + "- The same transformation and operation APIs](.)\n" + ] + } + ], + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "loader = PDFMinerLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" ] }, { @@ -156,22 +1075,28 @@ "source": [ "## Using PDFMiner to generate HTML text\n", "\n", - "This can be helpful for chunking texts semantically into sections as the output html content can be parsed via `BeautifulSoup` to get more structured and rich information about font size, page numbers, PDF headers/footers, etc." + "This can be helpful for chunking texts semantically into sections as the output html content can be parsed via `BeautifulSoup` to get more structured and rich information about font size, page numbers, PDF headers / footers, etc." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 19, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:07.975309Z", + "start_time": "2024-12-16T07:56:07.425131Z" + } + }, "outputs": [ { "data": { "text/plain": [ - "Document(page_content='\\n\\n\\n\\n\\n
1\\n
2\\n
0\\n
2\\n
n\\n
u\\n
J\\n
1\\n
2\\n
]\\n
V\\n
C\\n
.\\n
s\\n
c\\n
[\\n
2\\n
v\\n
8\\n
4\\n
3\\n
5\\n
1\\n
.\\n
3\\n
0\\n
1\\n
2\\n
:\\n
v\\n
i\\n
X\\n
r\\n
a\\n
LayoutParser: A Unified Toolkit for Deep\\n
Learning Based Document Image Analysis\\n
Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\n
Lee
4, Jacob Carlson3, and Weining Li5\\n
1 Allen Institute for AI\\n
shannons@allenai.org\\n
2 Brown University\\n
ruochen zhang@brown.edu\\n
3 Harvard University\\n
{melissadell,jacob carlson}@fas.harvard.edu\\n
4 University of Washington\\n
bcgl@cs.washington.edu\\n
5 University of Waterloo\\n
w422li@uwaterloo.ca\\n
Abstract. Recent advances in document image analysis (DIA) have been\\n
primarily driven by the application of neural networks. Ideally, research\\n
outcomes could be easily deployed in production and extended for further\\n
investigation. However, various factors like loosely organized codebases\\n
and sophisticated model configurations complicate the easy reuse of im-\\n
portant innovations by a wide audience. Though there have been on-going\\n
efforts to improve reusability and simplify deep learning (DL) model\\n
development in disciplines like natural language processing and computer\\n
vision, none of them are optimized for challenges in the domain of DIA.\\n
This represents a major gap in the existing toolkit, as DIA is central to\\n
academic research across a wide range of disciplines in the social sciences\\n
and humanities. This paper introduces
LayoutParser, an open-source\\n
library for streamlining the usage of DL in DIA research and applica-\\n
tions. The core
LayoutParser library comes with a set of simple and\\n
intuitive interfaces for applying and customizing DL models for layout de-\\n
tection, character recognition, and many other document processing tasks.\\n
To promote extensibility,
LayoutParser also incorporates a community\\n
platform for sharing both pre-trained models and full document digiti-\\n
zation pipelines. We demonstrate that LayoutParser is helpful for both\\n
lightweight and large-scale digitization pipelines in real-word use cases.\\n
The library is publicly available at
https://layout-parser.github.io.\\n
Keywords: Document Image Analysis · Deep Learning · Layout Analysis\\n
· Character Recognition · Open Source library · Toolkit.\\n
1\\n
Introduction\\n
Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\n
document image analysis (DIA) tasks including document image classification [11,\\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
2\\n
Z. Shen et al.\\n
37], layout detection [38, 22], table detection [26], and scene text detection [4].\\n
A generalized learning-based framework dramatically reduces the need for the\\n
manual specification of complicated rules, which is the status quo with traditional\\n
methods. DL has the potential to transform DIA pipelines and benefit a broad\\n
spectrum of large-scale document digitization projects.\\n
However, there are several practical difficulties for taking advantages of re-\\n
cent advances in DL-based methods: 1) DL models are notoriously convoluted\\n
for reuse and extension. Existing models are developed using distinct frame-\\n
works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\\n
be obfuscated by implementation details [8]. It can be a time-consuming and\\n
frustrating experience to debug, reproduce, and adapt existing models for DIA,\\n
and
many researchers who would benefit the most from using these methods lack\\n
the technical background to implement them from scratch.
2) Document images\\n
contain diverse and disparate patterns across domains, and customized training\\n
is often required to achieve a desirable detection accuracy. Currently there is no\\n
full-fledged infrastructure for easily curating the target document image datasets\\n
and fine-tuning or re-training the models.
3) DIA usually requires a sequence of\\n
models and other processing to obtain the final outputs. Often research teams use\\n
DL models and then perform further document analyses in separate processes,\\n
and these pipelines are not documented in any central location (and often not\\n
documented at all). This makes it
difficult for research teams to learn about how\\n
full pipelines are implemented
and leads them to invest significant resources in\\n
reinventing the DIA wheel
.\\n
LayoutParser provides a unified toolkit to support DL-based document image\\n
analysis and processing. To address the aforementioned challenges,
LayoutParser\\n
is built with the following components:\\n
1. An off-the-shelf toolkit for applying DL models for layout detection, character\\n
recognition, and other DIA tasks (Section 3)\\n
2. A rich repository of pre-trained neural network models (Model Zoo) that\\n
underlies the off-the-shelf usage\\n
3. Comprehensive tools for efficient document image data annotation and model\\n
tuning to support different levels of customization\\n
4. A DL model hub and community platform for the easy sharing, distribu-\\n
tion, and discussion of DIA models and pipelines, to promote reusability,\\n
reproducibility, and extensibility (Section 4)\\n
The library implements simple and intuitive Python APIs without sacrificing\\n
generalizability and versatility, and can be easily installed via pip. Its convenient\\n
functions for handling document image data can be seamlessly integrated with\\n
existing DIA pipelines. With detailed documentations and carefully curated\\n
tutorials, we hope this tool will benefit a variety of end-users, and will lead to\\n
advances in applications in both industry and academic research.\\n
LayoutParser is well aligned with recent efforts for improving DL model\\n
reusability in other disciplines like natural language processing [8, 34] and com-\\n
puter vision [35], but with a focus on unique challenges in DIA. We show\\n
LayoutParser can be applied in sophisticated and large-scale digitization projects\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
3\\n
that require precision, efficiency, and robustness, as well as simple and light-\\n
weight document processing tasks focusing on efficacy and flexibility (Section 5).\\n
LayoutParser is being actively maintained, and support for more deep learning\\n
models and novel methods in text-based layout analysis methods [37, 34] is\\n
planned.\\n
The rest of the paper is organized as follows. Section 2 provides an overview\\n
of related work. The core
LayoutParser library, DL Model Zoo, and customized\\n
model training are described in Section 3, and the DL model hub and commu-\\n
nity platform are detailed in Section 4. Section 5 shows two examples of how\\n
LayoutParser can be used in practical DIA projects, and Section 6 concludes.\\n
2 Related Work\\n
Recently, various DL models and datasets have been developed for layout analysis\\n
tasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\\n
tation tasks on historical documents. Object detection-based methods like Faster\\n
R-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\\n
and detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\\n
been used in table detection [27]. However, these models are usually implemented\\n
individually and there is no unified framework to load and use such models.\\n
There has been a surge of interest in creating open-source tools for document\\n
image processing: a search of
document image analysis in Github leads to 5M\\n
relevant code pieces
6; yet most of them rely on traditional rule-based methods\\n
or provide limited functionalities. The closest prior research to our work is the\\n
OCR-D project
7, which also tries to build a complete toolkit for DIA. However,\\n
similar to the platform developed by Neudecker et al. [21], it is designed for\\n
analyzing historical documents, and provides no supports for recent DL models.\\n
The
DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\\n
documents via analyzing the stored PDF data. Repositories like
DeepLayout9\\n
and Detectron2-PubLayNet10 are individual deep learning models trained on\\n
layout analysis datasets without support for the full DIA pipeline. The Document\\n
Analysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\\n
aim to improve the reproducibility of DIA methods (or DL models), yet they\\n
are not actively maintained. OCR engines like
Tesseract [14], easyOCR11 and\\n
paddleOCR12 usually do not come with comprehensive functionalities for other\\n
DIA tasks like layout analysis.\\n
Recent years have also seen numerous efforts to create libraries for promoting\\n
reproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n
6 The number shown is obtained by specifying the search type as ‘code’.\\n
7 https://ocr-d.de/en/about\\n
8 https://github.com/BobLd/DocumentLayoutAnalysis\\n
9 https://github.com/leonlulu/DeepLayout\\n
10 https://github.com/hpanwar08/detectron2\\n
11 https://github.com/JaidedAI/EasyOCR\\n
12 https://github.com/PaddlePaddle/PaddleOCR\\n
\\n\\n\\n
4\\n
Z. Shen et al.\\n
Fig. 1: The overall architecture of LayoutParser. For an input document image,\\n
the core LayoutParser library provides a set of off-the-shelf tools for layout\\n
detection, OCR, visualization, and storage, backed by a carefully designed layout\\n
data structure.
LayoutParser also supports high level customization via efficient\\n
layout annotation and model training functions. These improve model accuracy\\n
on the target samples. The community platform enables the easy sharing of DIA\\n
models and whole digitization pipelines to promote reusability and reproducibility.\\n
A collection of detailed documentation, tutorials and exemplar projects make\\n
LayoutParser easy to learn and use.\\n
AllenNLP [8] and transformers [34] have provided the community with complete\\n
DL-based support for developing and deploying models for general computer\\n
vision and natural language processing problems.
LayoutParser, on the other\\n
hand, specializes specifically in DIA tasks.
LayoutParser is also equipped with a\\n
community platform inspired by established model hubs such as
Torch Hub [23]\\n
and
TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\\n
full document processing pipelines that are unique to DIA tasks.\\n
There have been a variety of document data collections to facilitate the\\n
development of DL models. Some examples include PRImA [3](magazine layouts),\\n
PubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\\n
papers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\\n
HJDataset [31](historical Japanese document layouts). A spectrum of models\\n
trained on these datasets are currently available in the LayoutParser model zoo\\n
to support different use cases.\\n
3 The Core LayoutParser Library\\n
At the core of LayoutParser is an off-the-shelf toolkit that streamlines DL-\\n
based document image analysis. Five components support a simple interface\\n
with comprehensive functionalities: 1) The
layout detection models enable using\\n
pre-trained or self-trained DL models for layout detection with just four lines\\n
of code. 2) The detected layout information is stored in carefully engineered\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nEfficient Data Annotation\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nCustomized Model Training\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nModel Customization\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDIA Model Hub\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDIA Pipeline Sharing\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nCommunity Platform\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nLayout Detection Models\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDocument Images \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nThe Core LayoutParser Library\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nOCR Module\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nStorage & Visualization\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nLayout Data Structure\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
5\\n
Table 1: Current layout detection models in the LayoutParser model zoo\\n
Dataset\\n
Base Model1 Large Model Notes\\n
PubLayNet [38]\\n
PRImA [3]\\n
Newspaper [17]\\n
TableBank [18]\\n
HJDataset [31]\\n
F / M\\n
M\\n
F\\n
F\\n
F / M\\n
M\\n
-\\n
-\\n
F\\n
-\\n
Layouts of modern scientific documents\\n
Layouts of scanned modern magazines and scientific reports\\n
Layouts of scanned US newspapers from the 20th century\\n
Table region on modern scientific and business document\\n
Layouts of history Japanese documents\\n
1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy\\n
vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\\n
backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\\n
R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\\n
using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\\n
zoo in coming months.\\n
layout data structures, which are optimized for efficiency and versatility. 3) When\\n
necessary, users can employ existing or customized OCR models via the unified\\n
API provided in the
OCR module. 4) LayoutParser comes with a set of utility\\n
functions for the
visualization and storage of the layout data. 5) LayoutParser\\n
is also highly customizable, via its integration with functions for layout data\\n
annotation and model training
. We now provide detailed descriptions for each\\n
component.\\n
3.1 Layout Detection Models\\n
In LayoutParser, a layout model takes a document image as an input and\\n
generates a list of rectangular boxes for the target content regions. Different\\n
from traditional methods, it relies on deep convolutional neural networks rather\\n
than manually curated rules to identify content regions. It is formulated as an\\n
object detection problem and state-of-the-art models like Faster R-CNN [28] and\\n
Mask R-CNN [12] are used. This yields prediction results of high accuracy and\\n
makes it possible to build a concise, generalized interface for layout detection.\\n
LayoutParser, built upon Detectron2 [35], provides a minimal API that can\\n
perform layout detection with only four lines of code in Python:\\n
1 import layoutparser as lp\\n
2 image = cv2 . imread ( " image_file " ) # load images\\n
3 model = lp . De t e c tro n2 Lay outM odel (\\n
" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config " )\\n
4\\n
5
layout = model . detect ( image )\\n
LayoutParser provides a wealth of pre-trained model weights using various\\n
datasets covering different languages, time periods, and document types. Due to\\n
domain shift [7], the prediction performance can notably drop when models are ap-\\n
plied to target samples that are significantly different from the training dataset. As\\n
document structures and layouts vary greatly in different domains, it is important\\n
to select models trained on a dataset similar to the test samples. A semantic syntax\\n
is used for initializing the model weights in
LayoutParser, using both the dataset\\n
name and model name lp://<dataset-name>/<model-architecture-name>.\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
6\\n
Z. Shen et al.\\n
Fig. 2: The relationship between the three types of layout data structures.\\n
Coordinate supports three kinds of variation; TextBlock consists of the co-\\n
ordinate information and extra features like block text, types, and reading orders;\\n
a
Layout object is a list of all possible layout elements, including other Layout\\n
objects. They all support the same set of transformation and operation APIs for\\n
maximum flexibility.\\n
Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\\n
on 5 different datasets. Description of the training dataset is provided alongside\\n
with the trained models such that users can quickly identify the most suitable\\n
models for their tasks. Additionally, when such a model is not readily available,\\n
LayoutParser also supports training customized layout models and community\\n
sharing of the models (detailed in Section 3.5).\\n
3.2 Layout Data Structures\\n
A critical feature of LayoutParser is the implementation of a series of data\\n
structures and operations that can be used to efficiently process and manipulate\\n
the layout elements. In document image analysis pipelines, various post-processing\\n
on the layout analysis model outputs is usually required to obtain the final\\n
outputs. Traditionally, this requires exporting DL model outputs and then loading\\n
the results into other pipelines. All model outputs from
LayoutParser will be\\n
stored in carefully engineered data types optimized for further processing, which\\n
makes it possible to build an end-to-end document digitization pipeline within\\n
LayoutParser. There are three key components in the data structure, namely\\n
the
Coordinate system, the TextBlock, and the Layout. They provide different\\n
levels of abstraction for the layout data, and a set of APIs are supported for\\n
transformations or operations on these classes.\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
7\\n
Coordinates are the cornerstones for storing layout information. Currently,\\n
three types of
Coordinate data structures are provided in LayoutParser, shown\\n
in Figure 2.
Interval and Rectangle are the most common data types and\\n
support specifying 1D or 2D regions within a document. They are parameterized\\n
with 2 and 4 parameters. A
Quadrilateral class is also implemented to support\\n
a more generalized representation of rectangular regions when the document\\n
is skewed or distorted, where the 4 corner points can be specified and a total\\n
of 8 degrees of freedom are supported. A wide collection of transformations\\n
like
shift, pad, and scale, and operations like intersect, union, and is_in,\\n
are supported for these classes. Notably, it is common to separate a segment\\n
of the image and analyze it individually.
LayoutParser provides full support\\n
for this scenario via image cropping operations
crop_image and coordinate\\n
transformations like
relative_to and condition_on that transform coordinates\\n
to and from their relative representations. We refer readers to Table 2 for a more\\n
detailed description of these operations13.\\n
Based on Coordinates, we implement the TextBlock class that stores both\\n
the positional and extra features of individual layout elements. It also supports\\n
specifying the reading orders via setting the
parent field to the index of the parent\\n
object. A
Layout class is built that takes in a list of TextBlocks and supports\\n
processing the elements in batch.
Layout can also be nested to support hierarchical\\n
layout structures. They support the same operations and transformations as the\\n
Coordinate classes, minimizing both learning and deployment effort.\\n
3.3 OCR\\n
LayoutParser provides a unified interface for existing OCR tools. Though there\\n
are many OCR tools available, they are usually configured differently with distinct\\n
APIs or protocols for using them. It can be inefficient to add new OCR tools into\\n
an existing pipeline, and difficult to make direct comparisons among the available\\n
tools to find the best option for a particular project. To this end,
LayoutParser\\n
builds a series of wrappers among existing OCR engines, and provides nearly\\n
the same syntax for using them. It supports a plug-and-play style of using OCR\\n
engines, making it effortless to switch, evaluate, and compare different OCR\\n
modules:\\n
1 ocr_agent = lp . TesseractAgent ()\\n
2 # Can be easily switched to other OCR software\\n
3 tokens = ocr_agent . detect ( image )\\n
The OCR outputs will also be stored in the aforementioned layout data\\n
structures and can be seamlessly incorporated into the digitization pipeline.\\n
Currently
LayoutParser supports the Tesseract and Google Cloud Vision OCR\\n
engines.\\n
LayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained\\n
with the Connectionist Temporal Classification (CTC) loss [10]. It can be used\\n
like the other OCR modules, and can be easily trained on customized datasets.\\n
13 This is also available in the LayoutParser documentation pages.\\n
\\n\\n\\n\\n\\n\\n
8\\n
Z. Shen et al.\\n
Table 2: All operations supported by the layout elements. The same APIs are\\n
supported across different layout element classes including
Coordinate types,\\n
TextBlock and Layout.\\n
Operation Name\\n
Description\\n
block.pad(top, bottom, right, left) Enlarge the current block according to the input\\n
block.scale(fx, fy)\\n
block.shift(dx, dy)\\n
Scale the current block given the ratio\\n
in x and y direction\\n
Move the current block with the shift\\n
distances in x and y direction\\n
block1.is in(block2)\\n
Whether block1 is inside of block2\\n
block1.intersect(block2)\\n
block1.union(block2)\\n
block1.relative to(block2)\\n
block1.condition on(block2)\\n
Return the intersection region of block1 and block2.\\n
Coordinate type to be determined based on the inputs.\\n
Return the union region of block1 and block2.\\n
Coordinate type to be determined based on the inputs.\\n
Convert the absolute coordinates of block1 to\\n
relative coordinates to block2\\n
Calculate the absolute coordinates of block1 given\\n
the canvas block2’s absolute coordinates\\n
block.crop image(image)\\n
Obtain the image segments in the block region\\n
3.4 Storage and visualization\\n
The end goal of DIA is to transform the image-based document data into a\\n
structured database.
LayoutParser supports exporting layout data into different\\n
formats like
JSON, csv, and will add the support for the METS/ALTO XML\\n
format
14 . It can also load datasets from layout analysis-specific formats like\\n
COCO [38] and the Page Format [25] for training layout models (Section 3.5).\\n
Visualization of the layout detection results is critical for both presentation\\n
and debugging.
LayoutParser is built with an integrated API for displaying the\\n
layout information along with the original document image. Shown in Figure 3, it\\n
enables presenting layout data with rich meta information and features in different\\n
modes. More detailed information can be found in the online
LayoutParser\\n
documentation page.\\n
3.5 Customized Model Training\\n
Besides the off-the-shelf library, LayoutParser is also highly customizable with\\n
supports for highly unique and challenging document analysis tasks. Target\\n
document images can be vastly different from the existing datasets for train-\\n
ing layout models, which leads to low layout detection accuracy. Training data\\n
14 https://altoxml.github.io\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
9\\n
Fig. 3: Layout detection and OCR results visualization generated by the\\n
LayoutParser APIs. Mode I directly overlays the layout region bounding boxes\\n
and categories over the original image. Mode II recreates the original document\\n
via drawing the OCR’d texts at their corresponding positions on the image\\n
canvas. In this figure, tokens in textual regions are filtered using the API and\\n
then displayed.\\n
can also be highly sensitive and not sharable publicly. To overcome these chal-\\n
lenges,
LayoutParser is built with rich features for efficient data annotation and\\n
customized model training.\\n
LayoutParser incorporates a toolkit optimized for annotating document lay-\\n
outs using object-level active learning [32]. With the help from a layout detection\\n
model trained along with labeling, only the most important layout objects within\\n
each image, rather than the whole image, are required for labeling. The rest of\\n
the regions are automatically annotated with high confidence predictions from\\n
the layout detection model. This allows a layout dataset to be created more\\n
efficiently with only around 60% of the labeling budget.\\n
After the training dataset is curated, LayoutParser supports different modes\\n
for training the layout models.
Fine-tuning can be used for training models on a\\n
small newly-labeled dataset by initializing the model with existing pre-trained\\n
weights.
Training from scratch can be helpful when the source dataset and\\n
target are significantly different and a large training set is available. However, as\\n
suggested in Studer et al.’s work[33], loading pre-trained weights on large-scale\\n
datasets like ImageNet [5], even from totally different domains, can still boost\\n
model performance. Through the integrated API provided by
LayoutParser,\\n
users can easily compare model performances on the benchmark datasets.\\n
\\n\\n
10\\n
Z. Shen et al.\\n
Fig. 4: Illustration of (a) the original historical Japanese document with layout\\n
detection results and (b) a recreated version of the document image that achieves\\n
much better character recognition recall. The reorganization algorithm rearranges\\n
the tokens based on the their detected bounding boxes given a maximum allowed\\n
height.\\n
4 LayoutParser Community Platform\\n
Another focus of LayoutParser is promoting the reusability of layout detection\\n
models and full digitization pipelines. Similar to many existing deep learning\\n
libraries,
LayoutParser comes with a community model hub for distributing\\n
layout models. End-users can upload their self-trained models to the model hub,\\n
and these models can be loaded into a similar interface as the currently available\\n
LayoutParser pre-trained models. For example, the model trained on the News\\n
Navigator dataset [17] has been incorporated in the model hub.\\n
Beyond DL models, LayoutParser also promotes the sharing of entire doc-\\n
ument digitization pipelines. For example, sometimes the pipeline requires the\\n
combination of multiple DL models to achieve better accuracy. Currently, pipelines\\n
are mainly described in academic papers and implementations are often not pub-\\n
licly available. To this end, the
LayoutParser community platform also enables\\n
the sharing of layout pipelines to promote the discussion and reuse of techniques.\\n
For each shared pipeline, it has a dedicated project page, with links to the source\\n
code, documentation, and an outline of the approaches. A discussion panel is\\n
provided for exchanging ideas. Combined with the core
LayoutParser library,\\n
users can easily build reusable components based on the shared pipelines and\\n
apply them to solve their unique problems.\\n
5 Use Cases\\n
The core objective of LayoutParser is to make it easier to create both large-scale\\n
and light-weight document digitization pipelines. Large-scale document processing\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
11\\n
focuses on precision, efficiency, and robustness. The target documents may have\\n
complicated structures, and may require training multiple layout detection models\\n
to achieve the optimal accuracy. Light-weight pipelines are built for relatively\\n
simple documents, with an emphasis on development ease, speed and flexibility.\\n
Ideally one only needs to use existing resources, and model training should be\\n
avoided. Through two exemplar projects, we show how practitioners in both\\n
academia and industry can easily build such pipelines using
LayoutParser and\\n
extract high-quality structured document data for their downstream tasks. The\\n
source code for these projects will be publicly available in the
LayoutParser\\n
community hub.\\n
5.1 A Comprehensive Historical Document Digitization Pipeline\\n
The digitization of historical documents can unlock valuable data that can shed\\n
light on many important social, economic, and historical questions. Yet due to\\n
scan noises, page wearing, and the prevalence of complicated layout structures, ob-\\n
taining a structured representation of historical document scans is often extremely\\n
complicated.\\n
In this example,
LayoutParser was\\n
used to develop a comprehensive\\n
pipeline, shown in Figure 5, to gener-\\n
ate high-quality structured data from\\n
historical Japanese firm financial ta-\\n
bles with complicated layouts. The\\n
pipeline applies two layout models to\\n
identify different levels of document\\n
structures and two customized OCR\\n
engines for optimized character recog-\\n
nition accuracy.\\n
As shown in Figure 4 (a), the\\n
document contains columns of text\\n
written vertically
15, a common style\\n
in Japanese. Due to scanning noise\\n
and archaic printing technology, the\\n
columns can be skewed or have vari-\\n
able widths, and hence cannot be eas-\\n
ily identified via rule-based methods.\\n
Within each column, words are sepa-\\n
rated by white spaces of variable size,\\n
and the vertical positions of objects\\n
can be an indicator of their layout\\n
type.\\n
Fig. 5: Illustration of how LayoutParser\\n
helps with the historical document digi-\\n
tization pipeline.\\n
15 A document page consists of eight rows like this. For simplicity we skip the row\\n
segmentation discussion and refer readers to the source code when available.\\n
\\n\\n\\n
12\\n
Z. Shen et al.\\n
To decipher the complicated layout\\n
structure, two object detection models have been trained to recognize individual\\n
columns and tokens, respectively. A small training set (400 images with approxi-\\n
mately 100 annotations each) is curated via the active learning based annotation\\n
tool [32] in
LayoutParser. The models learn to identify both the categories and\\n
regions for each token or column via their distinct visual features. The layout\\n
data structure enables easy grouping of the tokens within each column, and\\n
rearranging columns to achieve the correct reading orders based on the horizontal\\n
position. Errors are identified and rectified via checking the consistency of the\\n
model predictions. Therefore, though trained on a small dataset, the pipeline\\n
achieves a high level of layout detection accuracy: it achieves a 96.97 AP [19]\\n
score across 5 categories for the column detection model, and a 89.23 AP across\\n
4 categories for the token detection model.\\n
A combination of character recognition methods is developed to tackle the\\n
unique challenges in this document. In our experiments, we found that irregular\\n
spacing between the tokens led to a low character recognition recall rate, whereas\\n
existing OCR models tend to perform better on densely-arranged texts. To\\n
overcome this challenge, we create a document reorganization algorithm that\\n
rearranges the text based on the token bounding boxes detected in the layout\\n
analysis step. Figure 4 (b) illustrates the generated image of dense text, which is\\n
sent to the OCR APIs as a whole to reduce the transaction costs. The flexible\\n
coordinate system in
LayoutParser is used to transform the OCR results relative\\n
to their original positions on the page.\\n
Additionally, it is common for historical documents to use unique fonts\\n
with different glyphs, which significantly degrades the accuracy of OCR models\\n
trained on modern texts. In this document, a special flat font is used for printing\\n
numbers and could not be detected by off-the-shelf OCR engines. Using the highly\\n
flexible functionalities from
LayoutParser, a pipeline approach is constructed\\n
that achieves a high recognition accuracy with minimal effort. As the characters\\n
have unique visual structures and are usually clustered together, we train the\\n
layout model to identify number regions with a dedicated category. Subsequently,\\n
LayoutParser crops images within these regions, and identifies characters within\\n
them using a self-trained OCR model based on a CNN-RNN [6]. The model\\n
detects a total of 15 possible categories, and achieves a 0.98 Jaccard score
16 and\\n
a 0.17 average Levinstein distances17 for token prediction on the test set.\\n
Overall, it is possible to create an intricate and highly accurate digitization\\n
pipeline for large-scale digitization using
LayoutParser. The pipeline avoids\\n
specifying the complicated rules used in traditional methods, is straightforward\\n
to develop, and is robust to outliers. The DL models also generate fine-grained\\n
results that enable creative approaches like page reorganization for OCR.\\n
16 This measures the overlap between the detected and ground-truth characters, and\\n
the maximum is 1.\\n
17 This measures the number of edits from the ground-truth text to the predicted text,\\n
and lower is better.\\n
\\n\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
13\\n
Fig. 6: This lightweight table detector can identify tables (outlined in red) and\\n
cells (shaded in blue) in different locations on a page. In very few cases (d), it\\n
might generate minor error predictions, e.g, failing to capture the top text line of\\n
a table.\\n
5.2 A light-weight Visual Table Extractor\\n
Detecting tables and parsing their structures (table extraction) are of central im-\\n
portance for many document digitization tasks. Many previous works [26, 30, 27]\\n
and tools
18 have been developed to identify and parse table structures. Yet they\\n
might require training complicated models from scratch, or are only applicable\\n
for born-digital PDF documents. In this section, we show how
LayoutParser can\\n
help build a light-weight accurate visual table extractor for legal docket tables\\n
using the existing resources with minimal effort.\\n
The extractor uses a pre-trained layout detection model for identifying the\\n
table regions and some simple rules for pairing the rows and the columns in the\\n
PDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the\\n
LayoutParser Model Zoo can be used for detecting table regions. By filtering\\n
out model predictions of low confidence and removing overlapping predictions,\\n
LayoutParser can identify the tabular regions on each page, which significantly\\n
simplifies the subsequent steps. By applying the line detection functions within\\n
the tabular segments, provided in the utility module from LayoutParser, the\\n
pipeline can identify the three distinct columns in the tables. A row clustering\\n
method is then applied via analyzing the y coordinates of token bounding boxes in\\n
the left-most column, which are obtained from the OCR engines. A non-maximal\\n
suppression algorithm is used to remove duplicated rows with extremely small\\n
gaps. Shown in Figure 6, the built pipeline can detect tables at different positions\\n
on a page accurately. Continued tables from different pages are concatenated,\\n
and a structured table representation has been easily created.\\n
18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\\n
\\n\\n\\n
14\\n
Z. Shen et al.\\n
6 Conclusion\\n
LayoutParser provides a comprehensive toolkit for deep learning-based document\\n
image analysis. The off-the-shelf library is easy to install, and can be used to\\n
build flexible and accurate pipelines for processing documents with complicated\\n
structures. It also supports high-level customization and enables easy labeling and\\n
training of DL models on unique document image datasets. The
LayoutParser\\n
community platform facilitates sharing DL models and DIA pipelines, inviting\\n
discussion and promoting code reproducibility and reusability. The
LayoutParser\\n
team is committed to keeping the library updated continuously and bringing\\n
the most recent advances in DL-based DIA, such as multi-modal document\\n
modeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\\n
Acknowledgements We thank the anonymous reviewers for their comments\\n
and suggestions. This project is supported in part by NSF Grant OIA-2033558\\n
and funding from the Harvard Data Science Initiative and Harvard Catalyst.\\n
Zejiang Shen thanks Doug Downey for suggestions.\\n
References\\n
[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado,\\n
G.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A.,\\n
Irving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg,\\n
J., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J.,\\n
Steiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V.,\\n
Vi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng,\\n
X.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015),\\n
https://www.tensorflow.org/, software available from tensorflow.org\\n
[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a\\n
highly-functional python framework for reproducible experiments. In: 2018 16th\\n
International Conference on Frontiers in Handwriting Recognition (ICFHR). pp.\\n
423–428. IEEE (2018)\\n
[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic\\n
dataset for performance evaluation of document layout analysis. In: 2009 10th\\n
International Conference on Document Analysis and Recognition. pp. 296–300.\\n
IEEE (2009)\\n
[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text\\n
detection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and\\n
Pattern Recognition. pp. 9365–9374 (2019)\\n
[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\\n
Hierarchical Image Database. In: CVPR09 (2009)\\n
[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with\\n
coarse-to-fine attention. In: International Conference on Machine Learning. pp.\\n
980–989. PMLR (2017)\\n
[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation.\\n
In: International conference on machine learning. pp. 1180–1189. PMLR (2015)\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
15\\n
[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters,\\n
M., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language\\n
processing platform. arXiv preprint arXiv:1803.07640 (2018)\\n
(cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P.,\\n
Grali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in-\\n
formation extraction (2020)\\n
[9]\\n
[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal\\n
classification: labelling unsegmented sequence data with recurrent neural networks.\\n
In: Proceedings of the 23rd international conference on Machine learning. pp.\\n
369–376 (2006)\\n
[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for\\n
document image classification and retrieval. In: 2015 13th International Conference\\n
on Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015)\\n
[12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\\n
IEEE international conference on computer vision. pp. 2961–2969 (2017)\\n
[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition.\\n
In: Proceedings of the IEEE conference on computer vision and pattern recognition.\\n
pp. 770–778 (2016)\\n
[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\\n
2007(159), 2 (Jul 2007)\\n
[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis\\n
benchmarking. In: 2011 International Conference on Document Analysis and\\n
Recognition. pp. 42–47. IEEE (2011)\\n
[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5\\n
million images. In: Adjunct Publication of the 33rd Annual ACM Sym-\\n
posium on User\\n
Interface Software and Technology. p. 120–122. UIST\\n
’20 Adjunct, Association for Computing Machinery, New York, NY, USA\\n
(2020). https://doi.org/10.1145/3379350.3416143,
https://doi-org.offcampus.\\n
lib.washington.edu/10.1145/3379350.3416143\\n
[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N.,\\n
Thomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting\\n
Headlines and Visual Content from 16 Million Historic Newspaper Pages in\\n
Chronicling America, p. 3055–3062. Association for Computing Machinery, New\\n
York, NY, USA (2020),
https://doi.org/10.1145/3340531.3412767\\n
[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark\\n
for image-based table detection and recognition. arXiv preprint arXiv:1903.01949\\n
(2019)\\n
[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P.,\\n
Zitnick, C.L.: Microsoft coco: Common objects in context. In: European conference\\n
on computer vision. pp. 740–755. Springer (2014)\\n
[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic\\n
segmentation. In: Proceedings of the IEEE conference on computer vision and\\n
pattern recognition. pp. 3431–3440 (2015)\\n
[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten-\\n
croft, K.: An experimental workflow development platform for historical document\\n
digitisation and analysis. In: Proceedings of the 2011 workshop on historical\\n
document imaging and processing. pp. 161–168 (2011)\\n
[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach\\n
for document segmentation. In: 2018 16th International Conference on Frontiers\\n
in Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\\n
\\n\\n
16\\n
Z. Shen et al.\\n
[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z.,\\n
Desmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017)\\n
[24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,\\n
T., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style,\\n
high-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019)\\n
[25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth\\n
elements) format framework. In: 2010 20th International Conference on Pattern\\n
Recognition. pp. 257–260. IEEE (2010)\\n
[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet:\\n
An approach for end to end table detection and structure recognition from image-\\n
based documents. In: Proceedings of the IEEE/CVF Conference on Computer\\n
Vision and Pattern Recognition Workshops. pp. 572–573 (2020)\\n
[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph\\n
neural networks. In: 2019 International Conference on Document Analysis and\\n
Recognition (ICDAR). pp. 142–147. IEEE (2019)\\n
[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object\\n
detection with region proposal networks. In: Advances in neural information\\n
processing systems. pp. 91–99 (2015)\\n
[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph\\n
neural network model. IEEE transactions on neural networks
20(1), 61–80 (2008)\\n
[30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning\\n
for detection and structure recognition of tables in document images. In: 2017 14th\\n
IAPR international conference on document analysis and recognition (ICDAR).\\n
vol. 1, pp. 1162–1167. IEEE (2017)\\n
[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents\\n
with complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer\\n
Vision and Pattern Recognition Workshops. pp. 548–549 (2020)\\n
[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\\n
based layout annotation. arXiv preprint arXiv:2010.01762 (2020)\\n
[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer,\\n
A., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for\\n
historical document image analysis. In: 2019 International Conference on Document\\n
Analysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\\n
[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P.,\\n
Rault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of-\\n
the-art natural language processing. arXiv preprint arXiv:1910.03771 (2019)\\n
[35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2.
https://\\n
github.com/facebookresearch/detectron2 (2019)\\n
[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C.,\\n
Che, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document\\n
understanding. arXiv preprint arXiv:2012.14740 (2020)\\n
[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\\n
text and layout for document image understanding (2019)\\n
[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\\n
layout analysis.\\n
ument\\n
Analysis and Recognition (ICDAR). pp. 1015–1022.\\n
https://doi.org/10.1109/ICDAR.2019.00166\\n
largest dataset ever for doc-\\n
In: 2019 International Conference on Document\\n
IEEE (Sep 2019).\\n
Page: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
\\n\\n', metadata={'source': '../../docs/integrations/document_loaders/example_data/layout-parser-paper.pdf'})" + "Document(metadata={'source': './example_data/layout-parser-paper.pdf'}, page_content='\\n\\n\\n\\n\\n
1\\n
2\\n
0\\n
2\\n
n\\n
u\\n
J\\n
1\\n
2\\n
]\\n
V\\n
C\\n
.\\n
s\\n
c\\n
[\\n
2\\n
v\\n
8\\n
4\\n
3\\n
5\\n
1\\n
.\\n
3\\n
0\\n
1\\n
2\\n
:\\n
v\\n
i\\n
X\\n
r\\n
a\\n
LayoutParser: A Unified Toolkit for Deep\\n
Learning Based Document Image Analysis\\n
Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\n
Lee
4, Jacob Carlson3, and Weining Li5\\n
1 Allen Institute for AI\\n
shannons@allenai.org\\n
2 Brown University\\n
ruochen zhang@brown.edu\\n
3 Harvard University\\n
{melissadell,jacob carlson}@fas.harvard.edu\\n
4 University of Washington\\n
bcgl@cs.washington.edu\\n
5 University of Waterloo\\n
w422li@uwaterloo.ca\\n
Abstract. Recent advances in document image analysis (DIA) have been\\n
primarily driven by the application of neural networks. Ideally, research\\n
outcomes could be easily deployed in production and extended for further\\n
investigation. However, various factors like loosely organized codebases\\n
and sophisticated model configurations complicate the easy reuse of im-\\n
portant innovations by a wide audience. Though there have been on-going\\n
efforts to improve reusability and simplify deep learning (DL) model\\n
development in disciplines like natural language processing and computer\\n
vision, none of them are optimized for challenges in the domain of DIA.\\n
This represents a major gap in the existing toolkit, as DIA is central to\\n
academic research across a wide range of disciplines in the social sciences\\n
and humanities. This paper introduces
LayoutParser, an open-source\\n
library for streamlining the usage of DL in DIA research and applica-\\n
tions. The core
LayoutParser library comes with a set of simple and\\n
intuitive interfaces for applying and customizing DL models for layout de-\\n
tection, character recognition, and many other document processing tasks.\\n
To promote extensibility,
LayoutParser also incorporates a community\\n
platform for sharing both pre-trained models and full document digiti-\\n
zation pipelines. We demonstrate that LayoutParser is helpful for both\\n
lightweight and large-scale digitization pipelines in real-word use cases.\\n
The library is publicly available at
https://layout-parser.github.io.\\n
Keywords: Document Image Analysis · Deep Learning · Layout Analysis\\n
· Character Recognition · Open Source library · Toolkit.\\n
1\\n
Introduction\\n
Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\n
document image analysis (DIA) tasks including document image classification [11,\\n
\\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n
2\\n
Z. Shen et al.\\n
37], layout detection [38, 22], table detection [26], and scene text detection [4].\\n
A generalized learning-based framework dramatically reduces the need for the\\n
manual specification of complicated rules, which is the status quo with traditional\\n
methods. DL has the potential to transform DIA pipelines and benefit a broad\\n
spectrum of large-scale document digitization projects.\\n
However, there are several practical difficulties for taking advantages of re-\\n
cent advances in DL-based methods: 1) DL models are notoriously convoluted\\n
for reuse and extension. Existing models are developed using distinct frame-\\n
works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\\n
be obfuscated by implementation details [8]. It can be a time-consuming and\\n
frustrating experience to debug, reproduce, and adapt existing models for DIA,\\n
and
many researchers who would benefit the most from using these methods lack\\n
the technical background to implement them from scratch.
2) Document images\\n
contain diverse and disparate patterns across domains, and customized training\\n
is often required to achieve a desirable detection accuracy. Currently there is no\\n
full-fledged infrastructure for easily curating the target document image datasets\\n
and fine-tuning or re-training the models.
3) DIA usually requires a sequence of\\n
models and other processing to obtain the final outputs. Often research teams use\\n
DL models and then perform further document analyses in separate processes,\\n
and these pipelines are not documented in any central location (and often not\\n
documented at all). This makes it
difficult for research teams to learn about how\\n
full pipelines are implemented
and leads them to invest significant resources in\\n
reinventing the DIA wheel
.\\n
LayoutParser provides a unified toolkit to support DL-based document image\\n
analysis and processing. To address the aforementioned challenges,
LayoutParser\\n
is built with the following components:\\n
1. An off-the-shelf toolkit for applying DL models for layout detection, character\\n
recognition, and other DIA tasks (Section 3)\\n
2. A rich repository of pre-trained neural network models (Model Zoo) that\\n
underlies the off-the-shelf usage\\n
3. Comprehensive tools for efficient document image data annotation and model\\n
tuning to support different levels of customization\\n
4. A DL model hub and community platform for the easy sharing, distribu-\\n
tion, and discussion of DIA models and pipelines, to promote reusability,\\n
reproducibility, and extensibility (Section 4)\\n
The library implements simple and intuitive Python APIs without sacrificing\\n
generalizability and versatility, and can be easily installed via pip. Its convenient\\n
functions for handling document image data can be seamlessly integrated with\\n
existing DIA pipelines. With detailed documentations and carefully curated\\n
tutorials, we hope this tool will benefit a variety of end-users, and will lead to\\n
advances in applications in both industry and academic research.\\n
LayoutParser is well aligned with recent efforts for improving DL model\\n
reusability in other disciplines like natural language processing [8, 34] and com-\\n
puter vision [35], but with a focus on unique challenges in DIA. We show\\n
LayoutParser can be applied in sophisticated and large-scale digitization projects\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
3\\n
that require precision, efficiency, and robustness, as well as simple and light-\\n
weight document processing tasks focusing on efficacy and flexibility (Section 5).\\n
LayoutParser is being actively maintained, and support for more deep learning\\n
models and novel methods in text-based layout analysis methods [37, 34] is\\n
planned.\\n
The rest of the paper is organized as follows. Section 2 provides an overview\\n
of related work. The core
LayoutParser library, DL Model Zoo, and customized\\n
model training are described in Section 3, and the DL model hub and commu-\\n
nity platform are detailed in Section 4. Section 5 shows two examples of how\\n
LayoutParser can be used in practical DIA projects, and Section 6 concludes.\\n
2 Related Work\\n
Recently, various DL models and datasets have been developed for layout analysis\\n
tasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\\n
tation tasks on historical documents. Object detection-based methods like Faster\\n
R-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\\n
and detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\\n
been used in table detection [27]. However, these models are usually implemented\\n
individually and there is no unified framework to load and use such models.\\n
There has been a surge of interest in creating open-source tools for document\\n
image processing: a search of
document image analysis in Github leads to 5M\\n
relevant code pieces
6; yet most of them rely on traditional rule-based methods\\n
or provide limited functionalities. The closest prior research to our work is the\\n
OCR-D project
7, which also tries to build a complete toolkit for DIA. However,\\n
similar to the platform developed by Neudecker et al. [21], it is designed for\\n
analyzing historical documents, and provides no supports for recent DL models.\\n
The
DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\\n
documents via analyzing the stored PDF data. Repositories like
DeepLayout9\\n
and Detectron2-PubLayNet10 are individual deep learning models trained on\\n
layout analysis datasets without support for the full DIA pipeline. The Document\\n
Analysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\\n
aim to improve the reproducibility of DIA methods (or DL models), yet they\\n
are not actively maintained. OCR engines like
Tesseract [14], easyOCR11 and\\n
paddleOCR12 usually do not come with comprehensive functionalities for other\\n
DIA tasks like layout analysis.\\n
Recent years have also seen numerous efforts to create libraries for promoting\\n
reproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n
6 The number shown is obtained by specifying the search type as ‘code’.\\n
7 https://ocr-d.de/en/about\\n
8 https://github.com/BobLd/DocumentLayoutAnalysis\\n
9 https://github.com/leonlulu/DeepLayout\\n
10 https://github.com/hpanwar08/detectron2\\n
11 https://github.com/JaidedAI/EasyOCR\\n
12 https://github.com/PaddlePaddle/PaddleOCR\\n
\\n\\n\\n
4\\n
Z. Shen et al.\\n
Fig. 1: The overall architecture of LayoutParser. For an input document image,\\n
the core LayoutParser library provides a set of off-the-shelf tools for layout\\n
detection, OCR, visualization, and storage, backed by a carefully designed layout\\n
data structure.
LayoutParser also supports high level customization via efficient\\n
layout annotation and model training functions. These improve model accuracy\\n
on the target samples. The community platform enables the easy sharing of DIA\\n
models and whole digitization pipelines to promote reusability and reproducibility.\\n
A collection of detailed documentation, tutorials and exemplar projects make\\n
LayoutParser easy to learn and use.\\n
AllenNLP [8] and transformers [34] have provided the community with complete\\n
DL-based support for developing and deploying models for general computer\\n
vision and natural language processing problems.
LayoutParser, on the other\\n
hand, specializes specifically in DIA tasks.
LayoutParser is also equipped with a\\n
community platform inspired by established model hubs such as
Torch Hub [23]\\n
and
TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\\n
full document processing pipelines that are unique to DIA tasks.\\n
There have been a variety of document data collections to facilitate the\\n
development of DL models. Some examples include PRImA [3](magazine layouts),\\n
PubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\\n
papers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\\n
HJDataset [31](historical Japanese document layouts). A spectrum of models\\n
trained on these datasets are currently available in the LayoutParser model zoo\\n
to support different use cases.\\n
3 The Core LayoutParser Library\\n
At the core of LayoutParser is an off-the-shelf toolkit that streamlines DL-\\n
based document image analysis. Five components support a simple interface\\n
with comprehensive functionalities: 1) The
layout detection models enable using\\n
pre-trained or self-trained DL models for layout detection with just four lines\\n
of code. 2) The detected layout information is stored in carefully engineered\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nEfficient Data Annotation\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nCustomized Model Training\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nModel Customization\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDIA Model Hub\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDIA Pipeline Sharing\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nCommunity Platform\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nLayout Detection Models\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nDocument Images \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nThe Core LayoutParser Library\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nOCR Module\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nStorage & Visualization\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nLayout Data Structure\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
5\\n
Table 1: Current layout detection models in the LayoutParser model zoo\\n
Dataset\\n
Base Model1 Large Model Notes\\n
PubLayNet [38]\\n
PRImA [3]\\n
Newspaper [17]\\n
TableBank [18]\\n
HJDataset [31]\\n
F / M\\n
M\\n
F\\n
F\\n
F / M\\n
M\\n
-\\n
-\\n
F\\n
-\\n
Layouts of modern scientific documents\\n
Layouts of scanned modern magazines and scientific reports\\n
Layouts of scanned US newspapers from the 20th century\\n
Table region on modern scientific and business document\\n
Layouts of history Japanese documents\\n
1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy\\n
vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\\n
backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\\n
R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\\n
using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\\n
zoo in coming months.\\n
layout data structures, which are optimized for efficiency and versatility. 3) When\\n
necessary, users can employ existing or customized OCR models via the unified\\n
API provided in the
OCR module. 4) LayoutParser comes with a set of utility\\n
functions for the
visualization and storage of the layout data. 5) LayoutParser\\n
is also highly customizable, via its integration with functions for layout data\\n
annotation and model training
. We now provide detailed descriptions for each\\n
component.\\n
3.1 Layout Detection Models\\n
In LayoutParser, a layout model takes a document image as an input and\\n
generates a list of rectangular boxes for the target content regions. Different\\n
from traditional methods, it relies on deep convolutional neural networks rather\\n
than manually curated rules to identify content regions. It is formulated as an\\n
object detection problem and state-of-the-art models like Faster R-CNN [28] and\\n
Mask R-CNN [12] are used. This yields prediction results of high accuracy and\\n
makes it possible to build a concise, generalized interface for layout detection.\\n
LayoutParser, built upon Detectron2 [35], provides a minimal API that can\\n
perform layout detection with only four lines of code in Python:\\n
1 import layoutparser as lp\\n
2 image = cv2 . imread ( " image_file " ) # load images\\n
3 model = lp . De t e c tro n2 Lay outM odel (\\n
" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config " )\\n
4\\n
5
layout = model . detect ( image )\\n
LayoutParser provides a wealth of pre-trained model weights using various\\n
datasets covering different languages, time periods, and document types. Due to\\n
domain shift [7], the prediction performance can notably drop when models are ap-\\n
plied to target samples that are significantly different from the training dataset. As\\n
document structures and layouts vary greatly in different domains, it is important\\n
to select models trained on a dataset similar to the test samples. A semantic syntax\\n
is used for initializing the model weights in
LayoutParser, using both the dataset\\n
name and model name lp://<dataset-name>/<model-architecture-name>.\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
6\\n
Z. Shen et al.\\n
Fig. 2: The relationship between the three types of layout data structures.\\n
Coordinate supports three kinds of variation; TextBlock consists of the co-\\n
ordinate information and extra features like block text, types, and reading orders;\\n
a
Layout object is a list of all possible layout elements, including other Layout\\n
objects. They all support the same set of transformation and operation APIs for\\n
maximum flexibility.\\n
Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\\n
on 5 different datasets. Description of the training dataset is provided alongside\\n
with the trained models such that users can quickly identify the most suitable\\n
models for their tasks. Additionally, when such a model is not readily available,\\n
LayoutParser also supports training customized layout models and community\\n
sharing of the models (detailed in Section 3.5).\\n
3.2 Layout Data Structures\\n
A critical feature of LayoutParser is the implementation of a series of data\\n
structures and operations that can be used to efficiently process and manipulate\\n
the layout elements. In document image analysis pipelines, various post-processing\\n
on the layout analysis model outputs is usually required to obtain the final\\n
outputs. Traditionally, this requires exporting DL model outputs and then loading\\n
the results into other pipelines. All model outputs from
LayoutParser will be\\n
stored in carefully engineered data types optimized for further processing, which\\n
makes it possible to build an end-to-end document digitization pipeline within\\n
LayoutParser. There are three key components in the data structure, namely\\n
the
Coordinate system, the TextBlock, and the Layout. They provide different\\n
levels of abstraction for the layout data, and a set of APIs are supported for\\n
transformations or operations on these classes.\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
7\\n
Coordinates are the cornerstones for storing layout information. Currently,\\n
three types of
Coordinate data structures are provided in LayoutParser, shown\\n
in Figure 2.
Interval and Rectangle are the most common data types and\\n
support specifying 1D or 2D regions within a document. They are parameterized\\n
with 2 and 4 parameters. A
Quadrilateral class is also implemented to support\\n
a more generalized representation of rectangular regions when the document\\n
is skewed or distorted, where the 4 corner points can be specified and a total\\n
of 8 degrees of freedom are supported. A wide collection of transformations\\n
like
shift, pad, and scale, and operations like intersect, union, and is_in,\\n
are supported for these classes. Notably, it is common to separate a segment\\n
of the image and analyze it individually.
LayoutParser provides full support\\n
for this scenario via image cropping operations
crop_image and coordinate\\n
transformations like
relative_to and condition_on that transform coordinates\\n
to and from their relative representations. We refer readers to Table 2 for a more\\n
detailed description of these operations13.\\n
Based on Coordinates, we implement the TextBlock class that stores both\\n
the positional and extra features of individual layout elements. It also supports\\n
specifying the reading orders via setting the
parent field to the index of the parent\\n
object. A
Layout class is built that takes in a list of TextBlocks and supports\\n
processing the elements in batch.
Layout can also be nested to support hierarchical\\n
layout structures. They support the same operations and transformations as the\\n
Coordinate classes, minimizing both learning and deployment effort.\\n
3.3 OCR\\n
LayoutParser provides a unified interface for existing OCR tools. Though there\\n
are many OCR tools available, they are usually configured differently with distinct\\n
APIs or protocols for using them. It can be inefficient to add new OCR tools into\\n
an existing pipeline, and difficult to make direct comparisons among the available\\n
tools to find the best option for a particular project. To this end,
LayoutParser\\n
builds a series of wrappers among existing OCR engines, and provides nearly\\n
the same syntax for using them. It supports a plug-and-play style of using OCR\\n
engines, making it effortless to switch, evaluate, and compare different OCR\\n
modules:\\n
1 ocr_agent = lp . TesseractAgent ()\\n
2 # Can be easily switched to other OCR software\\n
3 tokens = ocr_agent . detect ( image )\\n
The OCR outputs will also be stored in the aforementioned layout data\\n
structures and can be seamlessly incorporated into the digitization pipeline.\\n
Currently
LayoutParser supports the Tesseract and Google Cloud Vision OCR\\n
engines.\\n
LayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained\\n
with the Connectionist Temporal Classification (CTC) loss [10]. It can be used\\n
like the other OCR modules, and can be easily trained on customized datasets.\\n
13 This is also available in the LayoutParser documentation pages.\\n
\\n\\n\\n\\n\\n\\n
8\\n
Z. Shen et al.\\n
Table 2: All operations supported by the layout elements. The same APIs are\\n
supported across different layout element classes including
Coordinate types,\\n
TextBlock and Layout.\\n
Operation Name\\n
Description\\n
block.pad(top, bottom, right, left) Enlarge the current block according to the input\\n
block.scale(fx, fy)\\n
block.shift(dx, dy)\\n
Scale the current block given the ratio\\n
in x and y direction\\n
Move the current block with the shift\\n
distances in x and y direction\\n
block1.is in(block2)\\n
Whether block1 is inside of block2\\n
block1.intersect(block2)\\n
block1.union(block2)\\n
block1.relative to(block2)\\n
block1.condition on(block2)\\n
Return the intersection region of block1 and block2.\\n
Coordinate type to be determined based on the inputs.\\n
Return the union region of block1 and block2.\\n
Coordinate type to be determined based on the inputs.\\n
Convert the absolute coordinates of block1 to\\n
relative coordinates to block2\\n
Calculate the absolute coordinates of block1 given\\n
the canvas block2’s absolute coordinates\\n
block.crop image(image)\\n
Obtain the image segments in the block region\\n
3.4 Storage and visualization\\n
The end goal of DIA is to transform the image-based document data into a\\n
structured database.
LayoutParser supports exporting layout data into different\\n
formats like
JSON, csv, and will add the support for the METS/ALTO XML\\n
format
14 . It can also load datasets from layout analysis-specific formats like\\n
COCO [38] and the Page Format [25] for training layout models (Section 3.5).\\n
Visualization of the layout detection results is critical for both presentation\\n
and debugging.
LayoutParser is built with an integrated API for displaying the\\n
layout information along with the original document image. Shown in Figure 3, it\\n
enables presenting layout data with rich meta information and features in different\\n
modes. More detailed information can be found in the online
LayoutParser\\n
documentation page.\\n
3.5 Customized Model Training\\n
Besides the off-the-shelf library, LayoutParser is also highly customizable with\\n
supports for highly unique and challenging document analysis tasks. Target\\n
document images can be vastly different from the existing datasets for train-\\n
ing layout models, which leads to low layout detection accuracy. Training data\\n
14 https://altoxml.github.io\\n
\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
9\\n
Fig. 3: Layout detection and OCR results visualization generated by the\\n
LayoutParser APIs. Mode I directly overlays the layout region bounding boxes\\n
and categories over the original image. Mode II recreates the original document\\n
via drawing the OCR’d texts at their corresponding positions on the image\\n
canvas. In this figure, tokens in textual regions are filtered using the API and\\n
then displayed.\\n
can also be highly sensitive and not sharable publicly. To overcome these chal-\\n
lenges,
LayoutParser is built with rich features for efficient data annotation and\\n
customized model training.\\n
LayoutParser incorporates a toolkit optimized for annotating document lay-\\n
outs using object-level active learning [32]. With the help from a layout detection\\n
model trained along with labeling, only the most important layout objects within\\n
each image, rather than the whole image, are required for labeling. The rest of\\n
the regions are automatically annotated with high confidence predictions from\\n
the layout detection model. This allows a layout dataset to be created more\\n
efficiently with only around 60% of the labeling budget.\\n
After the training dataset is curated, LayoutParser supports different modes\\n
for training the layout models.
Fine-tuning can be used for training models on a\\n
small newly-labeled dataset by initializing the model with existing pre-trained\\n
weights.
Training from scratch can be helpful when the source dataset and\\n
target are significantly different and a large training set is available. However, as\\n
suggested in Studer et al.’s work[33], loading pre-trained weights on large-scale\\n
datasets like ImageNet [5], even from totally different domains, can still boost\\n
model performance. Through the integrated API provided by
LayoutParser,\\n
users can easily compare model performances on the benchmark datasets.\\n
\\n\\n
10\\n
Z. Shen et al.\\n
Fig. 4: Illustration of (a) the original historical Japanese document with layout\\n
detection results and (b) a recreated version of the document image that achieves\\n
much better character recognition recall. The reorganization algorithm rearranges\\n
the tokens based on the their detected bounding boxes given a maximum allowed\\n
height.\\n
4 LayoutParser Community Platform\\n
Another focus of LayoutParser is promoting the reusability of layout detection\\n
models and full digitization pipelines. Similar to many existing deep learning\\n
libraries,
LayoutParser comes with a community model hub for distributing\\n
layout models. End-users can upload their self-trained models to the model hub,\\n
and these models can be loaded into a similar interface as the currently available\\n
LayoutParser pre-trained models. For example, the model trained on the News\\n
Navigator dataset [17] has been incorporated in the model hub.\\n
Beyond DL models, LayoutParser also promotes the sharing of entire doc-\\n
ument digitization pipelines. For example, sometimes the pipeline requires the\\n
combination of multiple DL models to achieve better accuracy. Currently, pipelines\\n
are mainly described in academic papers and implementations are often not pub-\\n
licly available. To this end, the
LayoutParser community platform also enables\\n
the sharing of layout pipelines to promote the discussion and reuse of techniques.\\n
For each shared pipeline, it has a dedicated project page, with links to the source\\n
code, documentation, and an outline of the approaches. A discussion panel is\\n
provided for exchanging ideas. Combined with the core
LayoutParser library,\\n
users can easily build reusable components based on the shared pipelines and\\n
apply them to solve their unique problems.\\n
5 Use Cases\\n
The core objective of LayoutParser is to make it easier to create both large-scale\\n
and light-weight document digitization pipelines. Large-scale document processing\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
11\\n
focuses on precision, efficiency, and robustness. The target documents may have\\n
complicated structures, and may require training multiple layout detection models\\n
to achieve the optimal accuracy. Light-weight pipelines are built for relatively\\n
simple documents, with an emphasis on development ease, speed and flexibility.\\n
Ideally one only needs to use existing resources, and model training should be\\n
avoided. Through two exemplar projects, we show how practitioners in both\\n
academia and industry can easily build such pipelines using
LayoutParser and\\n
extract high-quality structured document data for their downstream tasks. The\\n
source code for these projects will be publicly available in the
LayoutParser\\n
community hub.\\n
5.1 A Comprehensive Historical Document Digitization Pipeline\\n
The digitization of historical documents can unlock valuable data that can shed\\n
light on many important social, economic, and historical questions. Yet due to\\n
scan noises, page wearing, and the prevalence of complicated layout structures, ob-\\n
taining a structured representation of historical document scans is often extremely\\n
complicated.\\n
In this example,
LayoutParser was\\n
used to develop a comprehensive\\n
pipeline, shown in Figure 5, to gener-\\n
ate high-quality structured data from\\n
historical Japanese firm financial ta-\\n
bles with complicated layouts. The\\n
pipeline applies two layout models to\\n
identify different levels of document\\n
structures and two customized OCR\\n
engines for optimized character recog-\\n
nition accuracy.\\n
As shown in Figure 4 (a), the\\n
document contains columns of text\\n
written vertically
15, a common style\\n
in Japanese. Due to scanning noise\\n
and archaic printing technology, the\\n
columns can be skewed or have vari-\\n
able widths, and hence cannot be eas-\\n
ily identified via rule-based methods.\\n
Within each column, words are sepa-\\n
rated by white spaces of variable size,\\n
and the vertical positions of objects\\n
can be an indicator of their layout\\n
type.\\n
Fig. 5: Illustration of how LayoutParser\\n
helps with the historical document digi-\\n
tization pipeline.\\n
15 A document page consists of eight rows like this. For simplicity we skip the row\\n
segmentation discussion and refer readers to the source code when available.\\n
\\n\\n\\n
12\\n
Z. Shen et al.\\n
To decipher the complicated layout\\n
structure, two object detection models have been trained to recognize individual\\n
columns and tokens, respectively. A small training set (400 images with approxi-\\n
mately 100 annotations each) is curated via the active learning based annotation\\n
tool [32] in
LayoutParser. The models learn to identify both the categories and\\n
regions for each token or column via their distinct visual features. The layout\\n
data structure enables easy grouping of the tokens within each column, and\\n
rearranging columns to achieve the correct reading orders based on the horizontal\\n
position. Errors are identified and rectified via checking the consistency of the\\n
model predictions. Therefore, though trained on a small dataset, the pipeline\\n
achieves a high level of layout detection accuracy: it achieves a 96.97 AP [19]\\n
score across 5 categories for the column detection model, and a 89.23 AP across\\n
4 categories for the token detection model.\\n
A combination of character recognition methods is developed to tackle the\\n
unique challenges in this document. In our experiments, we found that irregular\\n
spacing between the tokens led to a low character recognition recall rate, whereas\\n
existing OCR models tend to perform better on densely-arranged texts. To\\n
overcome this challenge, we create a document reorganization algorithm that\\n
rearranges the text based on the token bounding boxes detected in the layout\\n
analysis step. Figure 4 (b) illustrates the generated image of dense text, which is\\n
sent to the OCR APIs as a whole to reduce the transaction costs. The flexible\\n
coordinate system in
LayoutParser is used to transform the OCR results relative\\n
to their original positions on the page.\\n
Additionally, it is common for historical documents to use unique fonts\\n
with different glyphs, which significantly degrades the accuracy of OCR models\\n
trained on modern texts. In this document, a special flat font is used for printing\\n
numbers and could not be detected by off-the-shelf OCR engines. Using the highly\\n
flexible functionalities from
LayoutParser, a pipeline approach is constructed\\n
that achieves a high recognition accuracy with minimal effort. As the characters\\n
have unique visual structures and are usually clustered together, we train the\\n
layout model to identify number regions with a dedicated category. Subsequently,\\n
LayoutParser crops images within these regions, and identifies characters within\\n
them using a self-trained OCR model based on a CNN-RNN [6]. The model\\n
detects a total of 15 possible categories, and achieves a 0.98 Jaccard score
16 and\\n
a 0.17 average Levinstein distances17 for token prediction on the test set.\\n
Overall, it is possible to create an intricate and highly accurate digitization\\n
pipeline for large-scale digitization using
LayoutParser. The pipeline avoids\\n
specifying the complicated rules used in traditional methods, is straightforward\\n
to develop, and is robust to outliers. The DL models also generate fine-grained\\n
results that enable creative approaches like page reorganization for OCR.\\n
16 This measures the overlap between the detected and ground-truth characters, and\\n
the maximum is 1.\\n
17 This measures the number of edits from the ground-truth text to the predicted text,\\n
and lower is better.\\n
\\n\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
13\\n
Fig. 6: This lightweight table detector can identify tables (outlined in red) and\\n
cells (shaded in blue) in different locations on a page. In very few cases (d), it\\n
might generate minor error predictions, e.g, failing to capture the top text line of\\n
a table.\\n
5.2 A light-weight Visual Table Extractor\\n
Detecting tables and parsing their structures (table extraction) are of central im-\\n
portance for many document digitization tasks. Many previous works [26, 30, 27]\\n
and tools
18 have been developed to identify and parse table structures. Yet they\\n
might require training complicated models from scratch, or are only applicable\\n
for born-digital PDF documents. In this section, we show how
LayoutParser can\\n
help build a light-weight accurate visual table extractor for legal docket tables\\n
using the existing resources with minimal effort.\\n
The extractor uses a pre-trained layout detection model for identifying the\\n
table regions and some simple rules for pairing the rows and the columns in the\\n
PDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the\\n
LayoutParser Model Zoo can be used for detecting table regions. By filtering\\n
out model predictions of low confidence and removing overlapping predictions,\\n
LayoutParser can identify the tabular regions on each page, which significantly\\n
simplifies the subsequent steps. By applying the line detection functions within\\n
the tabular segments, provided in the utility module from LayoutParser, the\\n
pipeline can identify the three distinct columns in the tables. A row clustering\\n
method is then applied via analyzing the y coordinates of token bounding boxes in\\n
the left-most column, which are obtained from the OCR engines. A non-maximal\\n
suppression algorithm is used to remove duplicated rows with extremely small\\n
gaps. Shown in Figure 6, the built pipeline can detect tables at different positions\\n
on a page accurately. Continued tables from different pages are concatenated,\\n
and a structured table representation has been easily created.\\n
18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\\n
\\n\\n\\n
14\\n
Z. Shen et al.\\n
6 Conclusion\\n
LayoutParser provides a comprehensive toolkit for deep learning-based document\\n
image analysis. The off-the-shelf library is easy to install, and can be used to\\n
build flexible and accurate pipelines for processing documents with complicated\\n
structures. It also supports high-level customization and enables easy labeling and\\n
training of DL models on unique document image datasets. The
LayoutParser\\n
community platform facilitates sharing DL models and DIA pipelines, inviting\\n
discussion and promoting code reproducibility and reusability. The
LayoutParser\\n
team is committed to keeping the library updated continuously and bringing\\n
the most recent advances in DL-based DIA, such as multi-modal document\\n
modeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\\n
Acknowledgements We thank the anonymous reviewers for their comments\\n
and suggestions. This project is supported in part by NSF Grant OIA-2033558\\n
and funding from the Harvard Data Science Initiative and Harvard Catalyst.\\n
Zejiang Shen thanks Doug Downey for suggestions.\\n
References\\n
[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado,\\n
G.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A.,\\n
Irving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg,\\n
J., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J.,\\n
Steiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V.,\\n
Vi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng,\\n
X.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015),\\n
https://www.tensorflow.org/, software available from tensorflow.org\\n
[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a\\n
highly-functional python framework for reproducible experiments. In: 2018 16th\\n
International Conference on Frontiers in Handwriting Recognition (ICFHR). pp.\\n
423–428. IEEE (2018)\\n
[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic\\n
dataset for performance evaluation of document layout analysis. In: 2009 10th\\n
International Conference on Document Analysis and Recognition. pp. 296–300.\\n
IEEE (2009)\\n
[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text\\n
detection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and\\n
Pattern Recognition. pp. 9365–9374 (2019)\\n
[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\\n
Hierarchical Image Database. In: CVPR09 (2009)\\n
[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with\\n
coarse-to-fine attention. In: International Conference on Machine Learning. pp.\\n
980–989. PMLR (2017)\\n
[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation.\\n
In: International conference on machine learning. pp. 1180–1189. PMLR (2015)\\n
\\n\\n
LayoutParser: A Unified Toolkit for DL-Based DIA\\n
15\\n
[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters,\\n
M., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language\\n
processing platform. arXiv preprint arXiv:1803.07640 (2018)\\n
(cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P.,\\n
Grali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in-\\n
formation extraction (2020)\\n
[9]\\n
[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal\\n
classification: labelling unsegmented sequence data with recurrent neural networks.\\n
In: Proceedings of the 23rd international conference on Machine learning. pp.\\n
369–376 (2006)\\n
[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for\\n
document image classification and retrieval. In: 2015 13th International Conference\\n
on Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015)\\n
[12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\\n
IEEE international conference on computer vision. pp. 2961–2969 (2017)\\n
[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition.\\n
In: Proceedings of the IEEE conference on computer vision and pattern recognition.\\n
pp. 770–778 (2016)\\n
[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\\n
2007(159), 2 (Jul 2007)\\n
[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis\\n
benchmarking. In: 2011 International Conference on Document Analysis and\\n
Recognition. pp. 42–47. IEEE (2011)\\n
[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5\\n
million images. In: Adjunct Publication of the 33rd Annual ACM Sym-\\n
posium on User\\n
Interface Software and Technology. p. 120–122. UIST\\n
’20 Adjunct, Association for Computing Machinery, New York, NY, USA\\n
(2020). https://doi.org/10.1145/3379350.3416143,
https://doi-org.offcampus.\\n
lib.washington.edu/10.1145/3379350.3416143\\n
[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N.,\\n
Thomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting\\n
Headlines and Visual Content from 16 Million Historic Newspaper Pages in\\n
Chronicling America, p. 3055–3062. Association for Computing Machinery, New\\n
York, NY, USA (2020),
https://doi.org/10.1145/3340531.3412767\\n
[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark\\n
for image-based table detection and recognition. arXiv preprint arXiv:1903.01949\\n
(2019)\\n
[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P.,\\n
Zitnick, C.L.: Microsoft coco: Common objects in context. In: European conference\\n
on computer vision. pp. 740–755. Springer (2014)\\n
[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic\\n
segmentation. In: Proceedings of the IEEE conference on computer vision and\\n
pattern recognition. pp. 3431–3440 (2015)\\n
[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten-\\n
croft, K.: An experimental workflow development platform for historical document\\n
digitisation and analysis. In: Proceedings of the 2011 workshop on historical\\n
document imaging and processing. pp. 161–168 (2011)\\n
[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach\\n
for document segmentation. In: 2018 16th International Conference on Frontiers\\n
in Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\\n
\\n\\n
16\\n
Z. Shen et al.\\n
[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z.,\\n
Desmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017)\\n
[24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,\\n
T., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style,\\n
high-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019)\\n
[25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth\\n
elements) format framework. In: 2010 20th International Conference on Pattern\\n
Recognition. pp. 257–260. IEEE (2010)\\n
[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet:\\n
An approach for end to end table detection and structure recognition from image-\\n
based documents. In: Proceedings of the IEEE/CVF Conference on Computer\\n
Vision and Pattern Recognition Workshops. pp. 572–573 (2020)\\n
[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph\\n
neural networks. In: 2019 International Conference on Document Analysis and\\n
Recognition (ICDAR). pp. 142–147. IEEE (2019)\\n
[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object\\n
detection with region proposal networks. In: Advances in neural information\\n
processing systems. pp. 91–99 (2015)\\n
[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph\\n
neural network model. IEEE transactions on neural networks
20(1), 61–80 (2008)\\n
[30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning\\n
for detection and structure recognition of tables in document images. In: 2017 14th\\n
IAPR international conference on document analysis and recognition (ICDAR).\\n
vol. 1, pp. 1162–1167. IEEE (2017)\\n
[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents\\n
with complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer\\n
Vision and Pattern Recognition Workshops. pp. 548–549 (2020)\\n
[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\\n
based layout annotation. arXiv preprint arXiv:2010.01762 (2020)\\n
[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer,\\n
A., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for\\n
historical document image analysis. In: 2019 International Conference on Document\\n
Analysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\\n
[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P.,\\n
Rault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of-\\n
the-art natural language processing. arXiv preprint arXiv:1910.03771 (2019)\\n
[35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2.
https://\\n
github.com/facebookresearch/detectron2 (2019)\\n
[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C.,\\n
Che, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document\\n
understanding. arXiv preprint arXiv:2012.14740 (2020)\\n
[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\\n
text and layout for document image understanding (2019)\\n
[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\\n
layout analysis.\\n
ument\\n
Analysis and Recognition (ICDAR). pp. 1015–1022.\\n
https://doi.org/10.1109/ICDAR.2019.00166\\n
largest dataset ever for doc-\\n
In: 2019 International Conference on Document\\n
IEEE (Sep 2019).\\n
Page: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
\\n\\n')" ] }, + "execution_count": 19, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ @@ -185,8 +1110,13 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 20, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:08.995985Z", + "start_time": "2024-12-16T07:56:08.826412Z" + } + }, "outputs": [], "source": [ "from bs4 import BeautifulSoup\n", @@ -197,8 +1127,13 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:09.927083Z", + "start_time": "2024-12-16T07:56:09.916862Z" + } + }, "outputs": [], "source": [ "import re\n", @@ -213,7 +1148,7 @@ " st = sp.get(\"style\")\n", " if not st:\n", " continue\n", - " fs = re.findall(\"font-size:(\\d+)px\", st)\n", + " fs = re.findall(r\"font-size:(\\d+)px\", st)\n", " if not fs:\n", " continue\n", " fs = int(fs[0])\n", @@ -232,14 +1167,76 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 22, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:10.472710Z", + "start_time": "2024-12-16T07:56:10.468331Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "page_content='Recently, various DL models and datasets have been developed for layout analysis\\ntasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\\ntation tasks on historical documents. Object detection-based methods like Faster\\nR-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\\nand detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\\nbeen used in table detection [27]. However, these models are usually implemented\\nindividually and there is no unified framework to load and use such models.\\nThere has been a surge of interest in creating open-source tools for document\\nimage processing: a search of document image analysis in Github leads to 5M\\nrelevant code pieces 6; yet most of them rely on traditional rule-based methods\\nor provide limited functionalities. The closest prior research to our work is the\\nOCR-D project7, which also tries to build a complete toolkit for DIA. However,\\nsimilar to the platform developed by Neudecker et al. [21], it is designed for\\nanalyzing historical documents, and provides no supports for recent DL models.\\nThe DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\\ndocuments via analyzing the stored PDF data. Repositories like DeepLayout9\\nand Detectron2-PubLayNet10 are individual deep learning models trained on\\nlayout analysis datasets without support for the full DIA pipeline. The Document\\nAnalysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\\naim to improve the reproducibility of DIA methods (or DL models), yet they\\nare not actively maintained. OCR engines like Tesseract [14], easyOCR11 and\\npaddleOCR12 usually do not come with comprehensive functionalities for other\\nDIA tasks like layout analysis.\\nRecent years have also seen numerous efforts to create libraries for promoting\\nreproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n6 The number shown is obtained by specifying the search type as ‘code’.\\n7 https://ocr-d.de/en/about\\n8 https://github.com/BobLd/DocumentLayoutAnalysis\\n9 https://github.com/leonlulu/DeepLayout\\n10 https://github.com/hpanwar08/detectron2\\n11 https://github.com/JaidedAI/EasyOCR\\n12 https://github.com/PaddlePaddle/PaddleOCR\\n4\\nZ. Shen et al.\\nFig. 1: The overall architecture of LayoutParser. For an input document image,\\nthe core LayoutParser library provides a set of off-the-shelf tools for layout\\ndetection, OCR, visualization, and storage, backed by a carefully designed layout\\ndata structure. LayoutParser also supports high level customization via efficient\\nlayout annotation and model training functions. These improve model accuracy\\non the target samples. The community platform enables the easy sharing of DIA\\nmodels and whole digitization pipelines to promote reusability and reproducibility.\\nA collection of detailed documentation, tutorials and exemplar projects make\\nLayoutParser easy to learn and use.\\nAllenNLP [8] and transformers [34] have provided the community with complete\\nDL-based support for developing and deploying models for general computer\\nvision and natural language processing problems. LayoutParser, on the other\\nhand, specializes specifically in DIA tasks. LayoutParser is also equipped with a\\ncommunity platform inspired by established model hubs such as Torch Hub [23]\\nand TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\\nfull document processing pipelines that are unique to DIA tasks.\\nThere have been a variety of document data collections to facilitate the\\ndevelopment of DL models. Some examples include PRImA [3](magazine layouts),\\nPubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\\npapers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\\nHJDataset [31](historical Japanese document layouts). A spectrum of models\\ntrained on these datasets are currently available in the LayoutParser model zoo\\nto support different use cases.\\n' metadata={'heading': '2 Related Work\\n', 'content_font': 9, 'heading_font': 11, 'source': '../../docs/integrations/document_loaders/example_data/layout-parser-paper.pdf'}\n" + "page_content='Recently, various DL models and datasets have been developed for layout analysis\n", + "tasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\n", + "tation tasks on historical documents. Object detection-based methods like Faster\n", + "R-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\n", + "and detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\n", + "been used in table detection [27]. However, these models are usually implemented\n", + "individually and there is no unified framework to load and use such models.\n", + "There has been a surge of interest in creating open-source tools for document\n", + "image processing: a search of document image analysis in Github leads to 5M\n", + "relevant code pieces 6; yet most of them rely on traditional rule-based methods\n", + "or provide limited functionalities. The closest prior research to our work is the\n", + "OCR-D project7, which also tries to build a complete toolkit for DIA. However,\n", + "similar to the platform developed by Neudecker et al. [21], it is designed for\n", + "analyzing historical documents, and provides no supports for recent DL models.\n", + "The DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\n", + "documents via analyzing the stored PDF data. Repositories like DeepLayout9\n", + "and Detectron2-PubLayNet10 are individual deep learning models trained on\n", + "layout analysis datasets without support for the full DIA pipeline. The Document\n", + "Analysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\n", + "aim to improve the reproducibility of DIA methods (or DL models), yet they\n", + "are not actively maintained. OCR engines like Tesseract [14], easyOCR11 and\n", + "paddleOCR12 usually do not come with comprehensive functionalities for other\n", + "DIA tasks like layout analysis.\n", + "Recent years have also seen numerous efforts to create libraries for promoting\n", + "reproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\n", + "6 The number shown is obtained by specifying the search type as ‘code’.\n", + "7 https://ocr-d.de/en/about\n", + "8 https://github.com/BobLd/DocumentLayoutAnalysis\n", + "9 https://github.com/leonlulu/DeepLayout\n", + "10 https://github.com/hpanwar08/detectron2\n", + "11 https://github.com/JaidedAI/EasyOCR\n", + "12 https://github.com/PaddlePaddle/PaddleOCR\n", + "4\n", + "Z. Shen et al.\n", + "Fig. 1: The overall architecture of LayoutParser. For an input document image,\n", + "the core LayoutParser library provides a set of off-the-shelf tools for layout\n", + "detection, OCR, visualization, and storage, backed by a carefully designed layout\n", + "data structure. LayoutParser also supports high level customization via efficient\n", + "layout annotation and model training functions. These improve model accuracy\n", + "on the target samples. The community platform enables the easy sharing of DIA\n", + "models and whole digitization pipelines to promote reusability and reproducibility.\n", + "A collection of detailed documentation, tutorials and exemplar projects make\n", + "LayoutParser easy to learn and use.\n", + "AllenNLP [8] and transformers [34] have provided the community with complete\n", + "DL-based support for developing and deploying models for general computer\n", + "vision and natural language processing problems. LayoutParser, on the other\n", + "hand, specializes specifically in DIA tasks. LayoutParser is also equipped with a\n", + "community platform inspired by established model hubs such as Torch Hub [23]\n", + "and TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\n", + "full document processing pipelines that are unique to DIA tasks.\n", + "There have been a variety of document data collections to facilitate the\n", + "development of DL models. Some examples include PRImA [3](magazine layouts),\n", + "PubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\n", + "papers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\n", + "HJDataset [31](historical Japanese document layouts). A spectrum of models\n", + "trained on these datasets are currently available in the LayoutParser model zoo\n", + "to support different use cases.\n", + "' metadata={'heading': '2 Related Work\\n', 'content_font': 9, 'heading_font': 11, 'source': './example_data/layout-parser-paper.pdf'}\n" ] } ], @@ -283,13 +1280,996 @@ "print(semantic_snippets[4])" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with Files\n", + "\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", + "\n", + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:13.006146Z", + "start_time": "2024-12-16T07:56:12.491197Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "2\n", + "0\n", + "2\n", + "\n", + "n\n", + "u\n", + "J\n", + "\n", + "1\n", + "2\n", + "\n", + "]\n", + "\n", + "V\n", + "C\n", + ".\n", + "s\n", + "c\n", + "[\n", + "\n", + "2\n", + "v\n", + "8\n", + "4\n", + "3\n", + "5\n", + "1\n", + ".\n", + "3\n", + "0\n", + "1\n", + "2\n", + ":\n", + "v\n", + "i\n", + "X\n", + "r\n", + "a\n", + "\n", + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "\n", + "Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "\n", + "Keywords: Document Image Analysis · Deep Learning · Layout Analysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "\n", + "1\n", + "\n", + "Introduction\n", + "\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "\f2\n", + "\n", + "Z. Shen et al.\n", + "\n", + "37], layout detection [38, 22], table detection [26], and scene text detection [4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manual specification of complicated rules, which is the status quo with traditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "\n", + "However, there are several practical difficulties for taking advantages of re-\n", + "cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame-\n", + "works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\n", + "be obfuscated by implementation details [8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "models and other processing to obtain the final outputs. Often research teams use\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel.\n", + "\n", + "LayoutParser provides a unified toolkit to support DL-based document image\n", + "analysis and processing. To address the aforementioned challenges, LayoutParser\n", + "is built with the following components:\n", + "\n", + "1. An off-the-shelf toolkit for applying DL models for layout detection, character\n", + "\n", + "recognition, and other DIA tasks (Section 3)\n", + "\n", + "2. A rich repository of pre-trained neural network models (Model Zoo) that\n", + "\n", + "underlies the off-the-shelf usage\n", + "\n", + "3. Comprehensive tools for efficient document image data annotation and model\n", + "\n", + "tuning to support different levels of customization\n", + "\n", + "4. A DL model hub and community platform for the easy sharing, distribu-\n", + "tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [8, 34] and com-\n", + "puter vision [35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParser can be applied in sophisticated and large-scale digitization projects\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "3\n", + "\n", + "that require precision, efficiency, and robustness, as well as simple and light-\n", + "weight document processing tasks focusing on efficacy and flexibility (Section 5).\n", + "LayoutParser is being actively maintained, and support for more deep learning\n", + "models and novel methods in text-based layout analysis methods [37, 34] is\n", + "planned.\n", + "\n", + "The rest of the paper is organized as follows. Section 2 provides an overview\n", + "of related work. The core LayoutParser library, DL Model Zoo, and customized\n", + "model training are described in Section 3, and the DL model hub and commu-\n", + "nity platform are detailed in Section 4. Section 5 shows two examples of how\n", + "LayoutParser can be used in practical DIA projects, and Section 6 concludes.\n", + "\n", + "2 Related Work\n", + "\n", + "Recently, various DL models and datasets have been developed for layout analysis\n", + "tasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen-\n", + "tation tasks on historical documents. Object detection-based methods like Faster\n", + "R-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38]\n", + "and detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also\n", + "been used in table detection [27]. However, these models are usually implemented\n", + "individually and there is no unified framework to load and use such models.\n", + "\n", + "There has been a surge of interest in creating open-source tools for document\n", + "image processing: a search of document image analysis in Github leads to 5M\n", + "relevant code pieces 6; yet most of them rely on traditional rule-based methods\n", + "or provide limited functionalities. The closest prior research to our work is the\n", + "OCR-D project7, which also tries to build a complete toolkit for DIA. However,\n", + "similar to the platform developed by Neudecker et al. [21], it is designed for\n", + "analyzing historical documents, and provides no supports for recent DL models.\n", + "The DocumentLayoutAnalysis project8 focuses on processing born-digital PDF\n", + "documents via analyzing the stored PDF data. Repositories like DeepLayout9\n", + "and Detectron2-PubLayNet10 are individual deep learning models trained on\n", + "layout analysis datasets without support for the full DIA pipeline. The Document\n", + "Analysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2]\n", + "aim to improve the reproducibility of DIA methods (or DL models), yet they\n", + "are not actively maintained. OCR engines like Tesseract [14], easyOCR11 and\n", + "paddleOCR12 usually do not come with comprehensive functionalities for other\n", + "DIA tasks like layout analysis.\n", + "\n", + "Recent years have also seen numerous efforts to create libraries for promoting\n", + "reproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\n", + "\n", + "6 The number shown is obtained by specifying the search type as ‘code’.\n", + "7 https://ocr-d.de/en/about\n", + "8 https://github.com/BobLd/DocumentLayoutAnalysis\n", + "9 https://github.com/leonlulu/DeepLayout\n", + "10 https://github.com/hpanwar08/detectron2\n", + "11 https://github.com/JaidedAI/EasyOCR\n", + "12 https://github.com/PaddlePaddle/PaddleOCR\n", + "\f4\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 1: The overall architecture of LayoutParser. For an input document image,\n", + "the core LayoutParser library provides a set of off-the-shelf tools for layout\n", + "detection, OCR, visualization, and storage, backed by a carefully designed layout\n", + "data structure. LayoutParser also supports high level customization via efficient\n", + "layout annotation and model training functions. These improve model accuracy\n", + "on the target samples. The community platform enables the easy sharing of DIA\n", + "models and whole digitization pipelines to promote reusability and reproducibility.\n", + "A collection of detailed documentation, tutorials and exemplar projects make\n", + "LayoutParser easy to learn and use.\n", + "\n", + "AllenNLP [8] and transformers [34] have provided the community with complete\n", + "DL-based support for developing and deploying models for general computer\n", + "vision and natural language processing problems. LayoutParser, on the other\n", + "hand, specializes specifically in DIA tasks. LayoutParser is also equipped with a\n", + "community platform inspired by established model hubs such as Torch Hub [23]\n", + "and TensorFlow Hub [1]. It enables the sharing of pretrained models as well as\n", + "full document processing pipelines that are unique to DIA tasks.\n", + "\n", + "There have been a variety of document data collections to facilitate the\n", + "development of DL models. Some examples include PRImA [3](magazine layouts),\n", + "PubLayNet [38](academic paper layouts), Table Bank [18](tables in academic\n", + "papers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and\n", + "HJDataset [31](historical Japanese document layouts). A spectrum of models\n", + "trained on these datasets are currently available in the LayoutParser model zoo\n", + "to support different use cases.\n", + "\n", + "3 The Core LayoutParser Library\n", + "\n", + "At the core of LayoutParser is an off-the-shelf toolkit that streamlines DL-\n", + "based document image analysis. Five components support a simple interface\n", + "with comprehensive functionalities: 1) The layout detection models enable using\n", + "pre-trained or self-trained DL models for layout detection with just four lines\n", + "of code. 2) The detected layout information is stored in carefully engineered\n", + "\n", + "Efficient Data AnnotationCustomized Model TrainingModel CustomizationDIA Model HubDIA Pipeline SharingCommunity PlatformLayout Detection ModelsDocument Images The Core LayoutParser LibraryOCR ModuleStorage & VisualizationLayout Data Structure\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "5\n", + "\n", + "Table 1: Current layout detection models in the LayoutParser model zoo\n", + "\n", + "Dataset\n", + "\n", + "Base Model1 Large Model Notes\n", + "\n", + "PubLayNet [38]\n", + "PRImA [3]\n", + "Newspaper [17]\n", + "TableBank [18]\n", + "HJDataset [31]\n", + "\n", + "F / M\n", + "M\n", + "F\n", + "F\n", + "F / M\n", + "\n", + "M\n", + "-\n", + "-\n", + "F\n", + "-\n", + "\n", + "Layouts of modern scientific documents\n", + "Layouts of scanned modern magazines and scientific reports\n", + "Layouts of scanned US newspapers from the 20th century\n", + "Table region on modern scientific and business document\n", + "Layouts of history Japanese documents\n", + "\n", + "1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy\n", + "vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\n", + "backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\n", + "R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\n", + "using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\n", + "zoo in coming months.\n", + "\n", + "layout data structures, which are optimized for efficiency and versatility. 3) When\n", + "necessary, users can employ existing or customized OCR models via the unified\n", + "API provided in the OCR module. 4) LayoutParser comes with a set of utility\n", + "functions for the visualization and storage of the layout data. 5) LayoutParser\n", + "is also highly customizable, via its integration with functions for layout data\n", + "annotation and model training. We now provide detailed descriptions for each\n", + "component.\n", + "\n", + "3.1 Layout Detection Models\n", + "\n", + "In LayoutParser, a layout model takes a document image as an input and\n", + "generates a list of rectangular boxes for the target content regions. Different\n", + "from traditional methods, it relies on deep convolutional neural networks rather\n", + "than manually curated rules to identify content regions. It is formulated as an\n", + "object detection problem and state-of-the-art models like Faster R-CNN [28] and\n", + "Mask R-CNN [12] are used. This yields prediction results of high accuracy and\n", + "makes it possible to build a concise, generalized interface for layout detection.\n", + "LayoutParser, built upon Detectron2 [35], provides a minimal API that can\n", + "perform layout detection with only four lines of code in Python:\n", + "\n", + "1 import layoutparser as lp\n", + "2 image = cv2 . imread ( \" image_file \" ) # load images\n", + "3 model = lp . De t e c tro n2 Lay outM odel (\n", + "\n", + "\" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config \" )\n", + "\n", + "4\n", + "5 layout = model . detect ( image )\n", + "\n", + "LayoutParser provides a wealth of pre-trained model weights using various\n", + "datasets covering different languages, time periods, and document types. Due to\n", + "domain shift [7], the prediction performance can notably drop when models are ap-\n", + "plied to target samples that are significantly different from the training dataset. As\n", + "document structures and layouts vary greatly in different domains, it is important\n", + "to select models trained on a dataset similar to the test samples. A semantic syntax\n", + "is used for initializing the model weights in LayoutParser, using both the dataset\n", + "name and model name lp:///.\n", + "\f6\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "\n", + "3.2 Layout Data Structures\n", + "\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "7\n", + "\n", + "Coordinates are the cornerstones for storing layout information. Currently,\n", + "three types of Coordinate data structures are provided in LayoutParser, shown\n", + "in Figure 2. Interval and Rectangle are the most common data types and\n", + "support specifying 1D or 2D regions within a document. They are parameterized\n", + "with 2 and 4 parameters. A Quadrilateral class is also implemented to support\n", + "a more generalized representation of rectangular regions when the document\n", + "is skewed or distorted, where the 4 corner points can be specified and a total\n", + "of 8 degrees of freedom are supported. A wide collection of transformations\n", + "like shift, pad, and scale, and operations like intersect, union, and is_in,\n", + "are supported for these classes. Notably, it is common to separate a segment\n", + "of the image and analyze it individually. LayoutParser provides full support\n", + "for this scenario via image cropping operations crop_image and coordinate\n", + "transformations like relative_to and condition_on that transform coordinates\n", + "to and from their relative representations. We refer readers to Table 2 for a more\n", + "detailed description of these operations13.\n", + "\n", + "Based on Coordinates, we implement the TextBlock class that stores both\n", + "the positional and extra features of individual layout elements. It also supports\n", + "specifying the reading orders via setting the parent field to the index of the parent\n", + "object. A Layout class is built that takes in a list of TextBlocks and supports\n", + "processing the elements in batch. Layout can also be nested to support hierarchical\n", + "layout structures. They support the same operations and transformations as the\n", + "Coordinate classes, minimizing both learning and deployment effort.\n", + "\n", + "3.3 OCR\n", + "\n", + "LayoutParser provides a unified interface for existing OCR tools. Though there\n", + "are many OCR tools available, they are usually configured differently with distinct\n", + "APIs or protocols for using them. It can be inefficient to add new OCR tools into\n", + "an existing pipeline, and difficult to make direct comparisons among the available\n", + "tools to find the best option for a particular project. To this end, LayoutParser\n", + "builds a series of wrappers among existing OCR engines, and provides nearly\n", + "the same syntax for using them. It supports a plug-and-play style of using OCR\n", + "engines, making it effortless to switch, evaluate, and compare different OCR\n", + "modules:\n", + "\n", + "1 ocr_agent = lp . TesseractAgent ()\n", + "2 # Can be easily switched to other OCR software\n", + "3 tokens = ocr_agent . detect ( image )\n", + "\n", + "The OCR outputs will also be stored in the aforementioned layout data\n", + "structures and can be seamlessly incorporated into the digitization pipeline.\n", + "Currently LayoutParser supports the Tesseract and Google Cloud Vision OCR\n", + "engines.\n", + "\n", + "LayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained\n", + "with the Connectionist Temporal Classification (CTC) loss [10]. It can be used\n", + "like the other OCR modules, and can be easily trained on customized datasets.\n", + "\n", + "13 This is also available in the LayoutParser documentation pages.\n", + "\f8\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Table 2: All operations supported by the layout elements. The same APIs are\n", + "supported across different layout element classes including Coordinate types,\n", + "TextBlock and Layout.\n", + "\n", + "Operation Name\n", + "\n", + "Description\n", + "\n", + "block.pad(top, bottom, right, left) Enlarge the current block according to the input\n", + "\n", + "block.scale(fx, fy)\n", + "\n", + "block.shift(dx, dy)\n", + "\n", + "Scale the current block given the ratio\n", + "in x and y direction\n", + "\n", + "Move the current block with the shift\n", + "distances in x and y direction\n", + "\n", + "block1.is in(block2)\n", + "\n", + "Whether block1 is inside of block2\n", + "\n", + "block1.intersect(block2)\n", + "\n", + "block1.union(block2)\n", + "\n", + "block1.relative to(block2)\n", + "\n", + "block1.condition on(block2)\n", + "\n", + "Return the intersection region of block1 and block2.\n", + "Coordinate type to be determined based on the inputs.\n", + "\n", + "Return the union region of block1 and block2.\n", + "Coordinate type to be determined based on the inputs.\n", + "\n", + "Convert the absolute coordinates of block1 to\n", + "relative coordinates to block2\n", + "\n", + "Calculate the absolute coordinates of block1 given\n", + "the canvas block2’s absolute coordinates\n", + "\n", + "block.crop image(image)\n", + "\n", + "Obtain the image segments in the block region\n", + "\n", + "3.4 Storage and visualization\n", + "\n", + "The end goal of DIA is to transform the image-based document data into a\n", + "structured database. LayoutParser supports exporting layout data into different\n", + "formats like JSON, csv, and will add the support for the METS/ALTO XML\n", + "format 14 . It can also load datasets from layout analysis-specific formats like\n", + "COCO [38] and the Page Format [25] for training layout models (Section 3.5).\n", + "Visualization of the layout detection results is critical for both presentation\n", + "and debugging. LayoutParser is built with an integrated API for displaying the\n", + "layout information along with the original document image. Shown in Figure 3, it\n", + "enables presenting layout data with rich meta information and features in different\n", + "modes. More detailed information can be found in the online LayoutParser\n", + "documentation page.\n", + "\n", + "3.5 Customized Model Training\n", + "\n", + "Besides the off-the-shelf library, LayoutParser is also highly customizable with\n", + "supports for highly unique and challenging document analysis tasks. Target\n", + "document images can be vastly different from the existing datasets for train-\n", + "ing layout models, which leads to low layout detection accuracy. Training data\n", + "\n", + "14 https://altoxml.github.io\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "9\n", + "\n", + "Fig. 3: Layout detection and OCR results visualization generated by the\n", + "LayoutParser APIs. Mode I directly overlays the layout region bounding boxes\n", + "and categories over the original image. Mode II recreates the original document\n", + "via drawing the OCR’d texts at their corresponding positions on the image\n", + "canvas. In this figure, tokens in textual regions are filtered using the API and\n", + "then displayed.\n", + "\n", + "can also be highly sensitive and not sharable publicly. To overcome these chal-\n", + "lenges, LayoutParser is built with rich features for efficient data annotation and\n", + "customized model training.\n", + "\n", + "LayoutParser incorporates a toolkit optimized for annotating document lay-\n", + "outs using object-level active learning [32]. With the help from a layout detection\n", + "model trained along with labeling, only the most important layout objects within\n", + "each image, rather than the whole image, are required for labeling. The rest of\n", + "the regions are automatically annotated with high confidence predictions from\n", + "the layout detection model. This allows a layout dataset to be created more\n", + "efficiently with only around 60% of the labeling budget.\n", + "\n", + "After the training dataset is curated, LayoutParser supports different modes\n", + "for training the layout models. Fine-tuning can be used for training models on a\n", + "small newly-labeled dataset by initializing the model with existing pre-trained\n", + "weights. Training from scratch can be helpful when the source dataset and\n", + "target are significantly different and a large training set is available. However, as\n", + "suggested in Studer et al.’s work[33], loading pre-trained weights on large-scale\n", + "datasets like ImageNet [5], even from totally different domains, can still boost\n", + "model performance. Through the integrated API provided by LayoutParser,\n", + "users can easily compare model performances on the benchmark datasets.\n", + "\f10\n", + "\n", + "Z. Shen et al.\n", + "\n", + "Fig. 4: Illustration of (a) the original historical Japanese document with layout\n", + "detection results and (b) a recreated version of the document image that achieves\n", + "much better character recognition recall. The reorganization algorithm rearranges\n", + "the tokens based on the their detected bounding boxes given a maximum allowed\n", + "height.\n", + "\n", + "4 LayoutParser Community Platform\n", + "\n", + "Another focus of LayoutParser is promoting the reusability of layout detection\n", + "models and full digitization pipelines. Similar to many existing deep learning\n", + "libraries, LayoutParser comes with a community model hub for distributing\n", + "layout models. End-users can upload their self-trained models to the model hub,\n", + "and these models can be loaded into a similar interface as the currently available\n", + "LayoutParser pre-trained models. For example, the model trained on the News\n", + "Navigator dataset [17] has been incorporated in the model hub.\n", + "\n", + "Beyond DL models, LayoutParser also promotes the sharing of entire doc-\n", + "ument digitization pipelines. For example, sometimes the pipeline requires the\n", + "combination of multiple DL models to achieve better accuracy. Currently, pipelines\n", + "are mainly described in academic papers and implementations are often not pub-\n", + "licly available. To this end, the LayoutParser community platform also enables\n", + "the sharing of layout pipelines to promote the discussion and reuse of techniques.\n", + "For each shared pipeline, it has a dedicated project page, with links to the source\n", + "code, documentation, and an outline of the approaches. A discussion panel is\n", + "provided for exchanging ideas. Combined with the core LayoutParser library,\n", + "users can easily build reusable components based on the shared pipelines and\n", + "apply them to solve their unique problems.\n", + "\n", + "5 Use Cases\n", + "\n", + "The core objective of LayoutParser is to make it easier to create both large-scale\n", + "and light-weight document digitization pipelines. Large-scale document processing\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "11\n", + "\n", + "focuses on precision, efficiency, and robustness. The target documents may have\n", + "complicated structures, and may require training multiple layout detection models\n", + "to achieve the optimal accuracy. Light-weight pipelines are built for relatively\n", + "simple documents, with an emphasis on development ease, speed and flexibility.\n", + "Ideally one only needs to use existing resources, and model training should be\n", + "avoided. Through two exemplar projects, we show how practitioners in both\n", + "academia and industry can easily build such pipelines using LayoutParser and\n", + "extract high-quality structured document data for their downstream tasks. The\n", + "source code for these projects will be publicly available in the LayoutParser\n", + "community hub.\n", + "\n", + "5.1 A Comprehensive Historical Document Digitization Pipeline\n", + "\n", + "The digitization of historical documents can unlock valuable data that can shed\n", + "light on many important social, economic, and historical questions. Yet due to\n", + "scan noises, page wearing, and the prevalence of complicated layout structures, ob-\n", + "taining a structured representation of historical document scans is often extremely\n", + "complicated.\n", + "In this example, LayoutParser was\n", + "used to develop a comprehensive\n", + "pipeline, shown in Figure 5, to gener-\n", + "ate high-quality structured data from\n", + "historical Japanese firm financial ta-\n", + "bles with complicated layouts. The\n", + "pipeline applies two layout models to\n", + "identify different levels of document\n", + "structures and two customized OCR\n", + "engines for optimized character recog-\n", + "nition accuracy.\n", + "\n", + "As shown in Figure 4 (a), the\n", + "document contains columns of text\n", + "written vertically 15, a common style\n", + "in Japanese. Due to scanning noise\n", + "and archaic printing technology, the\n", + "columns can be skewed or have vari-\n", + "able widths, and hence cannot be eas-\n", + "ily identified via rule-based methods.\n", + "Within each column, words are sepa-\n", + "rated by white spaces of variable size,\n", + "and the vertical positions of objects\n", + "can be an indicator of their layout\n", + "type.\n", + "\n", + "Fig. 5: Illustration of how LayoutParser\n", + "helps with the historical document digi-\n", + "tization pipeline.\n", + "\n", + "15 A document page consists of eight rows like this. For simplicity we skip the row\n", + "\n", + "segmentation discussion and refer readers to the source code when available.\n", + "\f12\n", + "\n", + "Z. Shen et al.\n", + "\n", + "To decipher the complicated layout\n", + "\n", + "structure, two object detection models have been trained to recognize individual\n", + "columns and tokens, respectively. A small training set (400 images with approxi-\n", + "mately 100 annotations each) is curated via the active learning based annotation\n", + "tool [32] in LayoutParser. The models learn to identify both the categories and\n", + "regions for each token or column via their distinct visual features. The layout\n", + "data structure enables easy grouping of the tokens within each column, and\n", + "rearranging columns to achieve the correct reading orders based on the horizontal\n", + "position. Errors are identified and rectified via checking the consistency of the\n", + "model predictions. Therefore, though trained on a small dataset, the pipeline\n", + "achieves a high level of layout detection accuracy: it achieves a 96.97 AP [19]\n", + "score across 5 categories for the column detection model, and a 89.23 AP across\n", + "4 categories for the token detection model.\n", + "\n", + "A combination of character recognition methods is developed to tackle the\n", + "unique challenges in this document. In our experiments, we found that irregular\n", + "spacing between the tokens led to a low character recognition recall rate, whereas\n", + "existing OCR models tend to perform better on densely-arranged texts. To\n", + "overcome this challenge, we create a document reorganization algorithm that\n", + "rearranges the text based on the token bounding boxes detected in the layout\n", + "analysis step. Figure 4 (b) illustrates the generated image of dense text, which is\n", + "sent to the OCR APIs as a whole to reduce the transaction costs. The flexible\n", + "coordinate system in LayoutParser is used to transform the OCR results relative\n", + "to their original positions on the page.\n", + "\n", + "Additionally, it is common for historical documents to use unique fonts\n", + "with different glyphs, which significantly degrades the accuracy of OCR models\n", + "trained on modern texts. In this document, a special flat font is used for printing\n", + "numbers and could not be detected by off-the-shelf OCR engines. Using the highly\n", + "flexible functionalities from LayoutParser, a pipeline approach is constructed\n", + "that achieves a high recognition accuracy with minimal effort. As the characters\n", + "have unique visual structures and are usually clustered together, we train the\n", + "layout model to identify number regions with a dedicated category. Subsequently,\n", + "LayoutParser crops images within these regions, and identifies characters within\n", + "them using a self-trained OCR model based on a CNN-RNN [6]. The model\n", + "detects a total of 15 possible categories, and achieves a 0.98 Jaccard score16 and\n", + "a 0.17 average Levinstein distances17 for token prediction on the test set.\n", + "\n", + "Overall, it is possible to create an intricate and highly accurate digitization\n", + "pipeline for large-scale digitization using LayoutParser. The pipeline avoids\n", + "specifying the complicated rules used in traditional methods, is straightforward\n", + "to develop, and is robust to outliers. The DL models also generate fine-grained\n", + "results that enable creative approaches like page reorganization for OCR.\n", + "\n", + "16 This measures the overlap between the detected and ground-truth characters, and\n", + "\n", + "the maximum is 1.\n", + "\n", + "17 This measures the number of edits from the ground-truth text to the predicted text,\n", + "\n", + "and lower is better.\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "13\n", + "\n", + "Fig. 6: This lightweight table detector can identify tables (outlined in red) and\n", + "cells (shaded in blue) in different locations on a page. In very few cases (d), it\n", + "might generate minor error predictions, e.g, failing to capture the top text line of\n", + "a table.\n", + "\n", + "5.2 A light-weight Visual Table Extractor\n", + "\n", + "Detecting tables and parsing their structures (table extraction) are of central im-\n", + "portance for many document digitization tasks. Many previous works [26, 30, 27]\n", + "and tools 18 have been developed to identify and parse table structures. Yet they\n", + "might require training complicated models from scratch, or are only applicable\n", + "for born-digital PDF documents. In this section, we show how LayoutParser can\n", + "help build a light-weight accurate visual table extractor for legal docket tables\n", + "using the existing resources with minimal effort.\n", + "\n", + "The extractor uses a pre-trained layout detection model for identifying the\n", + "table regions and some simple rules for pairing the rows and the columns in the\n", + "PDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the\n", + "LayoutParser Model Zoo can be used for detecting table regions. By filtering\n", + "out model predictions of low confidence and removing overlapping predictions,\n", + "LayoutParser can identify the tabular regions on each page, which significantly\n", + "simplifies the subsequent steps. By applying the line detection functions within\n", + "the tabular segments, provided in the utility module from LayoutParser, the\n", + "pipeline can identify the three distinct columns in the tables. A row clustering\n", + "method is then applied via analyzing the y coordinates of token bounding boxes in\n", + "the left-most column, which are obtained from the OCR engines. A non-maximal\n", + "suppression algorithm is used to remove duplicated rows with extremely small\n", + "gaps. Shown in Figure 6, the built pipeline can detect tables at different positions\n", + "on a page accurately. Continued tables from different pages are concatenated,\n", + "and a structured table representation has been easily created.\n", + "\n", + "18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\n", + "\f14\n", + "\n", + "Z. Shen et al.\n", + "\n", + "6 Conclusion\n", + "\n", + "LayoutParser provides a comprehensive toolkit for deep learning-based document\n", + "image analysis. The off-the-shelf library is easy to install, and can be used to\n", + "build flexible and accurate pipelines for processing documents with complicated\n", + "structures. It also supports high-level customization and enables easy labeling and\n", + "training of DL models on unique document image datasets. The LayoutParser\n", + "community platform facilitates sharing DL models and DIA pipelines, inviting\n", + "discussion and promoting code reproducibility and reusability. The LayoutParser\n", + "team is committed to keeping the library updated continuously and bringing\n", + "the most recent advances in DL-based DIA, such as multi-modal document\n", + "modeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\n", + "\n", + "Acknowledgements We thank the anonymous reviewers for their comments\n", + "and suggestions. This project is supported in part by NSF Grant OIA-2033558\n", + "and funding from the Harvard Data Science Initiative and Harvard Catalyst.\n", + "Zejiang Shen thanks Doug Downey for suggestions.\n", + "\n", + "References\n", + "\n", + "[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado,\n", + "G.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A.,\n", + "Irving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg,\n", + "J., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J.,\n", + "Steiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V.,\n", + "Vi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng,\n", + "X.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015),\n", + "https://www.tensorflow.org/, software available from tensorflow.org\n", + "\n", + "[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a\n", + "highly-functional python framework for reproducible experiments. In: 2018 16th\n", + "International Conference on Frontiers in Handwriting Recognition (ICFHR). pp.\n", + "423–428. IEEE (2018)\n", + "\n", + "[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic\n", + "dataset for performance evaluation of document layout analysis. In: 2009 10th\n", + "International Conference on Document Analysis and Recognition. pp. 296–300.\n", + "IEEE (2009)\n", + "\n", + "[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text\n", + "detection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and\n", + "Pattern Recognition. pp. 9365–9374 (2019)\n", + "\n", + "[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\n", + "\n", + "Hierarchical Image Database. In: CVPR09 (2009)\n", + "\n", + "[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with\n", + "coarse-to-fine attention. In: International Conference on Machine Learning. pp.\n", + "980–989. PMLR (2017)\n", + "\n", + "[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation.\n", + "In: International conference on machine learning. pp. 1180–1189. PMLR (2015)\n", + "\fLayoutParser: A Unified Toolkit for DL-Based DIA\n", + "\n", + "15\n", + "\n", + "[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters,\n", + "M., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language\n", + "processing platform. arXiv preprint arXiv:1803.07640 (2018)\n", + "(cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P.,\n", + "Grali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in-\n", + "formation extraction (2020)\n", + "\n", + "[9]\n", + "\n", + "[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal\n", + "classification: labelling unsegmented sequence data with recurrent neural networks.\n", + "In: Proceedings of the 23rd international conference on Machine learning. pp.\n", + "369–376 (2006)\n", + "\n", + "[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for\n", + "document image classification and retrieval. In: 2015 13th International Conference\n", + "on Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015)\n", + "[12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\n", + "\n", + "IEEE international conference on computer vision. pp. 2961–2969 (2017)\n", + "\n", + "[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition.\n", + "In: Proceedings of the IEEE conference on computer vision and pattern recognition.\n", + "pp. 770–778 (2016)\n", + "\n", + "[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\n", + "\n", + "2007(159), 2 (Jul 2007)\n", + "\n", + "[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis\n", + "benchmarking. In: 2011 International Conference on Document Analysis and\n", + "Recognition. pp. 42–47. IEEE (2011)\n", + "\n", + "[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5\n", + "million images. In: Adjunct Publication of the 33rd Annual ACM Sym-\n", + "posium on User\n", + "Interface Software and Technology. p. 120–122. UIST\n", + "’20 Adjunct, Association for Computing Machinery, New York, NY, USA\n", + "(2020). https://doi.org/10.1145/3379350.3416143, https://doi-org.offcampus.\n", + "lib.washington.edu/10.1145/3379350.3416143\n", + "\n", + "[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N.,\n", + "Thomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting\n", + "Headlines and Visual Content from 16 Million Historic Newspaper Pages in\n", + "Chronicling America, p. 3055–3062. Association for Computing Machinery, New\n", + "York, NY, USA (2020), https://doi.org/10.1145/3340531.3412767\n", + "\n", + "[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark\n", + "for image-based table detection and recognition. arXiv preprint arXiv:1903.01949\n", + "(2019)\n", + "\n", + "[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P.,\n", + "Zitnick, C.L.: Microsoft coco: Common objects in context. In: European conference\n", + "on computer vision. pp. 740–755. Springer (2014)\n", + "\n", + "[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic\n", + "segmentation. In: Proceedings of the IEEE conference on computer vision and\n", + "pattern recognition. pp. 3431–3440 (2015)\n", + "\n", + "[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten-\n", + "croft, K.: An experimental workflow development platform for historical document\n", + "digitisation and analysis. In: Proceedings of the 2011 workshop on historical\n", + "document imaging and processing. pp. 161–168 (2011)\n", + "\n", + "[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach\n", + "for document segmentation. In: 2018 16th International Conference on Frontiers\n", + "in Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\n", + "\f16\n", + "\n", + "Z. Shen et al.\n", + "\n", + "[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z.,\n", + "Desmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017)\n", + "[24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen,\n", + "T., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style,\n", + "high-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019)\n", + "[25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth\n", + "elements) format framework. In: 2010 20th International Conference on Pattern\n", + "Recognition. pp. 257–260. IEEE (2010)\n", + "\n", + "[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet:\n", + "An approach for end to end table detection and structure recognition from image-\n", + "based documents. In: Proceedings of the IEEE/CVF Conference on Computer\n", + "Vision and Pattern Recognition Workshops. pp. 572–573 (2020)\n", + "\n", + "[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph\n", + "neural networks. In: 2019 International Conference on Document Analysis and\n", + "Recognition (ICDAR). pp. 142–147. IEEE (2019)\n", + "\n", + "[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object\n", + "detection with region proposal networks. In: Advances in neural information\n", + "processing systems. pp. 91–99 (2015)\n", + "\n", + "[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph\n", + "neural network model. IEEE transactions on neural networks 20(1), 61–80 (2008)\n", + "[30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning\n", + "for detection and structure recognition of tables in document images. In: 2017 14th\n", + "IAPR international conference on document analysis and recognition (ICDAR).\n", + "vol. 1, pp. 1162–1167. IEEE (2017)\n", + "\n", + "[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents\n", + "with complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer\n", + "Vision and Pattern Recognition Workshops. pp. 548–549 (2020)\n", + "\n", + "[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\n", + "\n", + "based layout annotation. arXiv preprint arXiv:2010.01762 (2020)\n", + "\n", + "[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer,\n", + "A., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for\n", + "historical document image analysis. In: 2019 International Conference on Document\n", + "Analysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\n", + "\n", + "[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P.,\n", + "Rault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of-\n", + "the-art natural language processing. arXiv preprint arXiv:1910.03771 (2019)\n", + "[35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2. https://\n", + "\n", + "github.com/facebookresearch/detectron2 (2019)\n", + "\n", + "[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C.,\n", + "Che, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document\n", + "understanding. arXiv preprint arXiv:2012.14740 (2020)\n", + "\n", + "[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\n", + "\n", + "text and layout for document image understanding (2019)\n", + "\n", + "[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\n", + "\n", + "layout analysis.\n", + "\n", + "ument\n", + "Analysis and Recognition (ICDAR). pp. 1015–1022.\n", + "https://doi.org/10.1109/ICDAR.2019.00166\n", + "\n", + "largest dataset ever for doc-\n", + "In: 2019 International Conference on Document\n", + "IEEE (Sep 2019).\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'total_pages': 16,\n", + " 'source': 'example_data/layout-parser-paper.pdf'}\n" + ] + } + ], + "source": [ + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "from langchain_community.document_loaders.parsers import PDFMinerParser\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PDFMinerParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "It is possible to work with files from cloud storage." + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PDFMinerParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Find out more [here](/docs/how_to/document_loader_custom/)" + }, { "cell_type": "markdown", "metadata": {}, "source": [ "## API reference\n", "\n", - "For detailed documentation of all PDFMinerLoader features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFMinerLoader.html" + "For detailed documentation of all `PDFMinerLoader` features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFMinerLoader.html" ] } ], diff --git a/docs/docs/integrations/document_loaders/pdfplumber.ipynb b/docs/docs/integrations/document_loaders/pdfplumber.ipynb index cfa43817f1076..e23c006d89125 100644 --- a/docs/docs/integrations/document_loaders/pdfplumber.ipynb +++ b/docs/docs/integrations/document_loaders/pdfplumber.ipynb @@ -4,9 +4,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PDFPlumber\n", "\n", - "Like PyMuPDF, the output Documents contain detailed metadata about the PDF and its pages, and returns one document per page.\n", + " # PDFPlumberLoader\n", + "\n", + "This notebook provides a quick overview for getting started with `PDFPlumber` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all __ModuleName__Loader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFPlumberLoader.html).\n", + "\n", + " \n", "\n", "## Overview\n", "### Integration details\n", @@ -14,30 +17,29 @@ "| Class | Package | Local | Serializable | JS support|\n", "| :--- | :--- | :---: | :---: | :---: |\n", "| [PDFPlumberLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFPlumberLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + "\n", + "--------- \n", + "\n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| PDFPlumberLoader | ✅ | ❌ | \n", + "\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "| :---: | :---: | :---: | :---: |:---: |\n", + "| PDFPlumberLoader | ✅ | ❌ | ✅ | ✅ |\n", + "\n", + " \n", "\n", "## Setup\n", "\n", "### Credentials\n", "\n", - "No credentials are needed to use this loader." + "No credentials are required to use PyPDFLoader" ] }, { - "cell_type": "markdown", "metadata": {}, - "source": [ - "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" - ] - }, - { "cell_type": "code", - "execution_count": null, - "metadata": {}, "outputs": [], + "execution_count": null, "source": [ "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" @@ -49,17 +51,29 @@ "source": [ "### Installation\n", "\n", - "Install **langchain_community**." + "Install **langchain_community** and **pdfplumber**." ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -qU langchain_community" - ] + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T07:56:35.538834Z", + "start_time": "2024-12-16T07:56:32.478301Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": "%pip install -qU langchain_community pdfplumber" }, { "cell_type": "markdown", @@ -72,81 +86,1079 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:24.212897Z", + "start_time": "2025-01-02T09:35:23.546223Z" + } + }, "source": [ "from langchain_community.document_loaders import PDFPlumberLoader\n", "\n", - "loader = PDFPlumberLoader(\"./example_data/layout-parser-paper.pdf\")" - ] + "file_path = \"./example_data/layout-parser-paper.pdf\"\n", + "loader = PDFPlumberLoader(file_path)" + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", "metadata": {}, + "source": "## Load" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:26.831012Z", + "start_time": "2025-01-02T09:35:25.638537Z" + } + }, "source": [ - "## Load" - ] + "docs = loader.load()\n", + "docs[0]" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'author': '', 'creationdate': '2021-06-22T01:27:10+00:00', 'creator': 'LaTeX with hyperref', 'keywords': '', 'moddate': '2021-06-22T01:27:10+00:00', 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'producer': 'pdfTeX-1.40.21', 'subject': '', 'title': '', 'trapped': 'False', 'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'total_pages': 16, 'page': 0}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recentadvancesindocumentimageanalysis(DIA)havebeen\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomescouldbeeasilydeployedinproductionandextendedforfurther\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportantinnovationsbyawideaudience.Thoughtherehavebeenon-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopmentindisciplineslikenaturallanguageprocessingandcomputer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademicresearchacross awiderangeof disciplinesinthesocialsciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitiveinterfacesforapplyingandcustomizingDLmodelsforlayoutde-\\ntection,characterrecognition,andmanyotherdocumentprocessingtasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: DocumentImageAnalysis·DeepLearning·LayoutAnalysis\\n· Character Recognition · Open Source library · Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocumentimageanalysis(DIA)tasksincludingdocumentimageclassification[11,\\n1202 nuJ 12 ]VC.sc[ 2v84351.3012:viXra\\n')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 }, { "cell_type": "code", - "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:27.311960Z", + "start_time": "2025-01-02T09:35:27.308127Z" + } + }, + "source": [ + "import pprint\n", + "\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "## Lazy Load\n" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:30.086397Z", + "start_time": "2025-01-02T09:35:28.883048Z" + } + }, + "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ], "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'page': 0, 'total_pages': 16, 'Author': '', 'CreationDate': 'D:20210622012710Z', 'Creator': 'LaTeX with hyperref', 'Keywords': '', 'ModDate': 'D:20210622012710Z', 'PTEX.Fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'Producer': 'pdfTeX-1.40.21', 'Subject': '', 'Title': '', 'Trapped': 'False'}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recentadvancesindocumentimageanalysis(DIA)havebeen\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomescouldbeeasilydeployedinproductionandextendedforfurther\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportantinnovationsbyawideaudience.Thoughtherehavebeenon-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopmentindisciplineslikenaturallanguageprocessingandcomputer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademicresearchacross awiderangeof disciplinesinthesocialsciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitiveinterfacesforapplyingandcustomizingDLmodelsforlayoutde-\\ntection,characterrecognition,andmanyotherdocumentprocessingtasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: DocumentImageAnalysis·DeepLearning·LayoutAnalysis\\n· Character Recognition · Open Source library · Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocumentimageanalysis(DIA)tasksincludingdocumentimageclassification[11,\\n1202\\nnuJ\\n12\\n]VC.sc[\\n2v84351.3012:viXra\\n')" + "6" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], + "execution_count": 4 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:30.096737Z", + "start_time": "2025-01-02T09:35:30.093391Z" + } + }, "source": [ - "docs = loader.load()\n", - "docs[0]" + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for DL-Based DIA 11\n", + "focuses on precision, efficiency, and robustness\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 10}\n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata attribute contains at least the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", + "\n", + "Additional metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Splitting mode & custom pages delimiter" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", + "\n", + "By default PDFPlumberLoader will split the PDF by page." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:35.095353Z", + "start_time": "2025-01-02T09:35:33.954282Z" + } + }, + "source": [ + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the whole PDF as a single langchain Document object:" + }, { "cell_type": "code", - "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:38.474715Z", + "start_time": "2025-01-02T09:35:37.309411Z" + } + }, + "source": [ + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16}\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:41.684318Z", + "start_time": "2025-01-02T09:35:40.577933Z" + } + }, + "source": [ + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'page': 0, 'total_pages': 16, 'Author': '', 'CreationDate': 'D:20210622012710Z', 'Creator': 'LaTeX with hyperref', 'Keywords': '', 'ModDate': 'D:20210622012710Z', 'PTEX.Fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'Producer': 'pdfTeX-1.40.21', 'Subject': '', 'Title': '', 'Trapped': 'False'}\n" + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recentadvancesindocumentimageanalysis(DIA)havebeen\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomescouldbeeasilydeployedinproductionandextendedforfurther\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portantinnovationsbyawideaudience.Thoughtherehavebeenon-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "developmentindisciplineslikenaturallanguageprocessingandcomputer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academicresearchacross awiderangeof disciplinesinthesocialsciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitiveinterfacesforapplyingandcustomizingDLmodelsforlayoutde-\n", + "tection,characterrecognition,andmanyotherdocumentprocessingtasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: DocumentImageAnalysis·DeepLearning·LayoutAnalysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "documentimageanalysis(DIA)tasksincludingdocumentimageclassification[11,\n", + "1202 nuJ 12 ]VC.sc[ 2v84351.3012:viXra\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "2 Z. Shen et al.\n", + "37], layout detection [38, 22], table detection [26], and scene text detection [4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manualspecificationofcomplicatedrules,whichisthestatusquowithtraditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "However, there are several practical difficulties for taking advantages of re-\n", + "cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame-\n", + "works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\n", + "be obfuscated by implementation details [8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "modelsandotherprocessingtoobtainthefinaloutputs.Oftenresearchteamsuse\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel.\n", + "LayoutParserprovidesaunifiedtoolkittosupportDL-baseddocumentimage\n", + "analysisandprocessing.Toaddresstheaforementionedchallenges,LayoutParser\n", + "is built with the following components:\n", + "1. Anoff-the-shelftoolkitforapplyingDLmodelsforlayoutdetection,character\n", + "recognition, and other DIA tasks (Section 3)\n", + "2. A rich repository of pre-trained neural network models (Model Zoo) that\n", + "underlies the off-the-shelf usage\n", + "3. Comprehensivetoolsforefficientdocumentimagedataannotationandmodel\n", + "tuning to support different levels of customization\n", + "4. A DL model hub and community platform for the easy sharing, distribu-\n", + "tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [8, 34] and com-\n", + "puter vision [35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParsercanbeappliedinsophisticatedandlarge-scaledigitizationprojects\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "LayoutParser: A Unified Toolkit for DL-Based DIA 3\n", + "that require precision, efficiency, and robustness, as well as simple and light-\n", + "weight document processing tasks focusing on efficacy and flexibility (Section 5).\n", + "LayoutParser is being actively mainta\n" ] } ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "# Extract images from the PDF" + }, + { + "cell_type": "markdown", + "metadata": {}, "source": [ - "print(docs[0].metadata)" + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", + "\n", + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." ] }, { "cell_type": "markdown", "metadata": {}, + "source": "### Extract images from the PDF with rapidOCR:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:35:46.166362Z", + "start_time": "2025-01-02T09:35:44.669121Z" + } + }, + "source": [ + "%pip install -qU rapidocr-onnxruntime" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:09.394912Z", + "start_time": "2025-01-02T09:35:46.176541Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig.2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinateinformationandextrafeatureslikeblocktext,types,andreadingorders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "thelayoutelements.Indocumentimageanalysispipelines,variouspost-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs.Traditionally,thisrequiresexportingDLmodeloutputsandthenloading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\"Coordinate\n",\n", + "\n" + ] + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with Tesseract:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:13.912195Z", + "start_time": "2025-01-02T09:36:12.552798Z" + } + }, "source": [ - "## Lazy Load" + "%pip install -qU pytesseract" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 11 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:25.035884Z", + "start_time": "2025-01-02T09:36:13.918342Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig.2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinateinformationandextrafeatureslikeblocktext,types,andreadingorders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "thelayoutelements.Indocumentimageanalysispipelines,variouspost-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs.Traditionally,thisrequiresexportingDLmodeloutputsandthenloading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "Coordinate\n", + "\n", + "textblock\n", + "\n", + "x-interval\n", + "\n", + "JeAsaqui-A\n", + "\n", + "Coordinate\n", + "+\n", + "\n", + "Extra features\n", + "\n", + "Rectangle\n", + "\n", + "Quadrilateral\n", + "\n", + "Block\n", + "Text\n", + "\n", + "Block\n", + "Type\n", + "\n", + "Reading\n", + "Order\n", + "\n", + "layout\n", + "\n", + "[ coordinate1 textblock1 |\n", + "'\n", + "\n", + "“y textblock2 , layout1 ]\n", + "\n", + "A list of the layout elements\n", + "\n", + "The same transformation and operation APIs\n", + "\n" + ] + } + ], + "execution_count": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with multimodal model:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:27.726701Z", + "start_time": "2025-01-02T09:36:26.286792Z" + } + }, + "source": [ + "%pip install -qU langchain_openai" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:28.579145Z", + "start_time": "2025-01-02T09:36:28.551518Z" + } + }, + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:36:29.574330Z", + "start_time": "2025-01-02T09:36:29.570367Z" + } + }, + "source": [ + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ], + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:37:36.277599Z", + "start_time": "2025-01-02T09:36:30.508489Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig.2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinateinformationandextrafeatureslikeblocktext,types,andreadingorders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "thelayoutelements.Indocumentimageanalysispipelines,variouspost-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs.Traditionally,thisrequiresexportingDLmodeloutputsandthenloading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "![Summary: The image illustrates a structured layout model using coordinates and text blocks for transformation and operation APIs. It includes diagrams of a rectangle and quadrilateral with labeled coordinates. The layout elements are organized into a list format.\n", + "\n", + "Extracted Text:\n", + "- Coordinate\n", + "- x-interval\n", + "- y-interval\n", + "- start, end\n", + "- Rectangle\n", + "- Quadrilateral\n", + "- textblock\n", + "- Coordinate + Extra features\n", + "- Block Text\n", + "- Block Type\n", + "- Reading Order\n", + "- layout\n", + "- [ coordinate1, textblock1, ..., textblock2, layout1 \\\\]\n", + "- A list of the layout elements\n", + "- The same transformation and operation APIs](.)\n", + "\n" + ] + } + ], + "execution_count": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "# Extract tables from the PDF" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "With PDFPlumber you can extract tables from your PDFs in *html*, *markdown* or *csv* format :" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:43:07.441821Z", + "start_time": "2025-01-02T09:43:06.181451Z" + } + }, + "source": [ + "loader = PDFPlumberLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_tables=\"markdown\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[4].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for DL-Based DIA 5\n", + "Table 1: Current layout detection models in the LayoutParser model zoo\n", + "Dataset\n", + "|||\n", + "|---|---|\n", + "|BaseModel1|LargeModel|\n", + "|F/M M F F F/M|M - - F -|\n", + "\n", + "Notes\n", + "PubLayNet[38] Layoutsofmodernscientificdocuments\n", + "PRImA[3] Layoutsofscannedmodernmagazinesandscientificreports\n", + "Newspaper[17] LayoutsofscannedUSnewspapersfromthe20thcentury\n", + "TableBank[18] Tableregiononmodernscientificandbusinessdocument\n", + "HJDataset[31] LayoutsofhistoryJapanesedocuments\n", + "1Foreachdataset,wetrainseveralmodelsofdifferentsizesfordifferentneeds(thetrade-offbetweenaccuracy\n", + "vs.computationalcost).For“basemodel”and“largemodel”,werefertousingtheResNet50orResNet101\n", + "backbones[13],respectively.Onecantrainmodelsofdifferentarchitectures,likeFasterR-CNN[28](F)andMask\n", + "R-CNN[12](M).Forexample,anFintheLargeModelcolumnindicatesithasaFasterR-CNNmodeltrained\n", + "usingtheResNet101backbone.Theplatformismaintainedandanumberofadditionswillbemadetothemodel\n", + "zooincomingmonths.\n", + "layout data structures, which are optimized for efficiency and versatility. 3) When\n", + "necessary, users can employ existing or customized OCR models via the unified\n", + "API provided in the OCR module. 4) LayoutParser comes with a set of utility\n", + "functions for the visualization and storage of the layout data. 5) LayoutParser\n", + "is also highly customizable, via its integration with functions for layout data\n", + "annotation and model training. We now provide detailed descriptions for each\n", + "component.\n", + "3.1 Layout Detection Models\n", + "In LayoutParser, a layout model takes a document image as an input and\n", + "generates a list of rectangular boxes for the target content regions. Different\n", + "from traditional methods, it relies on deep convolutional neural networks rather\n", + "than manually curated rules to identify content regions. It is formulated as an\n", + "object detection problem and state-of-the-art models like Faster R-CNN [28] and\n", + "Mask R-CNN [12] are used. This yields prediction results of high accuracy and\n", + "makes it possible to build a concise, generalized interface for layout detection.\n", + "LayoutParser, built upon Detectron2 [35], provides a minimal API that can\n", + "perform layout detection with only four lines of code in Python:\n", + "1\n", + "||\n", + "|---|\n", + "|import layoutparser as lp|\n", + "|image = cv2.imread(\"image_file\") # load images|\n", + "|model = lp.Detectron2LayoutModel(|\n", + "|\"lp://PubLayNet/faster_rcnn_R_50_FPN_3x/config\")|\n", + "|layout = model.detect(image)|\n", + "\n", + "2\n", + "3\n", + "4\n", + "5\n", + "LayoutParser provides a wealth of pre-trained model weights using various\n", + "datasets covering different languages, time periods, and document types. Due to\n", + "domainshift[7],thepredictionperformancecannotablydropwhenmodelsareap-\n", + "pliedtotargetsamplesthataresignificantlydifferentfromthetrainingdataset.As\n", + "documentstructuresandlayoutsvarygreatlyindifferentdomains,itisimportant\n", + "toselectmodelstrainedonadatasetsimilartothetestsamples.Asemanticsyntax\n", + "isusedforinitializingthemodelweightsinLayoutParser,usingboththedataset\n", + "name and model name lp:///.\n", + "\n" + ] + } + ], + "execution_count": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with Files\n", + "\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", + "\n", + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." ] }, { "cell_type": "code", - "execution_count": 7, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:43:34.658237Z", + "start_time": "2025-01-02T09:43:33.532262Z" + } + }, + "source": [ + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "from langchain_community.document_loaders.parsers import PDFPlumberParser\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PDFPlumberParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recentadvancesindocumentimageanalysis(DIA)havebeen\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomescouldbeeasilydeployedinproductionandextendedforfurther\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portantinnovationsbyawideaudience.Thoughtherehavebeenon-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "developmentindisciplineslikenaturallanguageprocessingandcomputer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academicresearchacross awiderangeof disciplinesinthesocialsciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitiveinterfacesforapplyingandcustomizingDLmodelsforlayoutde-\n", + "tection,characterrecognition,andmanyotherdocumentprocessingtasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: DocumentImageAnalysis·DeepLearning·LayoutAnalysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "documentimageanalysis(DIA)tasksincludingdocumentimageclassification[11,\n", + "1202 nuJ 12 ]VC.sc[ 2v84351.3012:viXra\n", + "\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': 'False',\n", + " 'source': 'example_data/layout-parser-paper.pdf',\n", + " 'file_path': 'example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "It is possible to work with files from cloud storage." + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "page = []\n", - "for doc in loader.lazy_load():\n", - " page.append(doc)\n", - " if len(page) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", "\n", - " page = []" + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PDFPlumberParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" ] }, { @@ -155,7 +1167,7 @@ "source": [ "## API reference\n", "\n", - "For detailed documentation of all PDFPlumberLoader features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFPlumberLoader.html" + "For detailed documentation of all `PDFPlumberLoader` features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PDFPlumberLoader.html" ] } ], diff --git a/docs/docs/integrations/document_loaders/pymupdf.ipynb b/docs/docs/integrations/document_loaders/pymupdf.ipynb index 65c92cb6ef0f8..32bdda81eb501 100644 --- a/docs/docs/integrations/document_loaders/pymupdf.ipynb +++ b/docs/docs/integrations/document_loaders/pymupdf.ipynb @@ -4,9 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PyMuPDF\n", + "# PyMuPDFLoader\n", "\n", - "`PyMuPDF` is optimized for speed, and contains detailed metadata about the PDF and its pages. It returns one document per page.\n", + "This notebook provides a quick overview for getting started with `PyMuPDF` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all __ModuleName__Loader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyMuPDFLoader.html).\n", + "\n", + " \n", "\n", "## Overview\n", "### Integration details\n", @@ -14,16 +16,22 @@ "| Class | Package | Local | Serializable | JS support|\n", "| :--- | :--- | :---: | :---: | :---: |\n", "| [PyMuPDFLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyMuPDFLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + "\n", + "--------- \n", + "\n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| PyMuPDFLoader | ✅ | ❌ | \n", + "\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "| :---: | :---: | :---: | :---: |:---: |\n", + "| PyMuPDFLoader | ✅ | ❌ | ✅ | ✅ |\n", + "\n", + " \n", "\n", "## Setup\n", "\n", "### Credentials\n", "\n", - "No credentials are needed to use the `PyMuPDFLoader`." + "No credentials are required to use PyMuPDFLoader" ] }, { @@ -35,13 +43,13 @@ }, { "cell_type": "code", - "execution_count": null, "metadata": {}, - "outputs": [], "source": [ "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -54,12 +62,10 @@ }, { "cell_type": "code", - "execution_count": null, "metadata": {}, + "source": "%pip install -qU langchain_community pymupdf", "outputs": [], - "source": [ - "%pip install -qU langchain-community pymupdf" - ] + "execution_count": null }, { "cell_type": "markdown", @@ -67,38 +73,127 @@ "source": [ "## Initialization\n", "\n", - "Now we can initialize our loader and start loading documents. " + "Now we can instantiate our model object and load documents:" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:00.638583Z", + "start_time": "2025-01-02T08:38:59.978307Z" + } + }, "source": [ "from langchain_community.document_loaders import PyMuPDFLoader\n", "\n", - "loader = PyMuPDFLoader(\"./example_data/layout-parser-paper.pdf\")" - ] + "file_path = \"./example_data/layout-parser-paper.pdf\"\n", + "loader = PyMuPDFLoader(file_path)" + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Load\n", - "\n", - "You can pass along any of the options from the [PyMuPDF documentation](https://pymupdf.readthedocs.io/en/latest/app1.html#plain-text/) as keyword arguments in the `load` call, and it will be pass along to the `get_text()` call." + "## Load" ] }, { "cell_type": "code", - "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:02.793901Z", + "start_time": "2025-01-02T08:39:02.663676Z" + } + }, + "source": [ + "docs = loader.load()\n", + "docs[0]" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'total_pages': 16, 'format': 'PDF 1.5', 'title': '', 'author': '', 'subject': '', 'keywords': '', 'creator': 'LaTeX with hyperref', 'producer': 'pdfTeX-1.40.21', 'creationdate': '2021-06-22T01:27:10+00:00', 'moddate': '2021-06-22T01:27:10+00:00', 'trapped': '', 'page': 0}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1 (\\x00), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis\\n· Character Recognition · Open Source library · Toolkit.\\n1\\nIntroduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\narXiv:2103.15348v2 [cs.CV] 21 Jun 2021')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:04.836646Z", + "start_time": "2025-01-02T08:39:04.832055Z" + } + }, + "source": [ + "import pprint\n", + "\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'format': 'PDF 1.5',\n", + " 'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'trapped': '',\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", "metadata": {}, + "source": [ + "## Lazy Load\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:06.765420Z", + "start_time": "2025-01-02T08:39:06.715577Z" + } + }, + "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ], "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'page': 0, 'total_pages': 16, 'format': 'PDF 1.5', 'title': '', 'author': '', 'subject': '', 'keywords': '', 'creator': 'LaTeX with hyperref', 'producer': 'pdfTeX-1.40.21', 'creationDate': 'D:20210622012710Z', 'modDate': 'D:20210622012710Z', 'trapped': ''}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1 (\\x00), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis\\n· Character Recognition · Open Source library · Toolkit.\\n1\\nIntroduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\narXiv:2103.15348v2 [cs.CV] 21 Jun 2021\\n')" + "6" ] }, "execution_count": 4, @@ -106,64 +201,1027 @@ "output_type": "execute_result" } ], + "execution_count": 4 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:08.461457Z", + "start_time": "2025-01-02T08:39:08.457733Z" + } + }, + "source": [ + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for DL-Based DIA\n", + "11\n", + "focuses on precision, efficiency, and robustness. T\n", + "{'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'format': 'PDF 1.5',\n", + " 'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'trapped': '',\n", + " 'page': 10}\n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata attribute contains at least the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", + "\n", + "Additional metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Splitting mode & custom pages delimiter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", + "\n", + "By default PDFPlumberLoader will split the PDF by page." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:13.530393Z", + "start_time": "2025-01-02T08:39:13.464990Z" + } + }, + "source": [ + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "{'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'format': 'PDF 1.5',\n", + " 'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'trapped': '',\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, "source": [ + "### Extract the whole PDF as a single langchain Document object:" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:18.082775Z", + "start_time": "2025-01-02T08:39:18.030520Z" + } + }, + "source": [ + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + ")\n", "docs = loader.load()\n", - "docs[0]" + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "{'source': './example_data/layout-parser-paper.pdf',\n", + " 'file_path': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'format': 'PDF 1.5',\n", + " 'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'trapped': ''}\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" ] }, { "cell_type": "code", - "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:20.926338Z", + "start_time": "2025-01-02T08:39:20.850061Z" + } + }, + "source": [ + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1 (\u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: Document Image Analysis · Deep Learning · Layout Analysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "1\n", + "Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "2\n", + "Z. Shen et al.\n", + "37], layout detection [38, 22], table detection [26], and scene text detection [4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manual specification of complicated rules, which is the status quo with traditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "However, there are several practical difficulties for taking advantages of re-\n", + "cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame-\n", + "works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\n", + "be obfuscated by implementation details [8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "models and other processing to obtain the final outputs. Often research teams use\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel.\n", + "LayoutParser provides a unified toolkit to support DL-based document image\n", + "analysis and processing. To address the aforementioned challenges, LayoutParser\n", + "is built with the following components:\n", + "1. An off-the-shelf toolkit for applying DL models for layout detection, character\n", + "recognition, and other DIA tasks (Section 3)\n", + "2. A rich repository of pre-trained neural network models (Model Zoo) that\n", + "underlies the off-the-shelf usage\n", + "3. Comprehensive tools for efficient document image data annotation and model\n", + "tuning to support different levels of customization\n", + "4. A DL model hub and community platform for the easy sharing, distribu-\n", + "tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [8, 34] and com-\n", + "puter vision [35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParser can be applied in sophisticated and large-scale digitization projects\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "LayoutParser: A Unified Toolkit for DL-Based DIA\n", + "3\n", + "that require precision, efficiency, and robustness, as well as simple and light-\n", + "weigh\n" + ] + } + ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Extract images from the PDF" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", + "\n", + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." + ] + }, + { + "cell_type": "markdown", "metadata": {}, + "source": [ + "### Extract images from the PDF with rapidOCR:" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:39:27.236008Z", + "start_time": "2025-01-02T08:39:25.845775Z" + } + }, + "source": [ + "%pip install -qU rapidocr-onnxruntime" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': './example_data/layout-parser-paper.pdf', 'file_path': './example_data/layout-parser-paper.pdf', 'page': 0, 'total_pages': 16, 'format': 'PDF 1.5', 'title': '', 'author': '', 'subject': '', 'keywords': '', 'creator': 'LaTeX with hyperref', 'producer': 'pdfTeX-1.40.21', 'creationDate': 'D:20210622012710Z', 'modDate': 'D:20210622012710Z', 'trapped': ''}\n" + "Note: you may need to restart the kernel to use updated packages.\n" ] } ], + "execution_count": 9 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:13.176467Z", + "start_time": "2025-01-02T08:39:27.344923Z" + } + }, "source": [ - "print(docs[0].metadata)" + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2\n", + "Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\n", + "\"Coordinate\n",\n" + ] + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Lazy Load" + "### Extract images from the PDF with Tesseract:" ] }, { "cell_type": "code", - "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:18.422525Z", + "start_time": "2025-01-02T08:40:17.091662Z" + } + }, + "source": [ + "%pip install -qU pytesseract" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 11 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:38.911560Z", + "start_time": "2025-01-02T08:40:19.213360Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2\n", + "Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\n", + "Coordinate\n", + "\n", + "textblock\n", + "\n", + "x-interval\n", + "\n", + "JeAsaqui-A\n", + "\n", + "Coordinate\n", + "+\n", + "\n", + "Extra features\n", + "\n", + "Rectangle\n", + "\n", + "Quadrilateral\n", + "\n", + "Block\n", + "Text\n", + "\n", + "Block\n", + "Type\n", + "\n", + "Reading\n", + "Order\n", + "\n", + "layout\n", + "\n", + "[ coordinate1 textblock1 |\n", + "'\n", + "\n", + "“y textblock2 , layout1 ]\n", + "\n", + "A list of the layout elements\n", + "\n", + "The same transformation and operation APIs\n" + ] + } + ], + "execution_count": 12 + }, + { + "cell_type": "markdown", "metadata": {}, + "source": [ + "### Extract images from the PDF with multimodal model:" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:42.013238Z", + "start_time": "2025-01-02T08:40:40.590066Z" + } + }, + "source": [ + "%pip install -qU langchain_openai" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:43.105884Z", + "start_time": "2025-01-02T08:40:43.075377Z" + } + }, + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:40:44.828086Z", + "start_time": "2025-01-02T08:40:44.824603Z" + } + }, + "source": [ + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ], "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:42:03.831586Z", + "start_time": "2025-01-02T08:40:47.129898Z" + } + }, "source": [ - "page = []\n", - "for doc in loader.lazy_load():\n", - " page.append(doc)\n", - " if len(page) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", "\n", - " page = []" + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2\n", + "Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\n", + "![Diagram illustrating layout elements and transformation operations. It shows coordinate representations (x-interval, y-interval, Rectangle, Quadrilateral) and text block features (Coordinate + Extra features: Block Text, Block Type, Reading Order). The layout section lists elements [coordinate1, textblock1, ..., textblock2, layout1\\\\]. \n", + "\n", + "Extracted text:\n", + "- Coordinate\n", + "- x-interval\n", + "- y-interval\n", + "- Rectangle\n", + "- Quadrilateral\n", + "- textblock\n", + "- Coordinate + Extra features\n", + "- Block Text\n", + "- Block Type\n", + "- Reading Order\n", + "- layout\n", + "- [ coordinate1, textblock1, ..., textblock2, layout1 \\\\]\n", + "- A list of the layout elements\n", + "- The same transformation and operation APIs](.)\n" + ] + } + ], + "execution_count": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Extract tables from the PDF" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With PyMUPDF you can extract tables from your PDFs in *html*, *markdown* or *csv* format :" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:42:10.611535Z", + "start_time": "2025-01-02T08:42:09.283492Z" + } + }, + "source": [ + "loader = PyMuPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_tables=\"markdown\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[4].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for DL-Based DIA\n", + "5\n", + "Table 1: Current layout detection models in the LayoutParser model zoo\n", + "Dataset\n", + "Base Model1 Large Model\n", + "Notes\n", + "PubLayNet [38]\n", + "F / M\n", + "M\n", + "Layouts of modern scientific documents\n", + "PRImA [3]\n", + "M\n", + "-\n", + "Layouts of scanned modern magazines and scientific reports\n", + "Newspaper [17]\n", + "F\n", + "-\n", + "Layouts of scanned US newspapers from the 20th century\n", + "TableBank [18]\n", + "F\n", + "F\n", + "Table region on modern scientific and business document\n", + "HJDataset [31]\n", + "F / M\n", + "-\n", + "Layouts of history Japanese documents\n", + "1 For each dataset, we train several models of different sizes for different needs (the trade-offbetween accuracy\n", + "vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101\n", + "backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask\n", + "R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained\n", + "using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model\n", + "zoo in coming months.\n", + "layout data structures, which are optimized for efficiency and versatility. 3) When\n", + "necessary, users can employ existing or customized OCR models via the unified\n", + "API provided in the OCR module. 4) LayoutParser comes with a set of utility\n", + "functions for the visualization and storage of the layout data. 5) LayoutParser\n", + "is also highly customizable, via its integration with functions for layout data\n", + "annotation and model training. We now provide detailed descriptions for each\n", + "component.\n", + "3.1\n", + "Layout Detection Models\n", + "In LayoutParser, a layout model takes a document image as an input and\n", + "generates a list of rectangular boxes for the target content regions. Different\n", + "from traditional methods, it relies on deep convolutional neural networks rather\n", + "than manually curated rules to identify content regions. It is formulated as an\n", + "object detection problem and state-of-the-art models like Faster R-CNN [28] and\n", + "Mask R-CNN [12] are used. This yields prediction results of high accuracy and\n", + "makes it possible to build a concise, generalized interface for layout detection.\n", + "LayoutParser, built upon Detectron2 [35], provides a minimal API that can\n", + "perform layout detection with only four lines of code in Python:\n", + "1 import\n", + "layoutparser as lp\n", + "2 image = cv2.imread(\"image_file\") # load\n", + "images\n", + "3 model = lp. Detectron2LayoutModel (\n", + "4\n", + "\"lp:// PubLayNet/ faster_rcnn_R_50_FPN_3x /config\")\n", + "5 layout = model.detect(image)\n", + "LayoutParser provides a wealth of pre-trained model weights using various\n", + "datasets covering different languages, time periods, and document types. Due to\n", + "domain shift [7], the prediction performance can notably drop when models are ap-\n", + "plied to target samples that are significantly different from the training dataset. As\n", + "document structures and layouts vary greatly in different domains, it is important\n", + "to select models trained on a dataset similar to the test samples. A semantic syntax\n", + "is used for initializing the model weights in LayoutParser, using both the dataset\n", + "name and model name lp:///.\n", + "\n", + "\n", + "|Dataset|Base Model1|Large Model|Notes|\n", + "|---|---|---|---|\n", + "|PubLayNet [38] PRImA [3] Newspaper [17] TableBank [18] HJDataset [31]|F / M M F F F / M|M &#45; &#45; F &#45;|Layouts of modern scientific documents Layouts of scanned modern magazines and scientific reports Layouts of scanned US newspapers from the 20th century Table region on modern scientific and business document Layouts of history Japanese documents|\n" + ] + } + ], + "execution_count": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with Files\n", + "\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", + "\n", + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:42:12.642822Z", + "start_time": "2025-01-02T08:42:12.576517Z" + } + }, + "source": [ + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "from langchain_community.document_loaders.parsers import PyMuPDFParser\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyMuPDFParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1 (\u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org\n", + "2 Brown University\n", + "ruochen zhang@brown.edu\n", + "3 Harvard University\n", + "{melissadell,jacob carlson}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu\n", + "5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: Document Image Analysis · Deep Learning · Layout Analysis\n", + "· Character Recognition · Open Source library · Toolkit.\n", + "1\n", + "Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "{'source': 'example_data/layout-parser-paper.pdf',\n", + " 'file_path': 'example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'format': 'PDF 1.5',\n", + " 'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'trapped': '',\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 18 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "It is possible to work with files from cloud storage." + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyMuPDFParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [], + "execution_count": null + }, { "cell_type": "markdown", "metadata": {}, "source": [ "## API reference\n", "\n", - "For detailed documentation of all PyMuPDFLoader features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyMuPDFLoader.html" + "For detailed documentation of all `PyMuPDFLoader` features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyMuPDFLoader.html" ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -177,9 +1235,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.12.7" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/docs/docs/integrations/document_loaders/pypdfdirectory.ipynb b/docs/docs/integrations/document_loaders/pypdfdirectory.ipynb index 69c49aca36d03..2bc5a34f9dafc 100644 --- a/docs/docs/integrations/document_loaders/pypdfdirectory.ipynb +++ b/docs/docs/integrations/document_loaders/pypdfdirectory.ipynb @@ -4,7 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PyPDFDirectoryLoader\n", + "# PyPDFDirectoryLoader (Deprecated)\n", + "\n", + "Note: This loader is deprecated. Please use [GenericLoader](https://python.langchain.com/docs/how_to/document_loader_custom/#overview) instead.\n", + "\n", + " \n", "\n", "This loader loads all PDF files from a specific directory.\n", "\n", @@ -36,13 +40,18 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:11.095053Z", + "start_time": "2024-12-13T14:39:11.081014Z" + } + }, "source": [ "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" - ] + ], + "outputs": [], + "execution_count": 7 }, { "cell_type": "markdown", @@ -55,12 +64,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -qU langchain_community" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:24.982355Z", + "start_time": "2024-12-13T14:39:11.169779Z" + } + }, + "source": "%pip install -qU langchain_community pypdf pillow", + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 8 }, { "cell_type": "markdown", @@ -73,9 +94,12 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:25.087581Z", + "start_time": "2024-12-13T14:39:25.071818Z" + } + }, "source": [ "from langchain_community.document_loaders import PyPDFDirectoryLoader\n", "\n", @@ -83,7 +107,9 @@ " \"../../docs/integrations/document_loaders/example_data/layout-parser-paper.pdf\"\n", ")\n", "loader = PyPDFDirectoryLoader(\"example_data/\")" - ] + ], + "outputs": [], + "execution_count": 9 }, { "cell_type": "markdown", @@ -94,41 +120,51 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:26.846482Z", + "start_time": "2024-12-13T14:39:25.235776Z" + } + }, + "source": [ + "docs = loader.load()\n", + "docs[0]" + ], "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': 'example_data/layout-parser-paper.pdf', 'page': 0}, page_content='LayoutParser : A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1( \\x00), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1Allen Institute for AI\\nshannons@allenai.org\\n2Brown University\\nruochen zhang@brown.edu\\n3Harvard University\\n{melissadell,jacob carlson }@fas.harvard.edu\\n4University of Washington\\nbcgl@cs.washington.edu\\n5University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser , an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io .\\nKeywords: Document Image Analysis ·Deep Learning ·Layout Analysis\\n·Character Recognition ·Open Source library ·Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021')" + "Document(metadata={'author': '', 'creationdate': '2021-06-22T01:27:10+00:00', 'creator': 'LaTeX with hyperref', 'keywords': '', 'moddate': '2021-06-22T01:27:10+00:00', 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'producer': 'pdfTeX-1.40.21', 'subject': '', 'title': '', 'trapped': '/False', 'source': 'example_data/layout-parser-paper.pdf', 'total_pages': 16, 'page': 0}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1 (\\x00 ), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1 Allen Institute for AI\\nshannons@allenai.org\\n2 Brown University\\nruochen zhang@brown.edu\\n3 Harvard University\\n{melissadell,jacob carlson}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu\\n5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis\\n· Character Recognition · Open Source library · Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\narXiv:2103.15348v2 [cs.CV] 21 Jun 2021')" ] }, - "execution_count": 2, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "docs = loader.load()\n", - "docs[0]" - ] + "execution_count": 10 }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:26.908137Z", + "start_time": "2024-12-13T14:39:26.898245Z" + } + }, + "source": [ + "print(docs[0].metadata)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': 'example_data/layout-parser-paper.pdf', 'page': 0}\n" + "{'author': '', 'creationdate': '2021-06-22T01:27:10+00:00', 'creator': 'LaTeX with hyperref', 'keywords': '', 'moddate': '2021-06-22T01:27:10+00:00', 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'producer': 'pdfTeX-1.40.21', 'subject': '', 'title': '', 'trapped': '/False', 'source': 'example_data/layout-parser-paper.pdf', 'total_pages': 16, 'page': 0}\n" ] } ], - "source": [ - "print(docs[0].metadata)" - ] + "execution_count": 11 }, { "cell_type": "markdown", @@ -139,9 +175,12 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-13T14:39:28.341129Z", + "start_time": "2024-12-13T14:39:26.999576Z" + } + }, "source": [ "page = []\n", "for doc in loader.lazy_load():\n", @@ -151,7 +190,9 @@ " # index.upsert(page)\n", "\n", " page = []" - ] + ], + "outputs": [], + "execution_count": 12 }, { "cell_type": "markdown", diff --git a/docs/docs/integrations/document_loaders/pypdfium2.ipynb b/docs/docs/integrations/document_loaders/pypdfium2.ipynb index 24740de99ac11..79738cb8752fe 100644 --- a/docs/docs/integrations/document_loaders/pypdfium2.ipynb +++ b/docs/docs/integrations/document_loaders/pypdfium2.ipynb @@ -6,8 +6,9 @@ "source": [ "# PyPDFium2Loader\n", "\n", + "This notebook provides a quick overview for getting started with `PyPDFium2` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all DocumentLoader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFium2Loader.html).\n", "\n", - "This notebook provides a quick overview for getting started with PyPDFium2 [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all __ModuleName__Loader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFium2Loader.html).\n", + " \n", "\n", "## Overview\n", "### Integration details\n", @@ -15,32 +16,38 @@ "| Class | Package | Local | Serializable | JS support|\n", "| :--- | :--- | :---: | :---: | :---: |\n", "| [PyPDFium2Loader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFium2Loader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + "\n", + "--------- \n", + "\n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| PyPDFium2Loader | ✅ | ❌ | \n", "\n", - "## Setup\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "| :---: | :---: | :---: | :---: |:---: |\n", + "| PyPDFium2Loader | ✅ | ❌ | ✅ | ❌ |\n", "\n", + " \n", "\n", - "To access PyPDFium2 document loader you'll need to install the `langchain-community` integration package.\n", + "## Setup\n", "\n", "### Credentials\n", "\n", - "No credentials are needed." + "No credentials are required to use `PyPDFium2Loader`." ] }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" - ] + "source": "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T08:02:55.487973Z", + "start_time": "2024-12-16T08:02:55.483975Z" + } + }, "outputs": [], "source": [ "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", @@ -58,12 +65,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%pip install -qU langchain_community" - ] + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2024-12-16T08:03:00.023615Z", + "start_time": "2024-12-16T08:02:56.930343Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": "%pip install -qU langchain_community pypdfium2" }, { "cell_type": "markdown", @@ -76,32 +95,115 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:09.656487Z", + "start_time": "2025-01-02T09:24:09.009982Z" + } + }, "source": [ "from langchain_community.document_loaders import PyPDFium2Loader\n", "\n", "file_path = \"./example_data/layout-parser-paper.pdf\"\n", "loader = PyPDFium2Loader(file_path)" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", "metadata": {}, + "source": "## Load" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:11.817958Z", + "start_time": "2025-01-02T09:24:11.736757Z" + } + }, "source": [ - "## Load" - ] + "docs = loader.load()\n", + "docs[0]" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'title': '', 'author': '', 'subject': '', 'keywords': '', 'creator': 'LaTeX with hyperref', 'producer': 'pdfTeX-1.40.21', 'creationdate': '2021-06-22T01:27:10+00:00', 'moddate': '2021-06-22T01:27:10+00:00', 'source': './example_data/layout-parser-paper.pdf', 'total_pages': 16, 'page': 0}, page_content='LayoutParser: A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen\\n1\\n(), Ruochen Zhang\\n2\\n, Melissa Dell\\n3\\n, Benjamin Charles Germain\\nLee\\n4\\n, Jacob Carlson\\n3\\n, and Weining Li\\n5\\n1 Allen Institute for AI\\nshannons@allenai.org 2 Brown University\\nruochen zhang@brown.edu 3 Harvard University\\n{melissadell,jacob carlson\\n}@fas.harvard.edu\\n4 University of Washington\\nbcgl@cs.washington.edu 5 University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im\\x02portant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser, an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica\\x02tions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de\\x02tection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti\\x02zation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io.\\nKeywords: Document Image Analysis· Deep Learning· Layout Analysis\\n· Character Recognition· Open Source library· Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [11,\\narXiv:2103.15348v2 [cs.CV] 21 Jun 2021\\n')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 }, { "cell_type": "code", - "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:12.998289Z", + "start_time": "2025-01-02T09:24:12.994170Z" + } + }, + "source": [ + "import pprint\n", + "\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 3 + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "## Lazy Load\n" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:14.932124Z", + "start_time": "2025-01-02T09:24:14.886503Z" + } + }, + "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ], "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'page': 0}, page_content='LayoutParser: A Unified Toolkit for Deep\\r\\nLearning Based Document Image Analysis\\r\\nZejiang Shen\\r\\n1\\r\\n(), Ruochen Zhang\\r\\n2\\r\\n, Melissa Dell\\r\\n3\\r\\n, Benjamin Charles Germain\\r\\nLee\\r\\n4\\r\\n, Jacob Carlson\\r\\n3\\r\\n, and Weining Li\\r\\n5\\r\\n1 Allen Institute for AI\\r\\nshannons@allenai.org 2 Brown University\\r\\nruochen zhang@brown.edu 3 Harvard University\\r\\n{melissadell,jacob carlson}@fas.harvard.edu\\r\\n4 University of Washington\\r\\nbcgl@cs.washington.edu 5 University of Waterloo\\r\\nw422li@uwaterloo.ca\\r\\nAbstract. Recent advances in document image analysis (DIA) have been\\r\\nprimarily driven by the application of neural networks. Ideally, research\\r\\noutcomes could be easily deployed in production and extended for further\\r\\ninvestigation. However, various factors like loosely organized codebases\\r\\nand sophisticated model configurations complicate the easy reuse of im\\x02portant innovations by a wide audience. Though there have been on-going\\r\\nefforts to improve reusability and simplify deep learning (DL) model\\r\\ndevelopment in disciplines like natural language processing and computer\\r\\nvision, none of them are optimized for challenges in the domain of DIA.\\r\\nThis represents a major gap in the existing toolkit, as DIA is central to\\r\\nacademic research across a wide range of disciplines in the social sciences\\r\\nand humanities. This paper introduces LayoutParser, an open-source\\r\\nlibrary for streamlining the usage of DL in DIA research and applica\\x02tions. The core LayoutParser library comes with a set of simple and\\r\\nintuitive interfaces for applying and customizing DL models for layout de\\x02tection, character recognition, and many other document processing tasks.\\r\\nTo promote extensibility, LayoutParser also incorporates a community\\r\\nplatform for sharing both pre-trained models and full document digiti\\x02zation pipelines. We demonstrate that LayoutParser is helpful for both\\r\\nlightweight and large-scale digitization pipelines in real-word use cases.\\r\\nThe library is publicly available at https://layout-parser.github.io.\\r\\nKeywords: Document Image Analysis· Deep Learning· Layout Analysis\\r\\n· Character Recognition· Open Source library· Toolkit.\\r\\n1 Introduction\\r\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\r\\ndocument image analysis (DIA) tasks including document image classification [11,\\r\\narXiv:2103.15348v2 [cs.CV] 21 Jun 2021\\n')" + "6" ] }, "execution_count": 4, @@ -109,49 +211,871 @@ "output_type": "execute_result" } ], + "execution_count": 4 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:15.990539Z", + "start_time": "2025-01-02T09:24:15.987157Z" + } + }, "source": [ - "docs = loader.load()\n", - "docs[0]" + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for DL-Based DIA 11\n", + "focuses on precision, efficiency, and robustness\n", + "{'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 10}\n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata attribute contains the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", + "\n", + "Other metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Splitting mode & custom pages delimiter" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", + "\n", + "By default PyPDFium2Loader will split the PDF by page." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:20.242417Z", + "start_time": "2025-01-02T09:24:20.192440Z" + } + }, + "source": [ + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "{'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the whole PDF as a single langchain Document object:" + }, { "cell_type": "code", - "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:23.171890Z", + "start_time": "2025-01-02T09:24:23.124212Z" + } + }, + "source": [ + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "{'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16}\n" + ] + } + ], + "execution_count": 7 + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:26.662976Z", + "start_time": "2025-01-02T09:24:26.599741Z" + } + }, + "source": [ + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': './example_data/layout-parser-paper.pdf', 'page': 0}\n" + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen\n", + "1\n", + "(), Ruochen Zhang\n", + "2\n", + ", Melissa Dell\n", + "3\n", + ", Benjamin Charles Germain\n", + "Lee\n", + "4\n", + ", Jacob Carlson\n", + "3\n", + ", and Weining Li\n", + "5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org 2 Brown University\n", + "ruochen zhang@brown.edu 3 Harvard University\n", + "{melissadell,jacob carlson\n", + "}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu 5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im\u0002portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica\u0002tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de\u0002tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti\u0002zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: Document Image Analysis· Deep Learning· Layout Analysis\n", + "· Character Recognition· Open Source library· Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "2 Z. Shen et al.\n", + "37], layout detection [38, 22], table detection [26], and scene text detection [4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manual specification of complicated rules, which is the status quo with traditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "However, there are several practical difficulties for taking advantages of re\u0002cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame\u0002works like TensorFlow [1] or PyTorch [24], and the high-level parameters can\n", + "be obfuscated by implementation details [8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "models and other processing to obtain the final outputs. Often research teams use\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel.\n", + "LayoutParser provides a unified toolkit to support DL-based document image\n", + "analysis and processing. To address the aforementioned challenges, LayoutParser\n", + "is built with the following components:\n", + "1. An off-the-shelf toolkit for applying DL models for layout detection, character\n", + "recognition, and other DIA tasks (Section 3)\n", + "2. A rich repository of pre-trained neural network models (Model Zoo) that\n", + "underlies the off-the-shelf usage\n", + "3. Comprehensive tools for efficient document image data annotation and model\n", + "tuning to support different levels of customization\n", + "4. A DL model hub and community platform for the easy sharing, distribu\u0002tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [8, 34] and com\u0002puter vision [35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParser can be applied in sophisticated and large-scale digitization projects\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "LayoutParser: A Unified Toolkit for DL-Based DIA 3\n", + "that require precision, efficiency, and robustness, as well as \n" ] } ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "# Extract images from the PDF" + }, + { + "cell_type": "markdown", + "metadata": {}, "source": [ - "print(docs[0].metadata)" + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", + "\n", + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with rapidOCR:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:31.475890Z", + "start_time": "2025-01-02T09:24:30.089966Z" + } + }, + "source": [ + "%pip install -qU rapidocr-onnxruntime" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:24:58.829870Z", + "start_time": "2025-01-02T09:24:33.766674Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co\u0002ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\"Coordinate\n",\n", + "\n" + ] + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Extract images from the PDF with tesseract:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:25:05.591245Z", + "start_time": "2025-01-02T09:25:04.135945Z" + } + }, + "source": [ + "%pip install -qU pytesseract" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 11 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:25:16.388695Z", + "start_time": "2025-01-02T09:25:06.035472Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co\u0002ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "Coordinate\n", + "\n", + "textblock\n", + "\n", + "x-interval\n", + "\n", + "JeAsaqui-A\n", + "\n", + "Coordinate\n", + "+\n", + "\n", + "Extra features\n", + "\n", + "Rectangle\n", + "\n", + "Quadrilateral\n", + "\n", + "Block\n", + "Text\n", + "\n", + "Block\n", + "Type\n", + "\n", + "Reading\n", + "Order\n", + "\n", + "layout\n", + "\n", + "[ coordinatel1 textblock1 |\n", + "'\n", + "\n", + "“y textblock2 , layout1 ]\n", + "\n", + "A list of the layout elements\n", + "\n", + "The same transformation and operation APIs\n", + "\n" + ] + } + ], + "execution_count": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with multimodal model:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:25:19.497565Z", + "start_time": "2025-01-02T09:25:18.013770Z" + } + }, + "source": [ + "%pip install -qU langchain_openai" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:25:20.285437Z", + "start_time": "2025-01-02T09:25:20.261378Z" + } + }, + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:25:21.333926Z", + "start_time": "2025-01-02T09:25:21.329340Z" + } + }, + "source": [ + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ], + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:26:04.832705Z", + "start_time": "2025-01-02T09:25:23.449365Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "loader = PyPDFium2Loader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co\u0002ordinate information and extra features like block text, types, and reading orders;\n", + "a Layout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser. There are three key components in the data structure, namely\n", + "the Coordinate system, the TextBlock, and the Layout. They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "![**Image Summary:**\n", + "\n", + "Diagram illustrating layout elements in a document processing framework, showing three main components: \"Coordinate,\" \"textblock,\" and \"layout.\" Each component includes visual representations and descriptions. The image explains how coordinates define shapes like rectangles and quadrilaterals, how textblocks combine coordinates with extra features, and how layouts consist of lists of these elements. The same transformation and operation APIs are applicable across components.\n", + "\n", + "**Extracted Text:**\n", + "\n", + "- Coordinate\n", + "- Coordinate\n", + "- x-interval\n", + "- y-interval\n", + "- start\n", + "- start\n", + "- end\n", + "- end\n", + "- Rectangle\n", + "- Quadrilateral\n", + "- (x1, y1)\n", + "- (x2, y2)\n", + "- (x3, y3)\n", + "- (x4, y4)\n", + "- textblock\n", + "- Coordinate\n", + "- + \n", + "- Extra features\n", + "- Block Text\n", + "- Block Type\n", + "- Reading Order\n", + "- layout\n", + "- [coordinate1, textblock1, ...\n", + "- ..., textblock2, layout1\\\\]\n", + "- A list of the layout elements\n", + "- The same transformation and operation APIs](.)\n", + "\n" + ] + } + ], + "execution_count": 16 + }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Lazy Load" + "## Working with Files\n", + "\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", + "\n", + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." ] }, { "cell_type": "code", - "execution_count": 6, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:26:06.811176Z", + "start_time": "2025-01-02T09:26:06.756357Z" + } + }, + "source": [ + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "from langchain_community.document_loaders.parsers import PyPDFium2Parser\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyPDFium2Parser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser: A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen\n", + "1\n", + "(), Ruochen Zhang\n", + "2\n", + ", Melissa Dell\n", + "3\n", + ", Benjamin Charles Germain\n", + "Lee\n", + "4\n", + ", Jacob Carlson\n", + "3\n", + ", and Weining Li\n", + "5\n", + "1 Allen Institute for AI\n", + "shannons@allenai.org 2 Brown University\n", + "ruochen zhang@brown.edu 3 Harvard University\n", + "{melissadell,jacob carlson\n", + "}@fas.harvard.edu\n", + "4 University of Washington\n", + "bcgl@cs.washington.edu 5 University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im\u0002portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser, an open-source\n", + "library for streamlining the usage of DL in DIA research and applica\u0002tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de\u0002tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti\u0002zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io.\n", + "Keywords: Document Image Analysis· Deep Learning· Layout Analysis\n", + "· Character Recognition· Open Source library· Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [11,\n", + "arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "\n", + "{'title': '',\n", + " 'author': '',\n", + " 'subject': '',\n", + " 'keywords': '',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'source': 'example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "It is possible to work with files from cloud storage." + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "page = []\n", - "for doc in loader.lazy_load():\n", - " page.append(doc)\n", - " if len(page) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", "\n", - " page = []" + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyPDFium2Parser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" ] }, { @@ -160,7 +1084,7 @@ "source": [ "## API reference\n", "\n", - "For detailed documentation of all PyPDFium2Loader features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFium2Loader.html" + "For detailed documentation of all `PyPDFium2Loader` features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFium2Loader.html" ] } ], diff --git a/docs/docs/integrations/document_loaders/pypdfloader.ipynb b/docs/docs/integrations/document_loaders/pypdfloader.ipynb index b0cc79d92de87..8dc2eca23feed 100644 --- a/docs/docs/integrations/document_loaders/pypdfloader.ipynb +++ b/docs/docs/integrations/document_loaders/pypdfloader.ipynb @@ -8,18 +8,24 @@ "\n", "This notebook provides a quick overview for getting started with `PyPDF` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all DocumentLoader features and configurations head to the [API reference](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFLoader.html).\n", "\n", + " \n", "\n", "## Overview\n", "### Integration details\n", "\n", - "\n", "| Class | Package | Local | Serializable | JS support|\n", "| :--- | :--- | :---: | :---: | :---: |\n", - "| [PyPDFLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + "| [PyPDFLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.PyPDFLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ❌ | \n", + " \n", + "--------- \n", + "\n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| PyPDFLoader | ✅ | ❌ | \n", + "\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "|:-----------:| :---: | :---: | :---: |:---: |\n", + "| PyPDFLoader | ✅ | ❌ | ✅ | ❌ |\n", + "\n", + " \n", "\n", "## Setup\n", "\n", @@ -28,23 +34,36 @@ "No credentials are required to use `PyPDFLoader`." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", + "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" + ], + "outputs": [], + "execution_count": null + }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Installation\n", "\n", - "To use `PyPDFLoader` you need to have the `langchain-community` python package downloaded:" + "Install **langchain_community** and **pypdf**." ] }, { "cell_type": "code", - "execution_count": null, "metadata": {}, + "source": "%pip install -qU langchain_community pypdf", "outputs": [], - "source": [ - "%pip install -qU langchain_community pypdf" - ] + "execution_count": null }, { "cell_type": "markdown", @@ -57,16 +76,20 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:57:51.358924Z", + "start_time": "2025-01-02T08:57:50.664475Z" + } + }, "source": [ "from langchain_community.document_loaders import PyPDFLoader\n", "\n", - "loader = PyPDFLoader(\n", - " \"./example_data/layout-parser-paper.pdf\",\n", - ")" - ] + "file_path = \"./example_data/layout-parser-paper.pdf\"\n", + "loader = PyPDFLoader(file_path)" + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "markdown", @@ -77,13 +100,21 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:57:53.360193Z", + "start_time": "2025-01-02T08:57:53.046951Z" + } + }, + "source": [ + "docs = loader.load()\n", + "docs[0]" + ], "outputs": [ { "data": { "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'page': 0}, page_content='LayoutParser : A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1( \\x00), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1Allen Institute for AI\\nshannons@allenai.org\\n2Brown University\\nruochen zhang@brown.edu\\n3Harvard University\\n{melissadell,jacob carlson }@fas.harvard.edu\\n4University of Washington\\nbcgl@cs.washington.edu\\n5University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser , an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io .\\nKeywords: Document Image Analysis ·Deep Learning ·Layout Analysis\\n·Character Recognition ·Open Source library ·Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021')" + "Document(metadata={'author': '', 'creationdate': '2021-06-22T01:27:10+00:00', 'creator': 'LaTeX with hyperref', 'keywords': '', 'moddate': '2021-06-22T01:27:10+00:00', 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live 2020) kpathsea version 6.3.2', 'producer': 'pdfTeX-1.40.21', 'subject': '', 'title': '', 'trapped': '/False', 'source': './example_data/layout-parser-paper.pdf', 'total_pages': 16, 'page': 0}, page_content='LayoutParser : A Unified Toolkit for Deep\\nLearning Based Document Image Analysis\\nZejiang Shen1( \\x00), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\\nLee4, Jacob Carlson3, and Weining Li5\\n1Allen Institute for AI\\nshannons@allenai.org\\n2Brown University\\nruochen zhang@brown.edu\\n3Harvard University\\n{melissadell,jacob carlson }@fas.harvard.edu\\n4University of Washington\\nbcgl@cs.washington.edu\\n5University of Waterloo\\nw422li@uwaterloo.ca\\nAbstract. Recent advances in document image analysis (DIA) have been\\nprimarily driven by the application of neural networks. Ideally, research\\noutcomes could be easily deployed in production and extended for further\\ninvestigation. However, various factors like loosely organized codebases\\nand sophisticated model configurations complicate the easy reuse of im-\\nportant innovations by a wide audience. Though there have been on-going\\nefforts to improve reusability and simplify deep learning (DL) model\\ndevelopment in disciplines like natural language processing and computer\\nvision, none of them are optimized for challenges in the domain of DIA.\\nThis represents a major gap in the existing toolkit, as DIA is central to\\nacademic research across a wide range of disciplines in the social sciences\\nand humanities. This paper introduces LayoutParser , an open-source\\nlibrary for streamlining the usage of DL in DIA research and applica-\\ntions. The core LayoutParser library comes with a set of simple and\\nintuitive interfaces for applying and customizing DL models for layout de-\\ntection, character recognition, and many other document processing tasks.\\nTo promote extensibility, LayoutParser also incorporates a community\\nplatform for sharing both pre-trained models and full document digiti-\\nzation pipelines. We demonstrate that LayoutParser is helpful for both\\nlightweight and large-scale digitization pipelines in real-word use cases.\\nThe library is publicly available at https://layout-parser.github.io .\\nKeywords: Document Image Analysis ·Deep Learning ·Layout Analysis\\n·Character Recognition ·Open Source library ·Toolkit.\\n1 Introduction\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of\\ndocument image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021')" ] }, "execution_count": 2, @@ -91,27 +122,44 @@ "output_type": "execute_result" } ], - "source": [ - "docs = loader.load()\n", - "docs[0]" - ] + "execution_count": 2 }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:57:54.433578Z", + "start_time": "2025-01-02T08:57:54.428990Z" + } + }, + "source": [ + "import pprint\n", + "\n", + "pprint.pp(docs[0].metadata)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'source': './example_data/layout-parser-paper.pdf', 'page': 0}\n" + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': '/False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" ] } ], - "source": [ - "print(docs[0].metadata)" - ] + "execution_count": 3 }, { "cell_type": "markdown", @@ -122,8 +170,23 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:57:56.406339Z", + "start_time": "2025-01-02T08:57:56.083505Z" + } + }, + "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ], "outputs": [ { "data": { @@ -136,38 +199,870 @@ "output_type": "execute_result" } ], + "execution_count": 4 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:57:57.168112Z", + "start_time": "2025-01-02T08:57:57.164745Z" + } + }, "source": [ - "pages = []\n", - "for doc in loader.lazy_load():\n", - " pages.append(doc)\n", - " if len(pages) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser : A Unified Toolkit for DL-Based DIA 11\n", + "focuses on precision, efficiency, and robustness. \n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': '/False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 10}\n" + ] + } + ], + "execution_count": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The metadata attribute contains at least the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", "\n", - " pages = []\n", - "len(pages)" + "Additional metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "## Splitting mode & custom pages delimiter" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", + "\n", + "By default PyPDFLoader will split the PDF as a single text flow." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + }, { "cell_type": "code", - "execution_count": 5, + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:01.305246Z", + "start_time": "2025-01-02T08:58:01.068932Z" + } + }, + "source": [ + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': '/False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 6 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + }, + { + "cell_type": "markdown", "metadata": {}, + "source": "### Extract the whole PDF as a single langchain Document object:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:04.529532Z", + "start_time": "2025-01-02T08:58:04.241743Z" + } + }, + "source": [ + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" + ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "LayoutParser : A Unified Toolkit for DL-Based DIA 11\n", - "focuses on precision, efficiency, and robustness. \n", - "{'source': './example_data/layout-parser-paper.pdf', 'page': 10}\n" + "1\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': '/False',\n", + " 'source': './example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16}\n" ] } ], + "execution_count": 7 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:06.894917Z", + "start_time": "2025-01-02T08:58:06.612625Z" + } + }, "source": [ - "print(pages[0].page_content[:100])\n", - "print(pages[0].metadata)" + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser : A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1( \u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1Allen Institute for AI\n", + "shannons@allenai.org\n", + "2Brown University\n", + "ruochen zhang@brown.edu\n", + "3Harvard University\n", + "{melissadell,jacob carlson }@fas.harvard.edu\n", + "4University of Washington\n", + "bcgl@cs.washington.edu\n", + "5University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser , an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io .\n", + "Keywords: Document Image Analysis ·Deep Learning ·Layout Analysis\n", + "·Character Recognition ·Open Source library ·Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "2 Z. Shen et al.\n", + "37], layout detection [ 38,22], table detection [ 26], and scene text detection [ 4].\n", + "A generalized learning-based framework dramatically reduces the need for the\n", + "manual specification of complicated rules, which is the status quo with traditional\n", + "methods. DL has the potential to transform DIA pipelines and benefit a broad\n", + "spectrum of large-scale document digitization projects.\n", + "However, there are several practical difficulties for taking advantages of re-\n", + "cent advances in DL-based methods: 1) DL models are notoriously convoluted\n", + "for reuse and extension. Existing models are developed using distinct frame-\n", + "works like TensorFlow [ 1] or PyTorch [ 24], and the high-level parameters can\n", + "be obfuscated by implementation details [ 8]. It can be a time-consuming and\n", + "frustrating experience to debug, reproduce, and adapt existing models for DIA,\n", + "and many researchers who would benefit the most from using these methods lack\n", + "the technical background to implement them from scratch. 2) Document images\n", + "contain diverse and disparate patterns across domains, and customized training\n", + "is often required to achieve a desirable detection accuracy. Currently there is no\n", + "full-fledged infrastructure for easily curating the target document image datasets\n", + "and fine-tuning or re-training the models. 3) DIA usually requires a sequence of\n", + "models and other processing to obtain the final outputs. Often research teams use\n", + "DL models and then perform further document analyses in separate processes,\n", + "and these pipelines are not documented in any central location (and often not\n", + "documented at all). This makes it difficult for research teams to learn about how\n", + "full pipelines are implemented and leads them to invest significant resources in\n", + "reinventing the DIA wheel .\n", + "LayoutParser provides a unified toolkit to support DL-based document image\n", + "analysis and processing. To address the aforementioned challenges, LayoutParser\n", + "is built with the following components:\n", + "1.An off-the-shelf toolkit for applying DL models for layout detection, character\n", + "recognition, and other DIA tasks (Section 3)\n", + "2.A rich repository of pre-trained neural network models (Model Zoo) that\n", + "underlies the off-the-shelf usage\n", + "3.Comprehensive tools for efficient document image data annotation and model\n", + "tuning to support different levels of customization\n", + "4.A DL model hub and community platform for the easy sharing, distribu-\n", + "tion, and discussion of DIA models and pipelines, to promote reusability,\n", + "reproducibility, and extensibility (Section 4)\n", + "The library implements simple and intuitive Python APIs without sacrificing\n", + "generalizability and versatility, and can be easily installed via pip. Its convenient\n", + "functions for handling document image data can be seamlessly integrated with\n", + "existing DIA pipelines. With detailed documentations and carefully curated\n", + "tutorials, we hope this tool will benefit a variety of end-users, and will lead to\n", + "advances in applications in both industry and academic research.\n", + "LayoutParser is well aligned with recent efforts for improving DL model\n", + "reusability in other disciplines like natural language processing [ 8,34] and com-\n", + "puter vision [ 35], but with a focus on unique challenges in DIA. We show\n", + "LayoutParser can be applied in sophisticated and large-scale digitization projects\n", + "-------THIS IS A CUSTOM END OF PAGE-------\n", + "LayoutParser : A Unified Toolkit for DL-Based DIA 3\n", + "that require precision, efficiency, and robustness, as well as simple and light-\n", + "weight \n" + ] + } + ], + "execution_count": 8 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "# Extract images from the PDF" + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", + "\n", + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with rapidOCR:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:11.700687Z", + "start_time": "2025-01-02T08:58:10.340863Z" + } + }, + "source": [ + "%pip install -qU rapidocr-onnxruntime" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 9 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:39.423289Z", + "start_time": "2025-01-02T08:58:16.965226Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", + "\n", + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "aLayout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser . There are three key components in the data structure, namely\n", + "theCoordinate system, the TextBlock , and the Layout . They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "\"Coordinate\n",\n" + ] + } + ], + "execution_count": 10 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with Tesseract:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:43.775946Z", + "start_time": "2025-01-02T08:58:42.336954Z" + } + }, + "source": [ + "%pip install -qU pytesseract" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 11 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:58:59.618970Z", + "start_time": "2025-01-02T08:58:49.364242Z" + } + }, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "aLayout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser . There are three key components in the data structure, namely\n", + "theCoordinate system, the TextBlock , and the Layout . They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "Coordinate\n", + "\n", + "textblock\n", + "\n", + "x-interval\n", + "\n", + "JeAsaqui-A\n", + "\n", + "Coordinate\n", + "+\n", + "\n", + "Extra features\n", + "\n", + "Rectangle\n", + "\n", + "Quadrilateral\n", + "\n", + "Block\n", + "Text\n", + "\n", + "Block\n", + "Type\n", + "\n", + "Reading\n", + "Order\n", + "\n", + "layout\n", + "\n", + "[ coordinate1 textblock1 |\n", + "'\n", + "\n", + "“y textblock2 , layout1 ]\n", + "\n", + "A list of the layout elements\n", + "\n", + "The same transformation and operation APIs\n" + ] + } + ], + "execution_count": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "### Extract images from the PDF with multimodal model:" + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:59:03.250256Z", + "start_time": "2025-01-02T08:59:01.833376Z" + } + }, + "source": [ + "%pip install -qU langchain_openai" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "execution_count": 13 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:59:03.400821Z", + "start_time": "2025-01-02T08:59:03.373435Z" + } + }, + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" + ], + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 14 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T08:59:21.919330Z", + "start_time": "2025-01-02T08:59:21.916097Z" + } + }, + "source": [ + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ], + "outputs": [], + "execution_count": 15 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:00:29.136755Z", + "start_time": "2025-01-02T08:59:27.838056Z" + } + }, + "source": [ + "from langchain_openai import ChatOpenAI\n", + "\n", + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "\n", + "loader = PyPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6 Z. Shen et al.\n", + "Fig. 2: The relationship between the three types of layout data structures.\n", + "Coordinate supports three kinds of variation; TextBlock consists of the co-\n", + "ordinate information and extra features like block text, types, and reading orders;\n", + "aLayout object is a list of all possible layout elements, including other Layout\n", + "objects. They all support the same set of transformation and operation APIs for\n", + "maximum flexibility.\n", + "Shown in Table 1, LayoutParser currently hosts 9 pre-trained models trained\n", + "on 5 different datasets. Description of the training dataset is provided alongside\n", + "with the trained models such that users can quickly identify the most suitable\n", + "models for their tasks. Additionally, when such a model is not readily available,\n", + "LayoutParser also supports training customized layout models and community\n", + "sharing of the models (detailed in Section 3.5).\n", + "3.2 Layout Data Structures\n", + "A critical feature of LayoutParser is the implementation of a series of data\n", + "structures and operations that can be used to efficiently process and manipulate\n", + "the layout elements. In document image analysis pipelines, various post-processing\n", + "on the layout analysis model outputs is usually required to obtain the final\n", + "outputs. Traditionally, this requires exporting DL model outputs and then loading\n", + "the results into other pipelines. All model outputs from LayoutParser will be\n", + "stored in carefully engineered data types optimized for further processing, which\n", + "makes it possible to build an end-to-end document digitization pipeline within\n", + "LayoutParser . There are three key components in the data structure, namely\n", + "theCoordinate system, the TextBlock , and the Layout . They provide different\n", + "levels of abstraction for the layout data, and a set of APIs are supported for\n", + "transformations or operations on these classes.\n", + "\n", + "\n", + "\n", + "![Summary: The image illustrates a layout processing system involving coordinates, text blocks, and layouts. It shows how geometric shapes like rectangles and quadrilaterals are defined using coordinates and intervals. Text blocks combine these coordinates with additional features such as block text, block type, and reading order. Finally, a layout is depicted as a list of these elements. The right side notes that the same transformation and operation APIs apply.\n", + "\n", + "Extracted Text:\n", + "- Coordinate\n", + "- start\n", + "- end\n", + "- x-interval\n", + "- y-interval\n", + "- Rectangle\n", + "- Quadrilateral\n", + "- textblock\n", + "- Coordinate\n", + "- Extra features\n", + "- Block Text\n", + "- Block Type\n", + "- Reading Order\n", + "- layout\n", + "- coordinate1\n", + "- textblock1\n", + "- textblock2\n", + "- layout1\n", + "- A list of the layout elements\n", + "- The same transformation and operation APIs](.)\n" + ] + } + ], + "execution_count": 16 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with Files\n", + "\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", + "\n", + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." ] }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2025-01-02T09:00:37.080458Z", + "start_time": "2025-01-02T09:00:36.795081Z" + } + }, + "source": [ + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "from langchain_community.document_loaders.parsers import PyPDFParser\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyPDFParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LayoutParser : A Unified Toolkit for Deep\n", + "Learning Based Document Image Analysis\n", + "Zejiang Shen1( \u0000), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain\n", + "Lee4, Jacob Carlson3, and Weining Li5\n", + "1Allen Institute for AI\n", + "shannons@allenai.org\n", + "2Brown University\n", + "ruochen zhang@brown.edu\n", + "3Harvard University\n", + "{melissadell,jacob carlson }@fas.harvard.edu\n", + "4University of Washington\n", + "bcgl@cs.washington.edu\n", + "5University of Waterloo\n", + "w422li@uwaterloo.ca\n", + "Abstract. Recent advances in document image analysis (DIA) have been\n", + "primarily driven by the application of neural networks. Ideally, research\n", + "outcomes could be easily deployed in production and extended for further\n", + "investigation. However, various factors like loosely organized codebases\n", + "and sophisticated model configurations complicate the easy reuse of im-\n", + "portant innovations by a wide audience. Though there have been on-going\n", + "efforts to improve reusability and simplify deep learning (DL) model\n", + "development in disciplines like natural language processing and computer\n", + "vision, none of them are optimized for challenges in the domain of DIA.\n", + "This represents a major gap in the existing toolkit, as DIA is central to\n", + "academic research across a wide range of disciplines in the social sciences\n", + "and humanities. This paper introduces LayoutParser , an open-source\n", + "library for streamlining the usage of DL in DIA research and applica-\n", + "tions. The core LayoutParser library comes with a set of simple and\n", + "intuitive interfaces for applying and customizing DL models for layout de-\n", + "tection, character recognition, and many other document processing tasks.\n", + "To promote extensibility, LayoutParser also incorporates a community\n", + "platform for sharing both pre-trained models and full document digiti-\n", + "zation pipelines. We demonstrate that LayoutParser is helpful for both\n", + "lightweight and large-scale digitization pipelines in real-word use cases.\n", + "The library is publicly available at https://layout-parser.github.io .\n", + "Keywords: Document Image Analysis ·Deep Learning ·Layout Analysis\n", + "·Character Recognition ·Open Source library ·Toolkit.\n", + "1 Introduction\n", + "Deep Learning(DL)-based approaches are the state-of-the-art for a wide range of\n", + "document image analysis (DIA) tasks including document image classification [ 11,arXiv:2103.15348v2 [cs.CV] 21 Jun 2021\n", + "{'author': '',\n", + " 'creationdate': '2021-06-22T01:27:10+00:00',\n", + " 'creator': 'LaTeX with hyperref',\n", + " 'keywords': '',\n", + " 'moddate': '2021-06-22T01:27:10+00:00',\n", + " 'ptex.fullbanner': 'This is pdfTeX, Version 3.14159265-2.6-1.40.21 (TeX Live '\n", + " '2020) kpathsea version 6.3.2',\n", + " 'producer': 'pdfTeX-1.40.21',\n", + " 'subject': '',\n", + " 'title': '',\n", + " 'trapped': '/False',\n", + " 'source': 'example_data/layout-parser-paper.pdf',\n", + " 'total_pages': 16,\n", + " 'page': 0}\n" + ] + } + ], + "execution_count": 17 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": "It is possible to work with files from cloud storage." + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=PyPDFParser(),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ], + "outputs": [], + "execution_count": null + }, { "cell_type": "markdown", "metadata": {}, diff --git a/docs/docs/integrations/document_loaders/unstructured_pdfloader.ipynb b/docs/docs/integrations/document_loaders/unstructured_pdfloader.ipynb index 546e09674cff2..e6dfb1d1a2c22 100644 --- a/docs/docs/integrations/document_loaders/unstructured_pdfloader.ipynb +++ b/docs/docs/integrations/document_loaders/unstructured_pdfloader.ipynb @@ -1,263 +1,601 @@ { "cells": [ { - "cell_type": "markdown", "metadata": {}, + "cell_type": "markdown", "source": [ "# UnstructuredPDFLoader\n", "\n", - "## Overview\n", + "[Unstructured](https://unstructured-io.github.io/unstructured/) supports a common interface for working with unstructured or semi-structured file formats, such as Markdown or PDF. LangChain's [UnstructuredPDFLoader](https://python.langchain.com/api_reference/unstructured/document_loaders/langchain_unstructured.UnstructuredPDFLoader.html) integrates with Unstructured to parse PDF documents into LangChain [Document](https://python.langchain.com/api_reference/core/documents/langchain_core.documents.base.Document.html) objects.\n", "\n", - "[Unstructured](https://unstructured-io.github.io/unstructured/) supports a common interface for working with unstructured or semi-structured file formats, such as Markdown or PDF. LangChain's [UnstructuredPDFLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.UnstructuredPDFLoader.html) integrates with Unstructured to parse PDF documents into LangChain [Document](https://python.langchain.com/api_reference/core/documents/langchain_core.documents.base.Document.html) objects.\n", + "Please see [this page](https://python.langchain.com/docs/integrations/providers/unstructured/) for more information on installing system requirements.\n", "\n", - "Please see [this page](/docs/integrations/providers/unstructured/) for more information on installing system requirements.\n", + "This notebook provides a quick overview for getting started with `Unstructured` [document loader](https://python.langchain.com/docs/concepts/document_loaders). For detailed documentation of all __ModuleName__Loader features and configurations head to the [API reference](https://python.langchain.com/api_reference/unstructured/document_loaders/langchain_unstructured.document_loaders.UnstructuredPDFLoader.html).\n", "\n", + " \n", "\n", + "## Overview\n", "### Integration details\n", "\n", + "| Class | Package | Local | Serializable | JS support|\n", + "|:-----------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------| :---: | :---: | :---: |\n", + "| [UnstructuredPDFLoader](https://python.langchain.com/api_reference/unstructured/document_loaders/langchain_unstructured.document_loaders.UnstructuredPDFLoader.html) | [langchain_unstructured](https://python.langchain.com/api_reference/unstructured/index.html) | ✅ | ❌ | ❌ |\n", + "\n", + "--------- \n", "\n", - "| Class | Package | Local | Serializable | [JS support](https://js.langchain.com/docs/integrations/document_loaders/file_loaders/unstructured/)|\n", - "| :--- | :--- | :---: | :---: | :---: |\n", - "| [UnstructuredPDFLoader](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.UnstructuredPDFLoader.html) | [langchain_community](https://python.langchain.com/api_reference/community/index.html) | ✅ | ❌ | ✅ | \n", "### Loader features\n", - "| Source | Document Lazy Loading | Native Async Support\n", - "| :---: | :---: | :---: | \n", - "| UnstructuredPDFLoader | ✅ | ❌ | \n", + "\n", + "| Source | Document Lazy Loading | Native Async Support | Extract Images | Extract Tables |\n", + "|:---------------------:| :---: | :---: | :---: |:---: |\n", + "| UnstructuredPDFLoader | ✅ | ❌ | ✅ | ✅ |\n", + "\n", + " \n", "\n", "## Setup\n", "\n", "### Credentials\n", "\n", - "No credentials are needed to use this loader." + "No credentials are required to use UnstructuredPDFLoader" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", + "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" + ] + }, + { "metadata": {}, + "cell_type": "markdown", "source": [ - "If you want to get automated best in-class tracing of your model calls you can also set your [LangSmith](https://docs.smith.langchain.com/) API key by uncommenting below:" + "### Installation\n", + "\n", + "Install **langchain_unstructured**." ] }, { + "metadata": {}, "cell_type": "code", + "outputs": [], "execution_count": null, + "source": "%pip install -qU langchain_unstructured" + }, + { "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Initialization\n", + "\n", + "Now we can instantiate our model object and load documents:" + ] + }, + { + "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ - "# os.environ[\"LANGSMITH_API_KEY\"] = getpass.getpass(\"Enter your LangSmith API key: \")\n", - "# os.environ[\"LANGSMITH_TRACING\"] = \"true\"" + "from langchain_unstructured.document_loaders import UnstructuredPDFLoader\n", + "\n", + "STRATEGY = \"fast\"\n", + "file_path = \"./example_data/layout-parser-paper.pdf\"\n", + "loader = UnstructuredPDFLoader(file_path, strategy=STRATEGY)" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "## Load" + }, + { "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "### Installation\n", + "docs = loader.load()\n", + "docs[0]" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "import pprint\n", "\n", - "Install **langchain_community** and **unstructured**." + "pprint.pp(docs[0].metadata)" ] }, { + "metadata": {}, + "cell_type": "markdown", + "source": "## Lazy Load\n" + }, + { + "metadata": {}, "cell_type": "code", + "outputs": [], "execution_count": null, + "source": [ + "pages = []\n", + "for doc in loader.lazy_load():\n", + " pages.append(doc)\n", + " if len(pages) >= 10:\n", + " # do some paged operation, e.g.\n", + " # index.upsert(page)\n", + "\n", + " pages = []\n", + "len(pages)" + ] + }, + { "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ - "%pip install -qU langchain-community unstructured" + "print(pages[0].page_content[:100])\n", + "pprint.pp(pages[0].metadata)" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": [ + "The metadata attribute contains at least the following keys:\n", + "- source\n", + "- page (if in mode *page*)\n", + "- total_page\n", + "- creationdate\n", + "- creator\n", + "- producer\n", + "\n", + "Additional metadata are specific to each parser.\n", + "These pieces of information can be helpful (to categorize your PDFs for example)." + ] + }, + { "metadata": {}, + "cell_type": "markdown", "source": [ - "## Initialization\n", + "### Retain Elements\n", "\n", - "Now we can initialize our loader:" + "Under the hood, Unstructured creates different \"elements\" for different chunks of text. By default we combine those together, but you can easily keep that separation by specifying `mode=\"elements\"`." ] }, { + "metadata": {}, "cell_type": "code", - "execution_count": 3, + "outputs": [], + "execution_count": null, + "source": [ + "file_path = \"./example_data/layout-parser-paper.pdf\"\n", + "loader = UnstructuredPDFLoader(file_path,\n", + " mode=\"elements\",\n", + " strategy=STRATEGY,\n", + " )\n", + "\n", + "data = loader.load()\n", + "data[0]" + ] + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "See the full set of element types for this particular document:" + }, + { "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, + "source": "set(doc.metadata[\"category\"] for doc in data)" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "## Splitting mode & custom pages delimiter" + }, + { + "metadata": {}, + "cell_type": "markdown", "source": [ - "from langchain_community.document_loaders import UnstructuredPDFLoader\n", + "When loading the PDF file you can split it in two different ways:\n", + "- By page\n", + "- As a single text flow\n", "\n", - "file_path = \"./example_data/layout-parser-paper.pdf\"\n", - "loader = UnstructuredPDFLoader(file_path)" + "By default PDFPlumberLoader will split the PDF by page." ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "### Extract the PDF by page. Each page is extracted as a langchain Document object:" + }, + { "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "## Load" + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " strategy=STRATEGY,\n", + ")\n", + "docs = loader.load()\n", + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" ] }, { + "metadata": {}, + "cell_type": "markdown", + "source": "In this mode the pdf is split by pages and the resulting Documents metadata contains the page number. But in some cases we could want to process the pdf as a single text flow (so we don't cut some paragraphs in half). In this case you can use the *single* mode :" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### Extract the whole PDF as a single langchain Document object:" + }, + { + "metadata": {}, "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf'}, page_content='1 2 0 2\\n\\nn u J\\n\\n1 2\\n\\n]\\n\\nV C . s c [\\n\\n2 v 8 4 3 5 1 . 3 0 1 2 : v i X r a\\n\\nLayoutParser: A Unified Toolkit for Deep Learning Based Document Image Analysis\\n\\nZejiang Shen1 ((cid:0)), Ruochen Zhang2, Melissa Dell3, Benjamin Charles Germain Lee4, Jacob Carlson3, and Weining Li5\\n\\n1 Allen Institute for AI shannons@allenai.org 2 Brown University ruochen zhang@brown.edu 3 Harvard University {melissadell,jacob carlson}@fas.harvard.edu 4 University of Washington bcgl@cs.washington.edu 5 University of Waterloo w422li@uwaterloo.ca\\n\\nAbstract. Recent advances in document image analysis (DIA) have been primarily driven by the application of neural networks. Ideally, research outcomes could be easily deployed in production and extended for further investigation. However, various factors like loosely organized codebases and sophisticated model configurations complicate the easy reuse of im- portant innovations by a wide audience. Though there have been on-going efforts to improve reusability and simplify deep learning (DL) model development in disciplines like natural language processing and computer vision, none of them are optimized for challenges in the domain of DIA. This represents a major gap in the existing toolkit, as DIA is central to academic research across a wide range of disciplines in the social sciences and humanities. This paper introduces LayoutParser, an open-source library for streamlining the usage of DL in DIA research and applica- tions. The core LayoutParser library comes with a set of simple and intuitive interfaces for applying and customizing DL models for layout de- tection, character recognition, and many other document processing tasks. To promote extensibility, LayoutParser also incorporates a community platform for sharing both pre-trained models and full document digiti- zation pipelines. We demonstrate that LayoutParser is helpful for both lightweight and large-scale digitization pipelines in real-word use cases. The library is publicly available at https://layout-parser.github.io.\\n\\nKeywords: Document Image Analysis · Deep Learning · Layout Analysis · Character Recognition · Open Source library · Toolkit.\\n\\n1\\n\\nIntroduction\\n\\nDeep Learning(DL)-based approaches are the state-of-the-art for a wide range of document image analysis (DIA) tasks including document image classification [11,\\n\\n2\\n\\nZ. Shen et al.\\n\\n37], layout detection [38, 22], table detection [26], and scene text detection [4]. A generalized learning-based framework dramatically reduces the need for the manual specification of complicated rules, which is the status quo with traditional methods. DL has the potential to transform DIA pipelines and benefit a broad spectrum of large-scale document digitization projects.\\n\\nHowever, there are several practical difficulties for taking advantages of re- cent advances in DL-based methods: 1) DL models are notoriously convoluted for reuse and extension. Existing models are developed using distinct frame- works like TensorFlow [1] or PyTorch [24], and the high-level parameters can be obfuscated by implementation details [8]. It can be a time-consuming and frustrating experience to debug, reproduce, and adapt existing models for DIA, and many researchers who would benefit the most from using these methods lack the technical background to implement them from scratch. 2) Document images contain diverse and disparate patterns across domains, and customized training is often required to achieve a desirable detection accuracy. Currently there is no full-fledged infrastructure for easily curating the target document image datasets and fine-tuning or re-training the models. 3) DIA usually requires a sequence of models and other processing to obtain the final outputs. Often research teams use DL models and then perform further document analyses in separate processes, and these pipelines are not documented in any central location (and often not documented at all). This makes it difficult for research teams to learn about how full pipelines are implemented and leads them to invest significant resources in reinventing the DIA wheel.\\n\\nLayoutParser provides a unified toolkit to support DL-based document image analysis and processing. To address the aforementioned challenges, LayoutParser is built with the following components:\\n\\n1. An off-the-shelf toolkit for applying DL models for layout detection, character recognition, and other DIA tasks (Section 3)\\n\\n2. A rich repository of pre-trained neural network models (Model Zoo) that underlies the off-the-shelf usage\\n\\n3. Comprehensive tools for efficient document image data annotation and model tuning to support different levels of customization\\n\\n4. A DL model hub and community platform for the easy sharing, distribu- tion, and discussion of DIA models and pipelines, to promote reusability, reproducibility, and extensibility (Section 4)\\n\\nThe library implements simple and intuitive Python APIs without sacrificing generalizability and versatility, and can be easily installed via pip. Its convenient functions for handling document image data can be seamlessly integrated with existing DIA pipelines. With detailed documentations and carefully curated tutorials, we hope this tool will benefit a variety of end-users, and will lead to advances in applications in both industry and academic research.\\n\\nLayoutParser is well aligned with recent efforts for improving DL model reusability in other disciplines like natural language processing [8, 34] and com- puter vision [35], but with a focus on unique challenges in DIA. We show LayoutParser can be applied in sophisticated and large-scale digitization projects\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nthat require precision, efficiency, and robustness, as well as simple and light- weight document processing tasks focusing on efficacy and flexibility (Section 5). LayoutParser is being actively maintained, and support for more deep learning models and novel methods in text-based layout analysis methods [37, 34] is planned.\\n\\nThe rest of the paper is organized as follows. Section 2 provides an overview of related work. The core LayoutParser library, DL Model Zoo, and customized model training are described in Section 3, and the DL model hub and commu- nity platform are detailed in Section 4. Section 5 shows two examples of how LayoutParser can be used in practical DIA projects, and Section 6 concludes.\\n\\n2 Related Work\\n\\nRecently, various DL models and datasets have been developed for layout analysis tasks. The dhSegment [22] utilizes fully convolutional networks [20] for segmen- tation tasks on historical documents. Object detection-based methods like Faster R-CNN [28] and Mask R-CNN [12] are used for identifying document elements [38] and detecting tables [30, 26]. Most recently, Graph Neural Networks [29] have also been used in table detection [27]. However, these models are usually implemented individually and there is no unified framework to load and use such models.\\n\\nThere has been a surge of interest in creating open-source tools for document image processing: a search of document image analysis in Github leads to 5M relevant code pieces 6; yet most of them rely on traditional rule-based methods or provide limited functionalities. The closest prior research to our work is the OCR-D project7, which also tries to build a complete toolkit for DIA. However, similar to the platform developed by Neudecker et al. [21], it is designed for analyzing historical documents, and provides no supports for recent DL models. The DocumentLayoutAnalysis project8 focuses on processing born-digital PDF documents via analyzing the stored PDF data. Repositories like DeepLayout9 and Detectron2-PubLayNet10 are individual deep learning models trained on layout analysis datasets without support for the full DIA pipeline. The Document Analysis and Exploitation (DAE) platform [15] and the DeepDIVA project [2] aim to improve the reproducibility of DIA methods (or DL models), yet they are not actively maintained. OCR engines like Tesseract [14], easyOCR11 and paddleOCR12 usually do not come with comprehensive functionalities for other DIA tasks like layout analysis.\\n\\nRecent years have also seen numerous efforts to create libraries for promoting reproducibility and reusability in the field of DL. Libraries like Dectectron2 [35],\\n\\n6 The number shown is obtained by specifying the search type as ‘code’. 7 https://ocr-d.de/en/about 8 https://github.com/BobLd/DocumentLayoutAnalysis 9 https://github.com/leonlulu/DeepLayout 10 https://github.com/hpanwar08/detectron2 11 https://github.com/JaidedAI/EasyOCR 12 https://github.com/PaddlePaddle/PaddleOCR\\n\\n3\\n\\n4\\n\\nZ. Shen et al.\\n\\nDIA Model Hub\\n\\nStorage & Visualization\\n\\nLayout Detection Models\\n\\nOCR Module\\n\\nCustomized Model Training\\n\\nModel Customization\\n\\nCommunity Platform\\n\\nThe Core LayoutParser Library\\n\\nLayout Data Structure\\n\\nEfficient Data Annotation\\n\\nDocument Images\\n\\nDIA Pipeline Sharing\\n\\nFig. 1: The overall architecture of LayoutParser. For an input document image, the core LayoutParser library provides a set of off-the-shelf tools for layout detection, OCR, visualization, and storage, backed by a carefully designed layout data structure. LayoutParser also supports high level customization via efficient layout annotation and model training functions. These improve model accuracy on the target samples. The community platform enables the easy sharing of DIA models and whole digitization pipelines to promote reusability and reproducibility. A collection of detailed documentation, tutorials and exemplar projects make LayoutParser easy to learn and use.\\n\\nAllenNLP [8] and transformers [34] have provided the community with complete DL-based support for developing and deploying models for general computer vision and natural language processing problems. LayoutParser, on the other hand, specializes specifically in DIA tasks. LayoutParser is also equipped with a community platform inspired by established model hubs such as Torch Hub [23] and TensorFlow Hub [1]. It enables the sharing of pretrained models as well as full document processing pipelines that are unique to DIA tasks.\\n\\nThere have been a variety of document data collections to facilitate the development of DL models. Some examples include PRImA [3](magazine layouts), PubLayNet [38](academic paper layouts), Table Bank [18](tables in academic papers), Newspaper Navigator Dataset [16, 17](newspaper figure layouts) and HJDataset [31](historical Japanese document layouts). A spectrum of models trained on these datasets are currently available in the LayoutParser model zoo to support different use cases.\\n\\n3 The Core LayoutParser Library\\n\\nAt the core of LayoutParser is an off-the-shelf toolkit that streamlines DL- based document image analysis. Five components support a simple interface with comprehensive functionalities: 1) The layout detection models enable using pre-trained or self-trained DL models for layout detection with just four lines of code. 2) The detected layout information is stored in carefully engineered\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nTable 1: Current layout detection models in the LayoutParser model zoo\\n\\nDataset\\n\\nBase Model1 Large Model Notes\\n\\nPubLayNet [38] PRImA [3] Newspaper [17] TableBank [18] HJDataset [31]\\n\\nF / M M F F F / M\\n\\nM - - F -\\n\\nLayouts of modern scientific documents Layouts of scanned modern magazines and scientific reports Layouts of scanned US newspapers from the 20th century Table region on modern scientific and business document Layouts of history Japanese documents\\n\\n1 For each dataset, we train several models of different sizes for different needs (the trade-off between accuracy vs. computational cost). For “base model” and “large model”, we refer to using the ResNet 50 or ResNet 101 backbones [13], respectively. One can train models of different architectures, like Faster R-CNN [28] (F) and Mask R-CNN [12] (M). For example, an F in the Large Model column indicates it has a Faster R-CNN model trained using the ResNet 101 backbone. The platform is maintained and a number of additions will be made to the model zoo in coming months.\\n\\nlayout data structures, which are optimized for efficiency and versatility. 3) When necessary, users can employ existing or customized OCR models via the unified API provided in the OCR module. 4) LayoutParser comes with a set of utility functions for the visualization and storage of the layout data. 5) LayoutParser is also highly customizable, via its integration with functions for layout data annotation and model training. We now provide detailed descriptions for each component.\\n\\n3.1 Layout Detection Models\\n\\nIn LayoutParser, a layout model takes a document image as an input and generates a list of rectangular boxes for the target content regions. Different from traditional methods, it relies on deep convolutional neural networks rather than manually curated rules to identify content regions. It is formulated as an object detection problem and state-of-the-art models like Faster R-CNN [28] and Mask R-CNN [12] are used. This yields prediction results of high accuracy and makes it possible to build a concise, generalized interface for layout detection. LayoutParser, built upon Detectron2 [35], provides a minimal API that can perform layout detection with only four lines of code in Python:\\n\\n1 import layoutparser as lp 2 image = cv2 . imread ( \" image_file \" ) # load images 3 model = lp . De t e c tro n2 Lay outM odel (\\n\\n\" lp :// PubLayNet / f as t er _ r c nn _ R _ 50 _ F P N_ 3 x / config \" )\\n\\n4 5 layout = model . detect ( image )\\n\\nLayoutParser provides a wealth of pre-trained model weights using various datasets covering different languages, time periods, and document types. Due to domain shift [7], the prediction performance can notably drop when models are ap- plied to target samples that are significantly different from the training dataset. As document structures and layouts vary greatly in different domains, it is important to select models trained on a dataset similar to the test samples. A semantic syntax is used for initializing the model weights in LayoutParser, using both the dataset name and model name lp:///.\\n\\n5\\n\\n6\\n\\nZ. Shen et al.\\n\\nFig. 2: The relationship between the three types of layout data structures. Coordinate supports three kinds of variation; TextBlock consists of the co- ordinate information and extra features like block text, types, and reading orders; a Layout object is a list of all possible layout elements, including other Layout objects. They all support the same set of transformation and operation APIs for maximum flexibility.\\n\\nShown in Table 1, LayoutParser currently hosts 9 pre-trained models trained on 5 different datasets. Description of the training dataset is provided alongside with the trained models such that users can quickly identify the most suitable models for their tasks. Additionally, when such a model is not readily available, LayoutParser also supports training customized layout models and community sharing of the models (detailed in Section 3.5).\\n\\n3.2 Layout Data Structures\\n\\nA critical feature of LayoutParser is the implementation of a series of data structures and operations that can be used to efficiently process and manipulate the layout elements. In document image analysis pipelines, various post-processing on the layout analysis model outputs is usually required to obtain the final outputs. Traditionally, this requires exporting DL model outputs and then loading the results into other pipelines. All model outputs from LayoutParser will be stored in carefully engineered data types optimized for further processing, which makes it possible to build an end-to-end document digitization pipeline within LayoutParser. There are three key components in the data structure, namely the Coordinate system, the TextBlock, and the Layout. They provide different levels of abstraction for the layout data, and a set of APIs are supported for transformations or operations on these classes.\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nCoordinates are the cornerstones for storing layout information. Currently, three types of Coordinate data structures are provided in LayoutParser, shown in Figure 2. Interval and Rectangle are the most common data types and support specifying 1D or 2D regions within a document. They are parameterized with 2 and 4 parameters. A Quadrilateral class is also implemented to support a more generalized representation of rectangular regions when the document is skewed or distorted, where the 4 corner points can be specified and a total of 8 degrees of freedom are supported. A wide collection of transformations like shift, pad, and scale, and operations like intersect, union, and is_in, are supported for these classes. Notably, it is common to separate a segment of the image and analyze it individually. LayoutParser provides full support for this scenario via image cropping operations crop_image and coordinate transformations like relative_to and condition_on that transform coordinates to and from their relative representations. We refer readers to Table 2 for a more detailed description of these operations13.\\n\\nBased on Coordinates, we implement the TextBlock class that stores both the positional and extra features of individual layout elements. It also supports specifying the reading orders via setting the parent field to the index of the parent object. A Layout class is built that takes in a list of TextBlocks and supports processing the elements in batch. Layout can also be nested to support hierarchical layout structures. They support the same operations and transformations as the Coordinate classes, minimizing both learning and deployment effort.\\n\\n3.3 OCR\\n\\nLayoutParser provides a unified interface for existing OCR tools. Though there are many OCR tools available, they are usually configured differently with distinct APIs or protocols for using them. It can be inefficient to add new OCR tools into an existing pipeline, and difficult to make direct comparisons among the available tools to find the best option for a particular project. To this end, LayoutParser builds a series of wrappers among existing OCR engines, and provides nearly the same syntax for using them. It supports a plug-and-play style of using OCR engines, making it effortless to switch, evaluate, and compare different OCR modules:\\n\\n1 ocr_agent = lp . TesseractAgent () 2 # Can be easily switched to other OCR software 3 tokens = ocr_agent . detect ( image )\\n\\nThe OCR outputs will also be stored in the aforementioned layout data structures and can be seamlessly incorporated into the digitization pipeline. Currently LayoutParser supports the Tesseract and Google Cloud Vision OCR engines.\\n\\nLayoutParser also comes with a DL-based CNN-RNN OCR model [6] trained with the Connectionist Temporal Classification (CTC) loss [10]. It can be used like the other OCR modules, and can be easily trained on customized datasets.\\n\\n13 This is also available in the LayoutParser documentation pages.\\n\\n7\\n\\n8\\n\\nZ. Shen et al.\\n\\nTable 2: All operations supported by the layout elements. The same APIs are supported across different layout element classes including Coordinate types, TextBlock and Layout.\\n\\nOperation Name\\n\\nDescription\\n\\nblock.pad(top, bottom, right, left) Enlarge the current block according to the input\\n\\nblock.scale(fx, fy)\\n\\nScale the current block given the ratio in x and y direction\\n\\nblock.shift(dx, dy)\\n\\nMove the current block with the shift distances in x and y direction\\n\\nblock1.is in(block2)\\n\\nWhether block1 is inside of block2\\n\\nblock1.intersect(block2)\\n\\nReturn the intersection region of block1 and block2. Coordinate type to be determined based on the inputs.\\n\\nblock1.union(block2)\\n\\nReturn the union region of block1 and block2. Coordinate type to be determined based on the inputs.\\n\\nblock1.relative to(block2)\\n\\nConvert the absolute coordinates of block1 to relative coordinates to block2\\n\\nblock1.condition on(block2)\\n\\nCalculate the absolute coordinates of block1 given the canvas block2’s absolute coordinates\\n\\nblock.crop image(image)\\n\\nObtain the image segments in the block region\\n\\n3.4 Storage and visualization\\n\\nThe end goal of DIA is to transform the image-based document data into a structured database. LayoutParser supports exporting layout data into different formats like JSON, csv, and will add the support for the METS/ALTO XML format 14 . It can also load datasets from layout analysis-specific formats like COCO [38] and the Page Format [25] for training layout models (Section 3.5). Visualization of the layout detection results is critical for both presentation and debugging. LayoutParser is built with an integrated API for displaying the layout information along with the original document image. Shown in Figure 3, it enables presenting layout data with rich meta information and features in different modes. More detailed information can be found in the online LayoutParser documentation page.\\n\\n3.5 Customized Model Training\\n\\nBesides the off-the-shelf library, LayoutParser is also highly customizable with supports for highly unique and challenging document analysis tasks. Target document images can be vastly different from the existing datasets for train- ing layout models, which leads to low layout detection accuracy. Training data\\n\\n14 https://altoxml.github.io\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nFig. 3: Layout detection and OCR results visualization generated by the LayoutParser APIs. Mode I directly overlays the layout region bounding boxes and categories over the original image. Mode II recreates the original document via drawing the OCR’d texts at their corresponding positions on the image canvas. In this figure, tokens in textual regions are filtered using the API and then displayed.\\n\\ncan also be highly sensitive and not sharable publicly. To overcome these chal- lenges, LayoutParser is built with rich features for efficient data annotation and customized model training.\\n\\nLayoutParser incorporates a toolkit optimized for annotating document lay- outs using object-level active learning [32]. With the help from a layout detection model trained along with labeling, only the most important layout objects within each image, rather than the whole image, are required for labeling. The rest of the regions are automatically annotated with high confidence predictions from the layout detection model. This allows a layout dataset to be created more efficiently with only around 60% of the labeling budget.\\n\\nAfter the training dataset is curated, LayoutParser supports different modes for training the layout models. Fine-tuning can be used for training models on a small newly-labeled dataset by initializing the model with existing pre-trained weights. Training from scratch can be helpful when the source dataset and target are significantly different and a large training set is available. However, as suggested in Studer et al.’s work[33], loading pre-trained weights on large-scale datasets like ImageNet [5], even from totally different domains, can still boost model performance. Through the integrated API provided by LayoutParser, users can easily compare model performances on the benchmark datasets.\\n\\n9\\n\\n10\\n\\nZ. Shen et al.\\n\\nFig. 4: Illustration of (a) the original historical Japanese document with layout detection results and (b) a recreated version of the document image that achieves much better character recognition recall. The reorganization algorithm rearranges the tokens based on the their detected bounding boxes given a maximum allowed height.\\n\\n4 LayoutParser Community Platform\\n\\nAnother focus of LayoutParser is promoting the reusability of layout detection models and full digitization pipelines. Similar to many existing deep learning libraries, LayoutParser comes with a community model hub for distributing layout models. End-users can upload their self-trained models to the model hub, and these models can be loaded into a similar interface as the currently available LayoutParser pre-trained models. For example, the model trained on the News Navigator dataset [17] has been incorporated in the model hub.\\n\\nBeyond DL models, LayoutParser also promotes the sharing of entire doc- ument digitization pipelines. For example, sometimes the pipeline requires the combination of multiple DL models to achieve better accuracy. Currently, pipelines are mainly described in academic papers and implementations are often not pub- licly available. To this end, the LayoutParser community platform also enables the sharing of layout pipelines to promote the discussion and reuse of techniques. For each shared pipeline, it has a dedicated project page, with links to the source code, documentation, and an outline of the approaches. A discussion panel is provided for exchanging ideas. Combined with the core LayoutParser library, users can easily build reusable components based on the shared pipelines and apply them to solve their unique problems.\\n\\n5 Use Cases\\n\\nThe core objective of LayoutParser is to make it easier to create both large-scale and light-weight document digitization pipelines. Large-scale document processing\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nfocuses on precision, efficiency, and robustness. The target documents may have complicated structures, and may require training multiple layout detection models to achieve the optimal accuracy. Light-weight pipelines are built for relatively simple documents, with an emphasis on development ease, speed and flexibility. Ideally one only needs to use existing resources, and model training should be avoided. Through two exemplar projects, we show how practitioners in both academia and industry can easily build such pipelines using LayoutParser and extract high-quality structured document data for their downstream tasks. The source code for these projects will be publicly available in the LayoutParser community hub.\\n\\n5.1 A Comprehensive Historical Document Digitization Pipeline\\n\\nThe digitization of historical documents can unlock valuable data that can shed light on many important social, economic, and historical questions. Yet due to scan noises, page wearing, and the prevalence of complicated layout structures, ob- taining a structured representation of historical document scans is often extremely complicated. In this example, LayoutParser was used to develop a comprehensive pipeline, shown in Figure 5, to gener- ate high-quality structured data from historical Japanese firm financial ta- bles with complicated layouts. The pipeline applies two layout models to identify different levels of document structures and two customized OCR engines for optimized character recog- nition accuracy.\\n\\nAs shown in Figure 4 (a), the document contains columns of text written vertically 15, a common style in Japanese. Due to scanning noise and archaic printing technology, the columns can be skewed or have vari- able widths, and hence cannot be eas- ily identified via rule-based methods. Within each column, words are sepa- rated by white spaces of variable size, and the vertical positions of objects can be an indicator of their layout type.\\n\\nFig. 5: Illustration of how LayoutParser helps with the historical document digi- tization pipeline.\\n\\n15 A document page consists of eight rows like this. For simplicity we skip the row\\n\\nsegmentation discussion and refer readers to the source code when available.\\n\\n11\\n\\n12\\n\\nZ. Shen et al.\\n\\nTo decipher the complicated layout\\n\\nstructure, two object detection models have been trained to recognize individual columns and tokens, respectively. A small training set (400 images with approxi- mately 100 annotations each) is curated via the active learning based annotation tool [32] in LayoutParser. The models learn to identify both the categories and regions for each token or column via their distinct visual features. The layout data structure enables easy grouping of the tokens within each column, and rearranging columns to achieve the correct reading orders based on the horizontal position. Errors are identified and rectified via checking the consistency of the model predictions. Therefore, though trained on a small dataset, the pipeline achieves a high level of layout detection accuracy: it achieves a 96.97 AP [19] score across 5 categories for the column detection model, and a 89.23 AP across 4 categories for the token detection model.\\n\\nA combination of character recognition methods is developed to tackle the unique challenges in this document. In our experiments, we found that irregular spacing between the tokens led to a low character recognition recall rate, whereas existing OCR models tend to perform better on densely-arranged texts. To overcome this challenge, we create a document reorganization algorithm that rearranges the text based on the token bounding boxes detected in the layout analysis step. Figure 4 (b) illustrates the generated image of dense text, which is sent to the OCR APIs as a whole to reduce the transaction costs. The flexible coordinate system in LayoutParser is used to transform the OCR results relative to their original positions on the page.\\n\\nAdditionally, it is common for historical documents to use unique fonts with different glyphs, which significantly degrades the accuracy of OCR models trained on modern texts. In this document, a special flat font is used for printing numbers and could not be detected by off-the-shelf OCR engines. Using the highly flexible functionalities from LayoutParser, a pipeline approach is constructed that achieves a high recognition accuracy with minimal effort. As the characters have unique visual structures and are usually clustered together, we train the layout model to identify number regions with a dedicated category. Subsequently, LayoutParser crops images within these regions, and identifies characters within them using a self-trained OCR model based on a CNN-RNN [6]. The model detects a total of 15 possible categories, and achieves a 0.98 Jaccard score16 and a 0.17 average Levinstein distances17 for token prediction on the test set.\\n\\nOverall, it is possible to create an intricate and highly accurate digitization pipeline for large-scale digitization using LayoutParser. The pipeline avoids specifying the complicated rules used in traditional methods, is straightforward to develop, and is robust to outliers. The DL models also generate fine-grained results that enable creative approaches like page reorganization for OCR.\\n\\n16 This measures the overlap between the detected and ground-truth characters, and\\n\\nthe maximum is 1.\\n\\n17 This measures the number of edits from the ground-truth text to the predicted text,\\n\\nand lower is better.\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\nFig. 6: This lightweight table detector can identify tables (outlined in red) and cells (shaded in blue) in different locations on a page. In very few cases (d), it might generate minor error predictions, e.g, failing to capture the top text line of a table.\\n\\n5.2 A light-weight Visual Table Extractor\\n\\nDetecting tables and parsing their structures (table extraction) are of central im- portance for many document digitization tasks. Many previous works [26, 30, 27] and tools 18 have been developed to identify and parse table structures. Yet they might require training complicated models from scratch, or are only applicable for born-digital PDF documents. In this section, we show how LayoutParser can help build a light-weight accurate visual table extractor for legal docket tables using the existing resources with minimal effort.\\n\\nThe extractor uses a pre-trained layout detection model for identifying the table regions and some simple rules for pairing the rows and the columns in the PDF image. Mask R-CNN [12] trained on the PubLayNet dataset [38] from the LayoutParser Model Zoo can be used for detecting table regions. By filtering out model predictions of low confidence and removing overlapping predictions, LayoutParser can identify the tabular regions on each page, which significantly simplifies the subsequent steps. By applying the line detection functions within the tabular segments, provided in the utility module from LayoutParser, the pipeline can identify the three distinct columns in the tables. A row clustering method is then applied via analyzing the y coordinates of token bounding boxes in the left-most column, which are obtained from the OCR engines. A non-maximal suppression algorithm is used to remove duplicated rows with extremely small gaps. Shown in Figure 6, the built pipeline can detect tables at different positions on a page accurately. Continued tables from different pages are concatenated, and a structured table representation has been easily created.\\n\\n18 https://github.com/atlanhq/camelot, https://github.com/tabulapdf/tabula\\n\\n13\\n\\n14\\n\\nZ. Shen et al.\\n\\n6 Conclusion\\n\\nLayoutParser provides a comprehensive toolkit for deep learning-based document image analysis. The off-the-shelf library is easy to install, and can be used to build flexible and accurate pipelines for processing documents with complicated structures. It also supports high-level customization and enables easy labeling and training of DL models on unique document image datasets. The LayoutParser community platform facilitates sharing DL models and DIA pipelines, inviting discussion and promoting code reproducibility and reusability. The LayoutParser team is committed to keeping the library updated continuously and bringing the most recent advances in DL-based DIA, such as multi-modal document modeling [37, 36, 9] (an upcoming priority), to a diverse audience of end-users.\\n\\nAcknowledgements We thank the anonymous reviewers for their comments and suggestions. This project is supported in part by NSF Grant OIA-2033558 and funding from the Harvard Data Science Initiative and Harvard Catalyst. Zejiang Shen thanks Doug Downey for suggestions.\\n\\nReferences\\n\\n[1] Abadi, M., Agarwal, A., Barham, P., Brevdo, E., Chen, Z., Citro, C., Corrado, G.S., Davis, A., Dean, J., Devin, M., Ghemawat, S., Goodfellow, I., Harp, A., Irving, G., Isard, M., Jia, Y., Jozefowicz, R., Kaiser, L., Kudlur, M., Levenberg, J., Man´e, D., Monga, R., Moore, S., Murray, D., Olah, C., Schuster, M., Shlens, J., Steiner, B., Sutskever, I., Talwar, K., Tucker, P., Vanhoucke, V., Vasudevan, V., Vi´egas, F., Vinyals, O., Warden, P., Wattenberg, M., Wicke, M., Yu, Y., Zheng, X.: TensorFlow: Large-scale machine learning on heterogeneous systems (2015), https://www.tensorflow.org/, software available from tensorflow.org\\n\\n[2] Alberti, M., Pondenkandath, V., W¨ursch, M., Ingold, R., Liwicki, M.: Deepdiva: a highly-functional python framework for reproducible experiments. In: 2018 16th International Conference on Frontiers in Handwriting Recognition (ICFHR). pp. 423–428. IEEE (2018)\\n\\n[3] Antonacopoulos, A., Bridson, D., Papadopoulos, C., Pletschacher, S.: A realistic dataset for performance evaluation of document layout analysis. In: 2009 10th International Conference on Document Analysis and Recognition. pp. 296–300. IEEE (2009)\\n\\n[4] Baek, Y., Lee, B., Han, D., Yun, S., Lee, H.: Character region awareness for text detection. In: Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. pp. 9365–9374 (2019)\\n\\n[5] Deng, J., Dong, W., Socher, R., Li, L.J., Li, K., Fei-Fei, L.: ImageNet: A Large-Scale\\n\\nHierarchical Image Database. In: CVPR09 (2009)\\n\\n[6] Deng, Y., Kanervisto, A., Ling, J., Rush, A.M.: Image-to-markup generation with coarse-to-fine attention. In: International Conference on Machine Learning. pp. 980–989. PMLR (2017)\\n\\n[7] Ganin, Y., Lempitsky, V.: Unsupervised domain adaptation by backpropagation. In: International conference on machine learning. pp. 1180–1189. PMLR (2015)\\n\\nLayoutParser: A Unified Toolkit for DL-Based DIA\\n\\n[8] Gardner, M., Grus, J., Neumann, M., Tafjord, O., Dasigi, P., Liu, N., Peters, M., Schmitz, M., Zettlemoyer, L.: Allennlp: A deep semantic natural language processing platform. arXiv preprint arXiv:1803.07640 (2018) (cid:32)Lukasz Garncarek, Powalski, R., Stanis(cid:32)lawek, T., Topolski, B., Halama, P., Grali´nski, F.: Lambert: Layout-aware (language) modeling using bert for in- formation extraction (2020)\\n\\n[9]\\n\\n[10] Graves, A., Fern´andez, S., Gomez, F., Schmidhuber, J.: Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks. In: Proceedings of the 23rd international conference on Machine learning. pp. 369–376 (2006)\\n\\n[11] Harley, A.W., Ufkes, A., Derpanis, K.G.: Evaluation of deep convolutional nets for document image classification and retrieval. In: 2015 13th International Conference on Document Analysis and Recognition (ICDAR). pp. 991–995. IEEE (2015) [12] He, K., Gkioxari, G., Doll´ar, P., Girshick, R.: Mask r-cnn. In: Proceedings of the\\n\\nIEEE international conference on computer vision. pp. 2961–2969 (2017)\\n\\n[13] He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition. In: Proceedings of the IEEE conference on computer vision and pattern recognition. pp. 770–778 (2016)\\n\\n[14] Kay, A.: Tesseract: An open-source optical character recognition engine. Linux J.\\n\\n2007(159), 2 (Jul 2007)\\n\\n[15] Lamiroy, B., Lopresti, D.: An open architecture for end-to-end document analysis benchmarking. In: 2011 International Conference on Document Analysis and Recognition. pp. 42–47. IEEE (2011)\\n\\n[16] Lee, B.C., Weld, D.S.: Newspaper navigator: Open faceted search for 1.5 million images. In: Adjunct Publication of the 33rd Annual ACM Sym- posium on User Interface Software and Technology. p. 120–122. UIST ’20 Adjunct, Association for Computing Machinery, New York, NY, USA (2020). https://doi.org/10.1145/3379350.3416143, https://doi-org.offcampus. lib.washington.edu/10.1145/3379350.3416143\\n\\n[17] Lee, B.C.G., Mears, J., Jakeway, E., Ferriter, M., Adams, C., Yarasavage, N., Thomas, D., Zwaard, K., Weld, D.S.: The Newspaper Navigator Dataset: Extracting Headlines and Visual Content from 16 Million Historic Newspaper Pages in Chronicling America, p. 3055–3062. Association for Computing Machinery, New York, NY, USA (2020), https://doi.org/10.1145/3340531.3412767\\n\\n[18] Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: Table benchmark for image-based table detection and recognition. arXiv preprint arXiv:1903.01949 (2019)\\n\\n[19] Lin, T.Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., Doll´ar, P., Zitnick, C.L.: Microsoft coco: Common objects in context. In: European conference on computer vision. pp. 740–755. Springer (2014)\\n\\n[20] Long, J., Shelhamer, E., Darrell, T.: Fully convolutional networks for semantic segmentation. In: Proceedings of the IEEE conference on computer vision and pattern recognition. pp. 3431–3440 (2015)\\n\\n[21] Neudecker, C., Schlarb, S., Dogan, Z.M., Missier, P., Sufi, S., Williams, A., Wolsten- croft, K.: An experimental workflow development platform for historical document digitisation and analysis. In: Proceedings of the 2011 workshop on historical document imaging and processing. pp. 161–168 (2011)\\n\\n[22] Oliveira, S.A., Seguin, B., Kaplan, F.: dhsegment: A generic deep-learning approach for document segmentation. In: 2018 16th International Conference on Frontiers in Handwriting Recognition (ICFHR). pp. 7–12. IEEE (2018)\\n\\n15\\n\\n16\\n\\nZ. Shen et al.\\n\\n[23] Paszke, A., Gross, S., Chintala, S., Chanan, G., Yang, E., DeVito, Z., Lin, Z., Desmaison, A., Antiga, L., Lerer, A.: Automatic differentiation in pytorch (2017) [24] Paszke, A., Gross, S., Massa, F., Lerer, A., Bradbury, J., Chanan, G., Killeen, T., Lin, Z., Gimelshein, N., Antiga, L., et al.: Pytorch: An imperative style, high-performance deep learning library. arXiv preprint arXiv:1912.01703 (2019) [25] Pletschacher, S., Antonacopoulos, A.: The page (page analysis and ground-truth elements) format framework. In: 2010 20th International Conference on Pattern Recognition. pp. 257–260. IEEE (2010)\\n\\n[26] Prasad, D., Gadpal, A., Kapadni, K., Visave, M., Sultanpure, K.: Cascadetabnet: An approach for end to end table detection and structure recognition from image- based documents. In: Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops. pp. 572–573 (2020)\\n\\n[27] Qasim, S.R., Mahmood, H., Shafait, F.: Rethinking table recognition using graph neural networks. In: 2019 International Conference on Document Analysis and Recognition (ICDAR). pp. 142–147. IEEE (2019)\\n\\n[28] Ren, S., He, K., Girshick, R., Sun, J.: Faster r-cnn: Towards real-time object detection with region proposal networks. In: Advances in neural information processing systems. pp. 91–99 (2015)\\n\\n[29] Scarselli, F., Gori, M., Tsoi, A.C., Hagenbuchner, M., Monfardini, G.: The graph neural network model. IEEE transactions on neural networks 20(1), 61–80 (2008) [30] Schreiber, S., Agne, S., Wolf, I., Dengel, A., Ahmed, S.: Deepdesrt: Deep learning for detection and structure recognition of tables in document images. In: 2017 14th IAPR international conference on document analysis and recognition (ICDAR). vol. 1, pp. 1162–1167. IEEE (2017)\\n\\n[31] Shen, Z., Zhang, K., Dell, M.: A large dataset of historical japanese documents with complex layouts. In: Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops. pp. 548–549 (2020)\\n\\n[32] Shen, Z., Zhao, J., Dell, M., Yu, Y., Li, W.: Olala: Object-level active learning\\n\\nbased layout annotation. arXiv preprint arXiv:2010.01762 (2020)\\n\\n[33] Studer, L., Alberti, M., Pondenkandath, V., Goktepe, P., Kolonko, T., Fischer, A., Liwicki, M., Ingold, R.: A comprehensive study of imagenet pre-training for historical document image analysis. In: 2019 International Conference on Document Analysis and Recognition (ICDAR). pp. 720–725. IEEE (2019)\\n\\n[34] Wolf, T., Debut, L., Sanh, V., Chaumond, J., Delangue, C., Moi, A., Cistac, P., Rault, T., Louf, R., Funtowicz, M., et al.: Huggingface’s transformers: State-of- the-art natural language processing. arXiv preprint arXiv:1910.03771 (2019) [35] Wu, Y., Kirillov, A., Massa, F., Lo, W.Y., Girshick, R.: Detectron2. https://\\n\\ngithub.com/facebookresearch/detectron2 (2019)\\n\\n[36] Xu, Y., Xu, Y., Lv, T., Cui, L., Wei, F., Wang, G., Lu, Y., Florencio, D., Zhang, C., Che, W., et al.: Layoutlmv2: Multi-modal pre-training for visually-rich document understanding. arXiv preprint arXiv:2012.14740 (2020)\\n\\n[37] Xu, Y., Li, M., Cui, L., Huang, S., Wei, F., Zhou, M.: Layoutlm: Pre-training of\\n\\ntext and layout for document image understanding (2019)\\n\\n[38] Zhong, X., Tang, J., Yepes, A.J.: Publaynet:\\n\\nlargest dataset ever for doc- In: 2019 International Conference on Document IEEE (Sep 2019).\\n\\nument Analysis and Recognition (ICDAR). pp. 1015–1022. https://doi.org/10.1109/ICDAR.2019.00166\\n\\nlayout analysis.')" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "execution_count": null, "source": [ + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " strategy=STRATEGY,\n", + ")\n", "docs = loader.load()\n", - "docs[0]" + "print(len(docs))\n", + "pprint.pp(docs[0].metadata)" ] }, { + "metadata": {}, + "cell_type": "markdown", + "source": "Logically, in this mode, the ‘page_number’ metadata disappears. Here's how to clearly identify where pages end in the text flow :" + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### Add a custom *pages_delimitor* to identify where are ends of pages in *single* mode:" + }, + { + "metadata": {}, "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'source': './example_data/layout-parser-paper.pdf'}\n" - ] - } - ], + "outputs": [], + "execution_count": null, "source": [ - "print(docs[0].metadata)" + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"single\",\n", + " strategy=STRATEGY,\n", + " pages_delimitor=\"\\n-------THIS IS A CUSTOM END OF PAGE-------\\n\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content[:5780])" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "This could simply be \\n, or \\f to clearly indicate a page change, or \\ for seamless injection in a Markdown viewer without a visual effect." + }, + { "metadata": {}, + "cell_type": "markdown", + "source": "# Extract images from the PDF" + }, + { + "metadata": {}, + "cell_type": "markdown", "source": [ - "### Retain Elements\n", + "You can extract images from your PDFs with a choice of three different solutions:\n", + "- rapidOCR (lightweight Optical Character Recognition tool)\n", + "- Tesseract (OCR tool with high precision)\n", + "- Multimodal language model\n", "\n", - "Under the hood, Unstructured creates different \"elements\" for different chunks of text. By default we combine those together, but you can easily keep that separation by specifying `mode=\"elements\"`." + "You can tune these functions to choose the output format of the extracted images among *html*, *markdown* or *text*\n", + "\n", + "The result is inserted between the last and the second-to-last paragraphs of text of the page." ] }, { + "metadata": {}, + "cell_type": "markdown", + "source": "### Extract images from the PDF with rapidOCR:" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qU rapidocr-onnxruntime" + }, + { + "metadata": {}, "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Document(metadata={'source': './example_data/layout-parser-paper.pdf', 'coordinates': {'points': ((16.34, 213.36), (16.34, 253.36), (36.34, 253.36), (36.34, 213.36)), 'system': 'PixelSpace', 'layout_width': 612, 'layout_height': 792}, 'file_directory': './example_data', 'filename': 'layout-parser-paper.pdf', 'languages': ['eng'], 'last_modified': '2024-07-25T21:28:58', 'page_number': 1, 'filetype': 'application/pdf', 'category': 'UncategorizedText', 'element_id': 'd3ce55f220dfb75891b4394a18bcb973'}, page_content='1 2 0 2')" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "execution_count": null, "source": [ - "file_path = \"./example_data/layout-parser-paper.pdf\"\n", - "loader = UnstructuredPDFLoader(file_path, mode=\"elements\")\n", + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_rapidocr,\n", + ")\n", "\n", - "data = loader.load()\n", - "data[0]" + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " strategy=STRATEGY,\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_rapidocr(format=\"html\"),\n", + ")\n", + "docs = loader.load()\n", + "\n", + "print(docs[5].page_content)" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "Be careful, RapidOCR is designed to work with Chinese and English, not other languages." + }, + { "metadata": {}, + "cell_type": "markdown", + "source": "### Extract images from the PDF with Tesseract:" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "%pip install -qU pytesseract" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "See the full set of element types for this particular document:" + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_text_with_tesseract,\n", + ")\n", + "\n", + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " strategy=STRATEGY,\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_text_with_tesseract(format=\"text\"),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" ] }, { + "metadata": {}, + "cell_type": "markdown", + "source": "### Extract images from the PDF with multimodal model:" + }, + { + "metadata": {}, "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'ListItem', 'NarrativeText', 'Title', 'UncategorizedText'}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "execution_count": null, + "source": "%pip install -qU langchain_openai" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "set(doc.metadata[\"category\"] for doc in data)" + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()" ] }, { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass(\"OpenAI API key =\")" + ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from langchain_community.document_loaders.parsers.pdf import (\n", + " convert_images_to_description,\n", + ")\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " strategy=STRATEGY,\n", + " extract_images=True,\n", + " images_to_text=convert_images_to_description(\n", + " model=ChatOpenAI(model=\"gpt-4o\", max_tokens=1024), format=\"markdown\"\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[5].page_content)" + ] + }, + { + "metadata": {}, "cell_type": "markdown", + "source": "# Extract tables from the PDF" + }, + { "metadata": {}, + "cell_type": "markdown", + "source": "With PyMUPDF you can extract tables from your PDFs in *html*, *markdown* or *csv* format :" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, "source": [ - "### Fetching remote PDFs using Unstructured\n", + "loader = UnstructuredPDFLoader(\n", + " \"./example_data/layout-parser-paper.pdf\",\n", + " mode=\"page\",\n", + " strategy=STRATEGY,\n", + " extract_tables=\"markdown\",\n", + ")\n", + "docs = loader.load()\n", + "print(docs[4].page_content)" + ] + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "## Working with Files\n", "\n", - "This covers how to load online PDFs into a document format that we can use downstream. This can be used for various online PDF sites such as https://open.umn.edu/opentextbooks/textbooks/ and https://arxiv.org/archive/\n", + "Many document loaders involve parsing files. The difference between such loaders usually stems from how the file is parsed, rather than how the file is loaded. For example, you can use `open` to read the binary content of either a PDF or a markdown file, but you need different parsing logic to convert that binary data into text.\n", "\n", - "Note: all other PDF loaders can also be used to fetch remote PDFs, but `OnlinePDFLoader` is a legacy function, and works specifically with `UnstructuredPDFLoader`." + "As a result, it can be helpful to decouple the parsing logic from the loading logic, which makes it easier to re-use a given parser regardless of how the data was loaded.\n", + "You can use this strategy to analyze different files, with the same parsing parameters." ] }, { + "metadata": {}, "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Document(metadata={'source': '/var/folders/td/vzm913rx77x21csd90g63_7c0000gn/T/tmp3qdyy7e8/tmp.pdf'}, page_content='3 2 0 2\\n\\nb e F 7\\n\\n]\\n\\nG A . h t a m\\n\\n[\\n\\n1 v 3 0 8 3 0 . 2 0 3 2 : v i X r a\\n\\nA WEAK (k, k)-LEFSCHETZ THEOREM FOR PROJECTIVE TORIC ORBIFOLDS\\n\\nWilliam D. Montoya\\n\\nInstituto de Matem´atica, Estat´ıstica e Computa¸c˜ao Cient´ıfica, Universidade Estadual de Campinas (UNICAMP),\\n\\nRua S´ergio Buarque de Holanda 651, 13083-859, Campinas, SP, Brazil\\n\\nFebruary 9, 2023\\n\\nAbstract\\n\\nFirstly we show a generalization of the (1, 1)-Lefschetz theorem for projective toric orbifolds and secondly we prove that on 2k-dimensional quasi-smooth hyper- surfaces coming from quasi-smooth intersection surfaces, under the Cayley trick, every rational (k, k)-cohomology class is algebraic, i.e., the Hodge conjecture holds on them.\\n\\n1\\n\\nIntroduction\\n\\nIn [3] we proved that, under suitable conditions, on a very general codimension s quasi- smooth intersection subvariety X in a projective toric orbifold Pd Σ with d + s = 2(k + 1) the Hodge conjecture holds, that is, every (p, p)-cohomology class, under the Poincar´e duality is a rational linear combination of fundamental classes of algebraic subvarieties of X. The proof of the above-mentioned result relies, for p ≠ d + 1 − s, on a Lefschetz\\n\\nDate: February 9, 2023 2020 Mathematics Subject Classification: 14C30, 14M10, 14J70, 14M25 Keywords: (1,1)- Lefschetz theorem, Hodge conjecture, toric varieties, complete intersection Email: wmontoya@ime.unicamp.br\\n\\n1\\n\\ntheorem ([7]) and the Hard Lefschetz theorem for projective orbifolds ([11]). When p = d + 1 − s the proof relies on the Cayley trick, a trick which associates to X a quasi-smooth hypersurface Y in a projective vector bundle, and the Cayley Proposition (4.3) which gives an isomorphism of some primitive cohomologies (4.2) of X and Y . The Cayley trick, following the philosophy of Mavlyutov in [7], reduces results known for quasi-smooth hypersurfaces to quasi-smooth intersection subvarieties. The idea in this paper goes the other way around, we translate some results for quasi-smooth intersection subvarieties to quasi-smooth hypersurfaces, mainly the (1, 1)-Lefschetz theorem.\\n\\nAcknowledgement. I thank Prof. Ugo Bruzzo and Tiago Fonseca for useful discus-\\n\\nsions. I also acknowledge support from FAPESP postdoctoral grant No. 2019/23499-7.\\n\\n2 Preliminaries and Notation\\n\\n2.1 Toric varieties\\n\\nLet M be a free abelian group of rank d, let N = Hom(M, Z), and NR = N ⊗Z R.\\n\\nA convex subset σ ⊂ NR is a rational k-dimensional simplicial cone if there exist k linearly independent primitive elements e1, . . . , ek ∈ N such that σ = {µ1e1 + ⋯ + µkek}.\\n\\nDefinition 2.1.\\n\\nThe generators ei are integral if for every i and any nonnegative rational number µ the product µei is in N only if µ is an integer.\\n\\nGiven two rational simplicial cones σ, σ′ one says that σ′ is a face of σ (σ′ < σ) if the set of integral generators of σ′ is a subset of the set of integral generators of σ.\\n\\nA finite set Σ = {σ1, . . . , σt} of rational simplicial cones is called a rational simplicial complete d-dimensional fan if:\\n\\n1. all faces of cones in Σ are in Σ;\\n\\n2. if σ, σ′ ∈ Σ then σ ∩ σ′ < σ and σ ∩ σ′ < σ′;\\n\\n3. NR = σ1 ∪ ⋅ ⋅ ⋅ ∪ σt.\\n\\nA rational simplicial complete d-dimensional fan Σ defines a d-dimensional toric variety Σ having only orbifold singularities which we assume to be projective. Moreover, T ∶= Pd N ⊗Z C∗ ≃ (C∗)d is the torus action on Pd Σ. We denote by Σ(i) the i-dimensional cones\\n\\n2\\n\\nof Σ and each ρ ∈ Σ corresponds to an irreducible T -invariant Weil divisor Dρ on Pd Cl(Σ) be the group of Weil divisors on Pd\\n\\nΣ module rational equivalences.\\n\\nΣ. Let\\n\\nThe total coordinate ring of Pd\\n\\nΣ is the polynomial ring S = C[xρ ∣ ρ ∈ Σ(1)], S has the ρ ∈\\n\\nCl(Σ)-grading, a Weil divisor D = ∑ρ∈Σ(1) uρDρ determines the monomial xu ∶= ∏ρ∈Σ(1) xuρ S and conversely deg(xu) = [D] ∈ Cl(Σ).\\n\\nFor a cone σ ∈ Σ, ˆσ is the set of 1-dimensional cone in Σ that are not contained in σ\\n\\nand xˆσ ∶= ∏ρ∈ˆσ xρ is the associated monomial in S.\\n\\nΣ is the monomial ideal BΣ ∶=< xˆσ ∣ σ ∈ Σ > and\\n\\nDefinition 2.2. The irrelevant ideal of Pd the zero locus Z(Σ) ∶= V(BΣ) in the affine space Ad ∶= Spec(S) is the irrelevant locus.\\n\\nProposition 2.3 (Theorem 5.1.11 [5]). The toric variety Pd Σ is a categorical quotient Ad ∖ Z(Σ) by the group Hom(Cl(Σ), C∗) and the group action is induced by the Cl(Σ)- grading of S.\\n\\n2.2 Orbifolds\\n\\nNow we give a brief introduction to complex orbifolds and we mention the needed theorems for the next section. Namely: de Rham theorem and Dolbeault theorem for complex orbifolds.\\n\\nDefinition 2.4. A complex orbifold of complex dimension d is a singular complex space whose singularities are locally isomorphic to quotient singularities Cd/G, for finite sub- groups G ⊂ Gl(d, C).\\n\\nDefinition 2.5. A differential form on a complex orbifold Z is defined locally at z ∈ Z as a G-invariant differential form on Cd where G ⊂ Gl(d, C) and Z is locally isomorphic to Cd/G around z.\\n\\nRoughly speaking the local geometry of orbifolds reduces to local G-invariant geometry. We have a complex of differential forms (A●(Z), d) and a double complex (A●,●(Z), ∂, ¯∂) of bigraded differential forms which define the de Rham and the Dolbeault cohomology groups (for a fixed p ∈ N) respectively:\\n\\ndR(Z, C) ∶=\\n\\nH ●\\n\\nker d im d\\n\\nand H p,●(Z, ¯∂) ∶=\\n\\nker ¯∂ im ¯∂\\n\\nTheorem 2.6 (Theorem 3.4.4 in [4] and Theorem 1.2 in [1] ). Let Z be a compact complex orbifold. There are natural isomorphisms:\\n\\n3\\n\\nH ●\\n\\ndR(Z, C) ≃ H ●(Z, C)\\n\\nH p,●(Z, ¯∂) ≃ H ●(X, Ωp Z )\\n\\n3\\n\\n(1,1)-Lefschetz theorem for projective toric orbifolds\\n\\nDefinition 3.1. A subvariety X ⊂ Pd Z(Σ).\\n\\nΣ is quasi-smooth if V(IX ) ⊂ A#Σ(1) is smooth outside\\n\\nExample 3.2. Quasi-smooth hypersurfaces or more generally quasi-smooth intersection sub- varieties are quasi-smooth subvarieties (see [2] or [7] for more details).\\n\\nRemark 3.3. Quasi-smooth subvarieties are suborbifolds of Pd Σ in the sense of Satake in [8]. Intuitively speaking they are subvarieties whose only singularities come from the ambient space.\\n\\nTheorem 3.4. Let X ⊂ Pd class λ ∈ H 1,1(X) ∩ H 2(X, Z) is algebraic\\n\\nΣ be a quasi-smooth subvariety. Then every (1, 1)-cohomology\\n\\nProof. From the exponential short exact sequence\\n\\n0 → Z → OX → O∗ X\\n\\n→ 0\\n\\nwe have a long exact sequence in cohomology\\n\\nX ) → H 2(X, Z) → H 2(OX ) ≃ H 0,2(X)\\n\\nH 1(O∗\\n\\nwhere the last isomorphisms is due to Steenbrink in [9]. Now, it is enough to prove the commutativity of the next diagram\\n\\nH 2(X, Z)\\n\\nH 2(X, OX )\\n\\nH 2(X, C)\\n\\n≃ Dolbeault\\n\\nde Rham ≃\\n\\n(cid:15)\\n\\n(cid:15)\\n\\nH 2\\n\\ndR(X, C)\\n\\n/\\n\\n/ H 0,2\\n\\n¯∂ (X)\\n\\n4\\n\\n△\\n\\n△\\n\\nThe key points are the de Rham and Dolbeault’s isomorphisms for orbifolds. The rest\\n\\nof the proof follows as the (1, 1)-Lefschetz theorem in [6].\\n\\nRemark 3.5. For k = 1 and Pd Lefschetz theorem.\\n\\nΣ as the projective space, we recover the classical (1, 1)-\\n\\nBy the Hard Lefschetz Theorem for projective orbifolds (see [11] for details) we get an\\n\\nisomorphism of cohomologies :\\n\\nH ●(X, Q) ≃ H 2 dim X−●(X, Q)\\n\\ngiven by the Lefschetz morphism and since it is a morphism of Hodge structures, we have:\\n\\nH 1,1(X, Q) ≃ H dim X−1,dim X−1(X, Q)\\n\\nFor X as before:\\n\\nCorollary 3.6. If the dimension of X is 1, 2 or 3. The Hodge conjecture holds on X.\\n\\nProof. If the dimCX = 1 the result is clear by the Hard Lefschetz theorem for projective orbifolds. The dimension 2 and 3 cases are covered by Theorem 3.5 and the Hard Lefschetz. theorem.\\n\\n4 Cayley trick and Cayley proposition\\n\\nThe Cayley trick is a way to associate to a quasi-smooth intersection subvariety a quasi- smooth hypersurface. Let L1, . . . , Ls be line bundles on Pd Σ be the projective space bundle associated to the vector bundle E = L1 ⊕ ⋯ ⊕ Ls. It is known that P(E) is a (d + s − 1)-dimensional simplicial toric variety whose fan depends on the degrees of the line bundles and the fan Σ. Furthermore, if the Cox ring, without considering the grading, of Pd\\n\\nΣ and let π ∶ P(E) → Pd\\n\\nΣ is C[x1, . . . , xm] then the Cox ring of P(E) is\\n\\nC[x1, . . . , xm, y1, . . . , ys]\\n\\nMoreover for X a quasi-smooth intersection subvariety cut off by f1, . . . , fs with deg(fi) = [Li] we relate the hypersurface Y cut off by F = y1f1 + ⋅ ⋅ ⋅ + ysfs which turns out to be quasi-smooth. For more details see Section 2 in [7].\\n\\n5\\n\\n△\\n\\nWe will denote P(E) as Pd+s−1\\n\\nΣ,X to keep track of its relation with X and Pd Σ.\\n\\nThe following is a key remark.\\n\\nRemark 4.1. There is a morphism ι ∶ X → Y ⊂ Pd+s−1 with y ≠ 0 has a preimage. Hence for any subvariety W = V(IW ) ⊂ X ⊂ Pd W ′ ⊂ Y ⊂ Pd+s−1 Σ,X such that π(W ′) = W , i.e., W ′ = {z = (x, y) ∣ x ∈ W }.\\n\\nΣ,X . Moreover every point z ∶= (x, y) ∈ Y Σ there exists\\n\\n△\\n\\nFor X ⊂ Pd\\n\\nΣ a quasi-smooth intersection variety the morphism in cohomology induced\\n\\nby the inclusion i∗ ∶ H d−s(Pd\\n\\nΣ, C) → H d−s(X, C) is injective by Proposition 1.4 in [7].\\n\\nDefinition 4.2. The primitive cohomology of H d−s and H d−s prim(X, Q) with rational coefficients.\\n\\nprim(X) is the quotient H d−s(X, C)/i∗(H d−s(Pd\\n\\nH d−s(Pd\\n\\nΣ, C) and H d−s(X, C) have pure Hodge structures, and the morphism i∗ is com-\\n\\npatible with them, so that H d−s\\n\\nprim(X) gets a pure Hodge structure.\\n\\nThe next Proposition is the Cayley proposition.\\n\\nProposition 4.3. [Proposition 2.3 in [3] ] Let X = X1 ∩⋅ ⋅ ⋅∩Xs be a quasi-smooth intersec- , d+s−3 tion subvariety in Pd 2\\n\\nΣ cut off by homogeneous polynomials f1 . . . fs. Then for p ≠ d+s−1\\n\\n2\\n\\nH p−1,d+s−1−p\\n\\nprim\\n\\n(Y ) ≃ H p−s,d−p\\n\\nprim (X).\\n\\nCorollary 4.4. If d + s = 2(k + 1),\\n\\nH k+1−s,k+1−s\\n\\nprim\\n\\n(X) ≃ H k,k\\n\\nprim(Y )\\n\\nRemark 4.5. The above isomorphisms are also true with rational coefficients since H ●(X, C) = H ●(X, Q) ⊗Q C. See the beginning of Section 7.1 in [10] for more details.\\n\\n△\\n\\n5 Main result\\n\\nTheorem 5.1. Let Y = {F = y1f1 + ⋯ + ykfk = 0} ⊂ P2k+1 associated to the quasi-smooth intersection surface X = Xf1 ∩ ⋅ ⋅ ⋅ ∩ Xfk ⊂ Pk+2 the Hodge conjecture holds.\\n\\nΣ,X be the quasi-smooth hypersurface Σ . Then on Y\\n\\nProof. If H k,k proposition H k,k\\n\\nprim(X, Q) = 0 we are done. So let us assume H k,k\\n\\nprim(X, Q) ≠ 0. By the Cayley prim(X, Q) and by the (1, 1)-Lefschetz theorem for projective\\n\\nprim(Y, Q) ≃ H 1,1\\n\\n6\\n\\nΣ, C))\\n\\ntoric orbifolds there is a non-zero algebraic basis λC1, . . . , λCn with rational coefficients of H 1,1 prim(X, Q) algebraic curves C1, . . . , Cn in X such that under the Poincar´e duality the class in homology [Ci] goes to λCi, [Ci] ↦ λCi. Recall that the Cox ring of Pk+2 is contained in the Cox ring of P2k+1 Σ,X without considering the Σ ) then (α, 0) ∈ Cl(P2k+1 grading. Considering the grading we have that if α ∈ Cl(Pk+2 Σ,X ). So the polynomials defining Ci ⊂ Pk+2 X,Σ but with different degree. Moreover, by Remark 4.1 each Ci is contained in Y = {F = y1f1 + ⋯ + ykfk = 0} and furthermore it has codimension k.\\n\\nprim(X, Q), that is, there are n ∶= h1,1\\n\\ncan be interpreted in P2k+1\\n\\nΣ\\n\\ni=1 is a basis of H k,k It is enough to prove that λCi is different from zero in H k,k prim(Y, Q) or equivalently that the cohomology classes {λCi}n i=1 do not come from the ambient space. By contradiction, let us assume that there exists a j and C ⊂ P2k+1 Σ,X , Q) with i∗(λC) = λCj or in terms of homology there exists a (k + 2)-dimensional algebraic subvariety V ⊂ P2k+1 Σ,X such that V ∩ Y = Cj so they are equal as a homology class of P2k+1 Σ,X ,i.e., [V ∩ Y ] = [Cj] . Σ where π ∶ (x, y) ↦ x. Hence It is easy to check that π(V ) ∩ X = Cj as a subvariety of Pk+2 [π(V ) ∩ X] = [Cj] which is equivalent to say that λCj comes from Pk+2 Σ which contradicts the choice of [Cj].\\n\\nClaim: {λCi}n\\n\\nprim(Y, Q).\\n\\nΣ,X such that λC ∈ H k,k(P2k+1\\n\\nRemark 5.2. Into the proof of the previous theorem, the key fact was that on X the Hodge conjecture holds and we translate it to Y by contradiction. So, using an analogous argument we have:\\n\\nProposition 5.3. Let Y = {F = y1fs+⋯+ysfs = 0} ⊂ P2k+1 associated to a quasi-smooth intersection subvariety X = Xf1 ∩ ⋅ ⋅ ⋅ ∩ Xfs ⊂ Pd d + s = 2(k + 1). If the Hodge conjecture holds on X then it holds as well on Y .\\n\\nΣ,X be the quasi-smooth hypersurface Σ such that\\n\\nCorollary 5.4. If the dimension of Y is 2s − 1, 2s or 2s + 1 then the Hodge conjecture holds on Y .\\n\\nProof. By Proposition 5.3 and Corollary 3.6.\\n\\n7\\n\\n△\\n\\nReferences\\n\\n[1] Angella, D. Cohomologies of certain orbifolds. Journal of Geometry and Physics\\n\\n71 (2013), 117–126.\\n\\n[2] Batyrev, V. V., and Cox, D. A. On the Hodge structure of projective hypersur-\\n\\nfaces in toric varieties. Duke Mathematical Journal 75, 2 (Aug 1994).\\n\\n[3] Bruzzo, U., and Montoya, W. On the Hodge conjecture for quasi-smooth in- tersections in toric varieties. S˜ao Paulo J. Math. Sci. Special Section: Geometry in Algebra and Algebra in Geometry (2021).\\n\\n[4] Caramello Jr, F. C. Introduction to orbifolds. arXiv:1909.08699v6 (2019).\\n\\n[5] Cox, D., Little, J., and Schenck, H. Toric varieties, vol. 124. American Math-\\n\\nematical Soc., 2011.\\n\\n[6] Griffiths, P., and Harris, J. Principles of Algebraic Geometry. John Wiley &\\n\\nSons, Ltd, 1978.\\n\\n[7] Mavlyutov, A. R. Cohomology of complete intersections in toric varieties. Pub-\\n\\nlished in Pacific J. of Math. 191 No. 1 (1999), 133–144.\\n\\n[8] Satake, I. On a Generalization of the Notion of Manifold. Proceedings of the National Academy of Sciences of the United States of America 42, 6 (1956), 359–363.\\n\\n[9] Steenbrink, J. H. M. Intersection form for quasi-homogeneous singularities. Com-\\n\\npositio Mathematica 34, 2 (1977), 211–223.\\n\\n[10] Voisin, C. Hodge Theory and Complex Algebraic Geometry I, vol. 1 of Cambridge\\n\\nStudies in Advanced Mathematics. Cambridge University Press, 2002.\\n\\n[11] Wang, Z. Z., and Zaffran, D. A remark on the Hard Lefschetz theorem for K¨ahler orbifolds. Proceedings of the American Mathematical Society 137, 08 (Aug 2009).\\n\\n8')" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], + "execution_count": null, "source": [ - "from langchain_community.document_loaders import OnlinePDFLoader\n", + "from langchain_community.document_loaders import FileSystemBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "from langchain_unstructured.document_loaders import UnstructuredPDFParser\n", "\n", - "loader = OnlinePDFLoader(\"https://arxiv.org/pdf/2302.03803.pdf\")\n", - "data = loader.load()\n", - "data[0]" + "loader = GenericLoader(\n", + " blob_loader=FileSystemBlobLoader(\n", + " path=\"./example_data/\",\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=UnstructuredPDFParser(\n", + " strategy=STRATEGY,\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" ] }, { + "metadata": {}, "cell_type": "markdown", + "source": "It is possible to work with files from cloud storage." + }, + { "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": [ + "from langchain_community.document_loaders import CloudBlobLoader\n", + "from langchain_community.document_loaders.generic import GenericLoader\n", + "\n", + "loader = GenericLoader(\n", + " blob_loader=CloudBlobLoader(\n", + " url=\"s3:/mybucket\", # Supports s3://, az://, gs://, file:// schemes.\n", + " glob=\"*.pdf\",\n", + " ),\n", + " blob_parser=UnstructuredPDFParser(\n", + " strategy=STRATEGY,\n", + " ),\n", + ")\n", + "docs = loader.load()\n", + "print(docs[0].page_content)\n", + "pprint.pp(docs[0].metadata)" + ] + }, + { + "metadata": {}, + "cell_type": "markdown", "source": [ - "## Lazy Load" + "### Using Unstructured via API\n", + "\n", + "UNSTRUCTURED_API_KEY" ] }, { + "metadata": {}, "cell_type": "code", - "execution_count": 9, + "outputs": [], + "execution_count": null, + "source": [ + "import os\n", + "\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()\n", + "from getpass import getpass\n", + "\n", + "if not os.environ.get(\"UNSTRUCTURED_API_KEY\"):\n", + " os.environ[\"UNSTRUCTURED_API_KEY\"] = getpass(\"Unstructured API key =\")" + ] + }, + { "metadata": {}, + "cell_type": "code", "outputs": [], + "execution_count": null, "source": [ - "page = []\n", - "for doc in loader.lazy_load():\n", - " page.append(doc)\n", - " if len(page) >= 10:\n", - " # do some paged operation, e.g.\n", - " # index.upsert(page)\n", + " loader = UnstructuredPDFLoader(\n", + " file_path=file_path,\n", + " partition_via_api=True,\n", + " strategy=\"fast\",\n", + " include_page_breaks=True,\n", + " coordinates=True,\n", + " )\n", "\n", - " page = []" + " docs = loader.load()\n" ] }, { - "cell_type": "markdown", "metadata": {}, + "cell_type": "markdown", "source": [ "## API reference\n", "\n", - "For detailed documentation of all UnstructuredPDFLoader features and configurations head to the API reference: https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.pdf.UnstructuredPDFLoader.html" + "For detailed documentation of all `UnstructuredPDFLoader` features and configurations head to the API reference: https://python.langchain.com/api_reference/unstructured/" ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "" } ], "metadata": { diff --git a/libs/community/langchain_community/document_loaders/__init__.py b/libs/community/langchain_community/document_loaders/__init__.py index 8a56f918ab6ac..5db058b649095 100644 --- a/libs/community/langchain_community/document_loaders/__init__.py +++ b/libs/community/langchain_community/document_loaders/__init__.py @@ -87,6 +87,7 @@ from langchain_community.document_loaders.blob_loaders import ( Blob, BlobLoader, + CloudBlobLoader, FileSystemBlobLoader, YoutubeAudioLoader, ) @@ -359,6 +360,7 @@ PyPDFium2Loader, PyPDFLoader, UnstructuredPDFLoader, + ZeroxPDFLoader, ) from langchain_community.document_loaders.pebblo import ( PebbloSafeLoader, @@ -574,6 +576,7 @@ "CSVLoader": "langchain_community.document_loaders.csv_loader", "CassandraLoader": "langchain_community.document_loaders.cassandra", "ChatGPTLoader": "langchain_community.document_loaders.chatgpt", + "CloudBlobLoader": "langchain_community.document_loaders.blob_loaders", "CoNLLULoader": "langchain_community.document_loaders.conllu", "CollegeConfidentialLoader": "langchain_community.document_loaders.college_confidential", # noqa: E501 "ConcurrentLoader": "langchain_community.document_loaders.concurrent", @@ -730,6 +733,7 @@ "YoutubeAudioLoader": "langchain_community.document_loaders.blob_loaders", "YoutubeLoader": "langchain_community.document_loaders.youtube", "YuqueLoader": "langchain_community.document_loaders.yuque", + "ZeroxPDFLoader": "langchain_community.document_loaders.pdf", } @@ -781,6 +785,7 @@ def __getattr__(name: str) -> Any: "CSVLoader", "CassandraLoader", "ChatGPTLoader", + "CloudBlobLoader", "CoNLLULoader", "CollegeConfidentialLoader", "ConcurrentLoader", @@ -937,4 +942,5 @@ def __getattr__(name: str) -> Any: "YoutubeAudioLoader", "YoutubeLoader", "YuqueLoader", + "ZeroxPDFLoader", ] diff --git a/libs/community/langchain_community/document_loaders/parsers/__init__.py b/libs/community/langchain_community/document_loaders/parsers/__init__.py index 13261622d18f8..134c593684b58 100644 --- a/libs/community/langchain_community/document_loaders/parsers/__init__.py +++ b/libs/community/langchain_community/document_loaders/parsers/__init__.py @@ -26,6 +26,7 @@ PyMuPDFParser, PyPDFium2Parser, PyPDFParser, + ZeroxPDFParser, ) from langchain_community.document_loaders.parsers.vsdx import ( VsdxParser, @@ -44,6 +45,7 @@ "PyMuPDFParser": "langchain_community.document_loaders.parsers.pdf", "PyPDFParser": "langchain_community.document_loaders.parsers.pdf", "PyPDFium2Parser": "langchain_community.document_loaders.parsers.pdf", + "ZeroxPDFParser": "langchain_community.document_loaders.parsers.pdf", "VsdxParser": "langchain_community.document_loaders.parsers.vsdx", } @@ -67,5 +69,6 @@ def __getattr__(name: str) -> Any: "PyMuPDFParser", "PyPDFParser", "PyPDFium2Parser", + "ZeroxPDFParser", "VsdxParser", ] diff --git a/libs/community/langchain_community/document_loaders/parsers/pdf.py b/libs/community/langchain_community/document_loaders/parsers/pdf.py index 702d5998dd7c2..479904b243ec3 100644 --- a/libs/community/langchain_community/document_loaders/parsers/pdf.py +++ b/libs/community/langchain_community/document_loaders/parsers/pdf.py @@ -2,36 +2,51 @@ from __future__ import annotations +import asyncio +import base64 +import html +import io +import logging +import threading import warnings +from datetime import datetime +from pathlib import Path +from tempfile import NamedTemporaryFile, TemporaryDirectory from typing import ( TYPE_CHECKING, Any, - Dict, + BinaryIO, + Callable, Iterable, Iterator, + Literal, Mapping, Optional, Sequence, Union, + cast, ) from urllib.parse import urlparse import numpy as np +from langchain_core._api.deprecation import ( + deprecated, +) from langchain_core.documents import Document +from langchain_core.language_models import BaseChatModel +from langchain_core.messages import HumanMessage +from langchain_core.prompts import BasePromptTemplate, PromptTemplate from langchain_community.document_loaders.base import BaseBlobParser from langchain_community.document_loaders.blob_loaders import Blob if TYPE_CHECKING: - import fitz.fitz - import pdfminer.layout - import pdfplumber.page - import pypdf._page - import pypdfium2._helpers.page - from pypdf import PageObject + import pdfplumber + import pymupdf + import pypdf + import pypdfium2 from textractor.data.text_linearization_config import TextLinearizationConfig - _PDF_FILTER_WITH_LOSS = ["DCTDecode", "DCT", "JPXDecode"] _PDF_FILTER_WITHOUT_LOSS = [ "LZWDecode", @@ -49,7 +64,121 @@ "JBIG2Decode", ] +logger = logging.getLogger(__name__) + +_format_image_str = "\n\n{image_text}\n\n" +_join_images = "\n" +_join_tables = "\n" +_default_page_delimitor = "\n\f" + + +def purge_metadata(metadata: dict[str, Any]) -> dict[str, Any]: + """ + Purge metadata from unwanted keys and normalize key names. + + Args: + metadata: The original metadata dictionary. + + Returns: + The cleaned and normalized metadata dictionary. + """ + new_metadata: dict[str, Any] = {} + map_key = { + "page_count": "total_pages", + "file_path": "source", + } + for k, v in metadata.items(): + if type(v) not in [str, int]: + v = str(v) + if k.startswith("/"): + k = k[1:] + k = k.lower() + if k in ["creationdate", "moddate"]: + try: + new_metadata[k] = datetime.strptime( + v.replace("'", ""), "D:%Y%m%d%H%M%S%z" + ).isoformat("T") + except ValueError: + new_metadata[k] = v + elif k in map_key: + # Normliaze key with others PDF parser + new_metadata[map_key[k]] = v + new_metadata[k] = v + elif isinstance(v, str): + new_metadata[k] = v.strip() + elif isinstance(v, int): + new_metadata[k] = v + return new_metadata + + +_delim = ["\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, recurs: bool +) -> Optional[str]: + """ + Insert extras such as image/table in a text between two paragraphs if possible. + Recursive version. + + Args: + extras: List of extra content (images/tables) to insert. + text_from_page: The text content from the page. + recurs: Flag to indicate if the function should recurse. + + Returns: + The merged text with extras inserted, or None if no insertion point is found. + """ + if extras: + for delim in _delim: + pos = text_from_page.rfind(delim) + if pos != -1: + # search penultimate, to bypass an error in footer + previous_text = None + if recurs: + previous_text = __merge_text_and_extras( + extras, text_from_page[:pos], False + ) + if previous_text: + all_text = previous_text + text_from_page[pos:] + else: + all_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:] + break + else: + all_text = None + else: + all_text = text_from_page + return all_text + + +def _merge_text_and_extras(extras: list[str], text_from_page: str) -> str: + """ + Insert extras such as image/table in a text between two paragraphs if possible, + else at the end of the text. + + Args: + extras: List of extra content (images/tables) to insert. + text_from_page: The text content from the page. + + Returns: + The merged text with extras inserted. + """ + all_text = __merge_text_and_extras(extras, text_from_page, True) + if not all_text: + all_extras = "" + str_extras = "\n\n".join(filter(lambda x: x, extras)) + if str_extras: + all_extras = _delim[-1] + str_extras + all_text = text_from_page + all_extras + + return all_text + +@deprecated(since="3.0.0", alternative="Use parameter images_to_text") def extract_from_images_with_rapidocr( images: Sequence[Union[Iterable[np.ndarray], bytes]], ) -> str: @@ -81,430 +210,2080 @@ def extract_from_images_with_rapidocr( return text -class PyPDFParser(BaseBlobParser): - """Load `PDF` using `pypdf`""" +# Type to change the function to convert images to text. +CONVERT_IMAGE_TO_TEXT = Optional[Callable[[Iterable[np.ndarray]], Iterator[str]]] + + +def convert_images_to_text_with_rapidocr( + # Default to text format to be compatible with previous versions. + *, + format: Literal["text", "markdown", "html"] = "text", +) -> CONVERT_IMAGE_TO_TEXT: + """ + Return a function to convert images to text using RapidOCR. + + Note: RapidOCR is compatible english and chinese languages. + + Args: + format: Format of the output text. Either "text" or "markdown". + """ + + def _convert_images_to_text(images: Iterable[np.ndarray]) -> Iterator[str]: + 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() + + for img in images: + ocr_result, _ = ocr(img) + if ocr_result: + result = ("\n".join([text[1] for text in ocr_result])).strip() + if result: + if format == "markdown": + result = result.replace("]", r"\\]") + result = f"![{result}](.)" + elif format == "html": + result = f'{html.escape(result, quote=True)}' + logger.debug("RapidOCR text: %s", result.replace("\n", "\\n")) + yield result + else: + yield "" + + _convert_images_to_text.creator = ( # type: ignore[attr-defined] + convert_images_to_text_with_rapidocr + ) + return _convert_images_to_text + + +def convert_images_to_text_with_tesseract( + # Default to text format to be compatible with previous versions. + *, + format: Literal["text", "markdown", "html"] = "text", + langs: list[str] = ["eng"], +) -> CONVERT_IMAGE_TO_TEXT: + """ + Return a function to convert images to text using Tesseract. + Args: + format: Format of the output text. Either "text" or "markdown". + langs: Array of langs for Tesseract + """ + + def _convert_images_to_text(images: Iterable[np.ndarray]) -> Iterator[str]: + try: + import pytesseract + except ImportError: + raise ImportError( + "`pytesseract` package not found, please install it with " + "`pip install pytesseract`" + ) + + for img in images: + result = pytesseract.image_to_string(img, lang="+".join(langs)).strip() + if result: + if format == "markdown": + result = result.replace("]", r"\\]") + result = f"![{result}](.)" + elif format == "html": + result = f'{html.escape(result, quote=True)}' + logger.debug("Tesseract text: %s", result.replace("\n", "\\n")) + yield result + + _convert_images_to_text.creator = ( # type: ignore[attr-defined] + convert_images_to_text_with_tesseract + ) + return _convert_images_to_text + + +_prompt_images_to_description = PromptTemplate.from_template( + """You are an assistant tasked with summarizing 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.""" +) + + +def convert_images_to_description( + model: BaseChatModel, + *, + prompt: BasePromptTemplate = _prompt_images_to_description, + format: Literal["text", "markdown", "html"] = "markdown", +) -> CONVERT_IMAGE_TO_TEXT: + """ + Return a function to convert images to text using a multimodal model. + + Args: + model: Multimodal model to use to describe the images. + prompt: Optional prompt to use to describe the images. + format: Format of the output text. Either "text" or "markdown". + + Returns: + A function to extract text from images using the multimodal model. + """ + + def _convert_images_to_description( + images: Iterable[np.ndarray], + ) -> Iterator[str]: + try: + from PIL import Image + except ImportError: + raise ImportError( + "`PIL` package not found, please install it with `pip install pillow`" + ) + chat = model + for image in images: + image_bytes = io.BytesIO() + Image.fromarray(image).save(image_bytes, format="PNG") + img_base64 = base64.b64encode(image_bytes.getvalue()).decode("utf-8") + msg = chat.invoke( + [ + HumanMessage( + content=[ + {"type": "text", "text": prompt.format()}, + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{img_base64}" + }, + }, + ] + ) + ] + ) + result = msg.content + assert isinstance(result, str) + if result: + if format == "markdown": + result = result.replace("]", r"\\]") + result = f"![{result}](.)" + elif format == "html": + result = f'{str(html.escape(result, quote=True))}' + elif format == "text": + pass + else: + raise ValueError(f"Unknown format: {format}") + logger.debug("LLM description: %s", result.replace("\n", "\\n")) + yield result + + _convert_images_to_description.creator = ( # type: ignore[attr-defined] + convert_images_to_description + ) + return _convert_images_to_description + + +class ImagesPdfParser(BaseBlobParser): + """Abstract interface for blob parsers with images_to_text.""" + + def __init__( + self, + extract_images: bool, + images_to_text: CONVERT_IMAGE_TO_TEXT, + ): + """Extract text from images. + + Args: + extract_images: Whether to extract images from PDF. + images_to_text: Optional function to extract text from images. + """ + self.extract_images = extract_images + + self.convert_image_to_text = cast( + Callable[[Iterable[np.ndarray]], Iterator[str]], + (images_to_text or convert_images_to_text_with_rapidocr()), + ) + + +class PyPDFParser(ImagesPdfParser): + """Parse a blob from a PDF using `pypdf` library. + + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images. + It integrates the 'pypdf' library for PDF processing and offers synchronous blob + parsing. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pypdf + + Load a blob from a PDF file: + + .. code-block:: python + + from langchain_core.documents.base import Blob + + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python + + from langchain_community.document_loaders.parsers import PyPDFParser + + parser = PyPDFParser( + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ + + def __init__( + self, + password: Optional[Union[str, bytes]] = None, + extract_images: bool = False, + *, # Move on top ? + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extraction_mode: Literal["plain", "layout"] = "plain", + extraction_kwargs: Optional[dict[str, Any]] = None, + ): + """Initialize a parser based on PyPDF. + + Args: + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extraction_mode: “plain” for legacy functionality, “layout” for experimental + layout mode functionality + extraction_kwargs: Optional additional parameters for the extraction + process. + + Returns: + This method does not directly return data. Use the `parse` or `lazy_parse` + methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the `mode` is not "single" or "page". + """ + super().__init__(extract_images, images_to_text) + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + self.password = password + self.mode = mode + self.pages_delimitor = pages_delimitor + self.extraction_mode = extraction_mode + self.extraction_kwargs = extraction_kwargs or {} + + def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] + """ + Lazily parse the blob. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + + Args: + blob: The blob to parse. + + Raises: + ImportError: If the `pypdf` package is not found. + + Yield: + An iterator over the parsed documents. + """ + try: + import pypdf + except ImportError: + raise ImportError( + "pypdf package not found, please install it with `pip install pypdf`" + ) + + def _extract_text_from_page(page: pypdf.PageObject) -> str: + """ + Extract text from image given the version of pypdf. + + Args: + page: The page object to extract text from. + + Returns: + str: The extracted text. + """ + if pypdf.__version__.startswith("3"): + return page.extract_text() + else: + return page.extract_text( + extraction_mode=self.extraction_mode, + **self.extraction_kwargs, + ) + + with blob.as_bytes_io() as pdf_file_obj: # type: ignore[attr-defined] + pdf_reader = pypdf.PdfReader(pdf_file_obj, password=self.password) + + doc_metadata = purge_metadata( + cast(dict, pdf_reader.metadata or {}) + | { + "source": blob.source, + "total_pages": len(pdf_reader.pages), + } + ) + single_texts = [] + for page_number, page in enumerate(pdf_reader.pages): + text_from_page = _extract_text_from_page(page=page) + images_from_page = self.extract_images_from_page(page) + all_text = _merge_text_and_extras( + [images_from_page], text_from_page + ).strip() + if self.mode == "page": + yield Document( + page_content=all_text, + metadata=doc_metadata | {"page": page_number}, + ) + else: + single_texts.append(all_text) + if self.mode == "single": + yield Document( + page_content=self.pages_delimitor.join(single_texts), + metadata=doc_metadata, + ) + + def extract_images_from_page(self, page: pypdf._page.PageObject) -> str: + """Extract images from a PDF page and get the text using images_to_text. + + Args: + page: The page object from which to extract images. + + Returns: + str: The extracted text from the images on the page. + """ + from PIL import Image + + if ( + not self.extract_images + or "/XObject" not in cast(dict, page["/Resources"]).keys() + ): + return "" + + xObject = page["/Resources"]["/XObject"].get_object() # type: ignore[index] + images = [] + for obj in xObject: + if xObject[obj]["/Subtype"] == "/Image": + if xObject[obj]["/Filter"][1:] in _PDF_FILTER_WITHOUT_LOSS: + height, width = xObject[obj]["/Height"], xObject[obj]["/Width"] + + images.append( + np.frombuffer(xObject[obj].get_data(), dtype=np.uint8).reshape( + height, width, -1 + ) + ) + elif xObject[obj]["/Filter"][1:] in _PDF_FILTER_WITH_LOSS: + images.append( + np.array(Image.open(io.BytesIO(xObject[obj].get_data()))) + ) + + else: + logger.warning("Unknown PDF Filter!") + return _format_image_str.format( + image_text=_join_images.join(self.convert_image_to_text(images)) + ) + + +class PDFMinerParser(ImagesPdfParser): + """Parse a blob from a PDF using `pdfminer.six` library. + + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images, and + defining extraction mode. + It integrates the 'pdfminer.six' library for PDF processing and offers synchronous + blob parsing. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pdfminer.six pillow + + Load a blob from a PDF file: + + .. code-block:: python + + from langchain_core.documents.base import Blob + + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python + + from langchain_community.document_loaders.parsers import PDFMinerParser + + parser = PDFMinerParser( + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ + + _warn_concatenate_pages = False + + def __init__( + self, + extract_images: bool = False, + *, + password: Optional[str] = None, + mode: Literal["single", "page"] = "single", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + concatenate_pages: Optional[bool] = None, + ): + """Initialize a parser based on PDFMiner. + + Args: + password: Optional password for opening encrypted PDFs. + mode: Extraction mode to use. Either "single" or "page" for page-wise + extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + concatenate_pages: Deprecated. If True, concatenate all PDF pages + into one a single document. Otherwise, return one document per page. + + Returns: + This method does not directly return data. Use the `parse` or `lazy_parse` + methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the `mode` is not "single" or "page". + + Warnings: + `concatenate_pages` parameter is deprecated. Use `mode='single' or 'page' + instead. + """ + super().__init__(extract_images, images_to_text) + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + self.mode = mode + self.pages_delimitor = pages_delimitor + self.password = password + self.extract_images = extract_images + self.images_to_text = images_to_text + if concatenate_pages is not None: + if not PDFMinerParser._warn_concatenate_pages: + PDFMinerParser._warn_concatenate_pages = True + logger.warning( + "`concatenate_pages` parameter is deprecated. " + "Use `mode='single' or 'page'` instead." + ) + self.mode = "single" if concatenate_pages else "page" + + @staticmethod + def decode_text(s: Union[bytes, str]) -> str: + """ + Decodes a PDFDocEncoding string to Unicode. + Adds py3 compatibility to pdfminer's version. + + Args: + s: The string to decode. + + Returns: + str: The decoded Unicode string. + """ + from pdfminer.utils import PDFDocEncoding + + if isinstance(s, bytes) and s.startswith(b"\xfe\xff"): + return str(s[2:], "utf-16be", "ignore") + try: + ords = (ord(c) if isinstance(c, str) else c for c in s) + return "".join(PDFDocEncoding[o] for o in ords) + except IndexError: + return str(s) + + @staticmethod + def resolve_and_decode(obj: Any) -> Any: + """ + Recursively resolve the metadata values. + + Args: + obj: The object to resolve and decode. It can be of any type. + + Returns: + The resolved and decoded object. + """ + from pdfminer.psparser import PSLiteral + + if hasattr(obj, "resolve"): + obj = obj.resolve() + if isinstance(obj, list): + return list(map(PDFMinerParser.resolve_and_decode, obj)) + elif isinstance(obj, PSLiteral): + return PDFMinerParser.decode_text(obj.name) + elif isinstance(obj, (str, bytes)): + return PDFMinerParser.decode_text(obj) + elif isinstance(obj, dict): + for k, v in obj.items(): + obj[k] = PDFMinerParser.resolve_and_decode(v) + return obj + + return obj + + def _get_metadata( + self, + fp: BinaryIO, + password: str = "", + caching: bool = True, + ) -> dict[str, Any]: + """ + Extract metadata from a PDF file. + + Args: + fp: The file pointer to the PDF file. + password: The password for the PDF file, if encrypted. Defaults to an empty + string. + caching: Whether to cache the PDF structure. Defaults to True. + + Returns: + Metadata of the PDF file. + """ + from pdfminer.pdfpage import PDFDocument, PDFPage, PDFParser + + # Create a PDF parser object associated with the file object. + parser = PDFParser(fp) + # Create a PDF document object that stores the document structure. + doc = PDFDocument(parser, password=password, caching=caching) + metadata = {} + + for info in doc.info: + metadata.update(info) + for k, v in metadata.items(): + try: + metadata[k] = PDFMinerParser.resolve_and_decode(v) + except Exception as e: # pragma: nocover + # This metadata value could not be parsed. Instead of failing the PDF + # read, treat it as a warning only if `strict_metadata=False`. + logger.warning( + '[WARNING] Metadata key "%s" could not be parsed due to ' + "exception: %s", + k, + str(e), + ) + + # Count number of pages. + metadata["total_pages"] = len(list(PDFPage.create_pages(doc))) + + return metadata + + def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] + """ + Lazily parse the blob. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + + Args: + blob: The blob to parse. + + Raises: + ImportError: If the `pdfminer.six` or `pillow` package is not found. + + Yield: + An iterator over the parsed documents. + """ + try: + from pdfminer.converter import PDFLayoutAnalyzer + from pdfminer.layout import ( + LAParams, + LTContainer, + LTImage, + LTItem, + LTPage, + LTText, + LTTextBox, + ) + from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager + from pdfminer.pdfpage import PDFPage + except ImportError: + raise ImportError( + "pdfminer package not found, please install it " + "with `pip install pdfminer.six`" + ) + try: + from PIL import Image + except ImportError: + raise ImportError( + "pdfminer package not found, please install it " + "with `pip install pillow`" + ) + + with blob.as_bytes_io() as pdf_file_obj, TemporaryDirectory() as tempdir: + pages = PDFPage.get_pages(pdf_file_obj, password=self.password or "") + rsrcmgr = PDFResourceManager() + doc_metadata = purge_metadata( + self._get_metadata(pdf_file_obj, password=self.password or "") + ) + doc_metadata["source"] = blob.source + + class Visitor(PDFLayoutAnalyzer): + def __init__( + self, + rsrcmgr: PDFResourceManager, + pageno: int = 1, + laparams: Optional[LAParams] = None, + ) -> None: + super().__init__(rsrcmgr, pageno=pageno, laparams=laparams) + + def receive_layout(me, ltpage: LTPage) -> None: + def render(item: LTItem) -> None: + if isinstance(item, LTContainer): + for child in item: + render(child) + elif isinstance(item, LTText): + text_io.write(item.get_text()) + if isinstance(item, LTTextBox): + text_io.write("\n") + elif isinstance(item, LTImage): + if self.extract_images and self.images_to_text: + from pdfminer.image import ImageWriter + + image_writer = ImageWriter(tempdir) + filename = image_writer.export_image(item) + img = np.array(Image.open(Path(tempdir) / filename)) + image_text = next(self.images_to_text([img])) + if image_text: + text_io.write( + _format_image_str.format(image_text=image_text) + ) + else: + pass + + render(ltpage) + + text_io = io.StringIO() + visitor_for_all = PDFPageInterpreter( + rsrcmgr, Visitor(rsrcmgr, laparams=LAParams()) + ) + all_content = [] + for i, page in enumerate(pages): + text_io.truncate(0) + text_io.seek(0) + visitor_for_all.process_page(page) + + all_text = text_io.getvalue() + # For legacy compatibility, net strip() + all_text = all_text.strip() + if self.mode == "page": + text_io.truncate(0) + text_io.seek(0) + yield Document( + page_content=all_text, metadata=doc_metadata | {"page": i} + ) + else: + if all_text.endswith("\f"): + all_text = all_text[:-1] + all_content.append(all_text) + if self.mode == "single": + # Add page_delimitor between pages + document_content = self.pages_delimitor.join(all_content) + yield Document( + page_content=document_content, + metadata=doc_metadata, + ) + + +class PyMuPDFParser(ImagesPdfParser): + """Parse a blob from a PDF using `PyMuPDF` library. + + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images, and + defining extraction mode. + It integrates the 'PyMuPDF' library for PDF processing and offers synchronous blob + parsing. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pymupdf + + Load a blob from a PDF file: + + .. code-block:: python + + from langchain_core.documents.base import Blob + + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python + + from langchain_community.document_loaders.parsers import PyMuPDFParser + + parser = PyMuPDFParser( + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + # extract_tables="markdown", + # extract_tables_settings=None, + # text_kwargs=None, + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ + + # PyMuPDF is not thread safe. + # See https://pymupdf.readthedocs.io/en/latest/recipes-multiprocessing.html + _lock = threading.Lock() + + def __init__( + self, + text_kwargs: Optional[dict[str, Any]] = None, + extract_images: bool = False, + *, + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extract_tables: Union[Literal["csv", "markdown", "html"], None] = None, + extract_tables_settings: Optional[dict[str, Any]] = None, + ) -> None: + """Initialize a parser based on PyMuPDF. + + Args: + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extract_tables: Whether to extract tables in a specific format, such as + "csv", "markdown", or "html". + extract_tables_settings: Optional dictionary of settings for customizing + table extraction. + **kwargs: Additional keyword arguments for customizing text extraction + behavior. + + Returns: + This method does not directly return data. Use the `parse` or `lazy_parse` + methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the mode is not "single" or "page". + ValueError: If the extract_tables format is not "markdown", "html", + or "csv". + """ + super().__init__(extract_images, images_to_text) + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + if extract_tables and extract_tables not in ["markdown", "html", "csv"]: + raise ValueError("mode must be markdown") + + self.mode = mode + self.pages_delimitor = pages_delimitor + self.password = password + self.text_kwargs = text_kwargs or {} + self.extract_images = extract_images + self.extract_tables = extract_tables + self.extract_tables_settings = extract_tables_settings + + def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] + """ + Lazily parse the blob. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + + Args: + blob: The blob to parse. + + Raises: + ImportError: If the `pypdf` package is not found. + + Yield: + An iterator over the parsed documents. + """ + try: + import pymupdf + + if not self.extract_tables_settings: + from pymupdf.table import ( + DEFAULT_JOIN_TOLERANCE, + DEFAULT_MIN_WORDS_HORIZONTAL, + DEFAULT_MIN_WORDS_VERTICAL, + DEFAULT_SNAP_TOLERANCE, + ) + + self.extract_tables_settings = { + "clip": None, + "vertical_strategy": "lines", + "horizontal_strategy": "lines", + "vertical_lines": None, + "horizontal_lines": None, + "snap_tolerance": DEFAULT_SNAP_TOLERANCE, + "snap_x_tolerance": None, + "snap_y_tolerance": None, + "join_tolerance": DEFAULT_JOIN_TOLERANCE, + "join_x_tolerance": None, + "join_y_tolerance": None, + "edge_min_length": 3, + "min_words_vertical": DEFAULT_MIN_WORDS_VERTICAL, + "min_words_horizontal": DEFAULT_MIN_WORDS_HORIZONTAL, + "intersection_tolerance": 3, + "intersection_x_tolerance": None, + "intersection_y_tolerance": None, + "text_tolerance": 3, + "text_x_tolerance": 3, + "text_y_tolerance": 3, + "strategy": None, # offer abbreviation + "add_lines": None, # optional user-specified lines + } + except ImportError: + raise ImportError( + "pymupdf package not found, please install it " + "with `pip install pymupdf`" + ) + + with PyMuPDFParser._lock: + with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] + if blob.data is None: # type: ignore[attr-defined] + doc = pymupdf.open(file_path) + else: + doc = pymupdf.open(stream=file_path, filetype="pdf") + if doc.is_encrypted: + doc.authenticate(self.password) + doc_metadata = self._extract_metadata(doc, blob) + full_content = [] + 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=(doc_metadata | {"page": page.number}), + ) + else: + full_content.append(all_text) + + if self.mode == "single": + yield Document( + page_content=self.pages_delimitor.join(full_content), + metadata=doc_metadata, + ) + + def _get_page_content( + self, doc: pymupdf.Document, page: pymupdf.Page, blob: Blob + ) -> str: + """ + Get the text of the page using PyMuPDF and RapidOCR and issue a warning + if it is empty. + + Args: + doc: The PyMuPDF document object. + page: The PyMuPDF page object. + blob: The blob being parsed. + + Returns: + str: The text content of the page. + """ + text_from_page = page.get_text(**self.text_kwargs) + images_from_page = self._extract_images_from_page(doc, page) + tables_from_page = self._extract_tables_from_page(page) + extras = [] + if images_from_page: + extras.append(images_from_page) + if tables_from_page: + extras.append(tables_from_page) + all_text = _merge_text_and_extras(extras, text_from_page) + + if not all_text: + # logger.warning( + # "Warning: Empty content on page %s of document %s", + # page.number, + # blob.source, + # ) + pass + + return all_text + + def _extract_metadata(self, doc: pymupdf.Document, blob: Blob) -> dict: + """Extract metadata from the document and page. + + Args: + doc: The PyMuPDF document object. + blob: The blob being parsed. + + Returns: + dict: The extracted metadata. + """ + return purge_metadata( + dict( + { + "source": blob.source, # type: ignore[attr-defined] + "file_path": blob.source, # type: ignore[attr-defined] + "total_pages": len(doc), + }, + **{ + k: doc.metadata[k] + for k in doc.metadata + if isinstance(doc.metadata[k], (str, int)) + }, + ) + ) + + def _extract_images_from_page( + self, doc: pymupdf.Document, page: pymupdf.Page + ) -> str: + """Extract images from a PDF page and get the text using images_to_text. + + Args: + doc: The PyMuPDF document object. + page: The PyMuPDF page object. + + Returns: + str: The extracted text from the images on the page. + """ + if not self.extract_images: + return "" + import pymupdf + + img_list = page.get_images() + images = [] + for img in img_list: + xref = img[0] + pix = pymupdf.Pixmap(doc, xref) + images.append( + np.frombuffer(pix.samples, dtype=np.uint8).reshape( + pix.height, pix.width, -1 + ) + ) + _format_image_str.format( + image_text=_join_images.join(self.convert_image_to_text(images)) + ) + + return _format_image_str.format( + image_text=_join_images.join(self.convert_image_to_text(images)) + ) + + def _extract_tables_from_page(self, page: pymupdf.Page) -> str: + """Extract tables from a PDF page. + + Args: + page: The PyMuPDF page object. + + Returns: + str: The extracted tables in the specified format. + """ + if self.extract_tables is None: + return "" + import pymupdf + + tables_list = list( + pymupdf.table.find_tables(page, **self.extract_tables_settings) + ) + if tables_list: + if self.extract_tables == "markdown": + return _join_tables.join([table.to_markdown() for table in tables_list]) + elif self.extract_tables == "html": + return _join_tables.join( + [ + table.to_pandas().to_html( + header=False, + index=False, + bold_rows=False, + ) + for table in tables_list + ] + ) + elif self.extract_tables == "csv": + return _join_tables.join( + [ + table.to_pandas().to_csv( + header=False, + index=False, + ) + for table in tables_list + ] + ) + else: + raise ValueError( + f"extract_tables {self.extract_tables} not implemented" + ) + return "" + + +class PyPDFium2Parser(ImagesPdfParser): + """Parse a blob from a PDF using `PyPDFium2` library. + + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images, and + defining extraction mode. + It integrates the 'PyPDFium2' library for PDF processing and offers synchronous + blob parsing. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pypdfium2 + + Load a blob from a PDF file: + + .. code-block:: python + + from langchain_core.documents.base import Blob + + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python + + from langchain_community.document_loaders.parsers import PyPDFium2Parser + + parser = PyPDFium2Parser( + # password=None, + mode="page", + pages_delimitor="\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ + + # PyPDFium2 is not thread safe. + # See https://pypdfium2.readthedocs.io/en/stable/python_api.html#thread-incompatibility + _lock = threading.Lock() + warnings.filterwarnings( + "ignore", + module=r"^pypdfium2._helpers.textpage$", + message="get_text_range\\(\\) call with default params will be .*", + ) + + def __init__( + self, + extract_images: bool = False, + *, + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + ) -> None: + """Initialize a parser based on PyPDFium2. + + Args: + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + + Returns: + This method does not directly return data. Use the `parse` or `lazy_parse` + methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the mode is not "single" or "page". + """ + super().__init__(extract_images, images_to_text) + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + self.mode = mode + self.pages_delimitor = pages_delimitor + self.password = password + + def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] + """ + Lazily parse the blob. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + + Args: + blob: The blob to parse. + + Raises: + ImportError: If the `pypdf` package is not found. + + Yield: + An iterator over the parsed documents. + """ + try: + import pypdfium2 + except ImportError: + raise ImportError( + "pypdfium2 package not found, please install it with" + " `pip install pypdfium2`" + ) + + # pypdfium2 is really finicky with respect to closing things, + # if done incorrectly creates seg faults. + with PyPDFium2Parser._lock: + with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] + pdf_reader = None + try: + pdf_reader = pypdfium2.PdfDocument( + file_path, password=self.password, autoclose=True + ) + full_content = [] + + doc_metadata = purge_metadata(pdf_reader.get_metadata_dict()) + doc_metadata["source"] = blob.source + doc_metadata["total_pages"] = len(pdf_reader) + + for page_number, page in enumerate(pdf_reader): + text_page = page.get_textpage() + text_from_page = "\n".join( + text_page.get_text_range().splitlines() + ) # Replace \r\n + text_page.close() + image_from_page = self._extract_images_from_page(page) + all_text = _merge_text_and_extras( + [image_from_page], text_from_page + ).strip() + page.close() + + if self.mode == "page": + # For legacy compatibility, add the last '\n' + if not all_text.endswith("\n"): + all_text += "\n" + yield Document( + page_content=all_text, + metadata={ + **doc_metadata, + "page": page_number, + }, + ) + else: + full_content.append(all_text) + + if self.mode == "single": + yield Document( + page_content=self.pages_delimitor.join(full_content), + metadata=doc_metadata, + ) + finally: + if pdf_reader: + pdf_reader.close() + + def _extract_images_from_page(self, page: pypdfium2._helpers.page.PdfPage) -> str: + """Extract images from a PDF page and get the text using images_to_text. + + Args: + page: The page object from which to extract images. + + Returns: + str: The extracted text from the images on the page. + """ + if not self.extract_images: + return "" + + import pypdfium2.raw as pdfium_c + + images = list(page.get_objects(filter=(pdfium_c.FPDF_PAGEOBJ_IMAGE,))) + + numpy_images = [x.get_bitmap().to_numpy() for x in images] + for image in images: + image.close() + return _format_image_str.format( + image_text=_join_images.join(self.convert_image_to_text(numpy_images)) + ) + + +# The legacy PDFPlumberParser use key with upper case. +# This is not aligned with the new convention, which requires the key to be in +# lower case. +class _PDFPlumberParserMetadata(dict[object, Any]): + _warning_keys: set[str] = set() + + def __init__(self, d: dict[str, Any]): + super().__init__({k.lower(): v for k, v in d.items()}) + self._pdf_metadata_keys = set(d.keys()) + + def _lower(self, k: object) -> object: + if k in self._pdf_metadata_keys: + lk = str(k).lower() + if lk != k: + if k not in _PDFPlumberParserMetadata._warning_keys: + _PDFPlumberParserMetadata._warning_keys.add(str(k)) + logger.warning( + 'The key "%s" with uppercase is deprecated. ' + "Update your code and vectorstore.", + k, + ) + return lk + else: + return k + + def __contains__(self, k: object) -> bool: + return super().__contains__(self._lower(k)) + + def __delitem__(self, k: object) -> None: + super().__delitem__(self._lower(k)) + + def __getitem__(self, k: object) -> Any: + return super().__getitem__(self._lower(k)) + + def get(self, k: object, default: Any = None) -> Any: + return super().get(self._lower(k), default) + + def __setitem__(self, k: object, v: Any) -> None: + super().__setitem__(self._lower(k), v) + + +class PDFPlumberParser(ImagesPdfParser): + """Parse a blob from a PDF using `pdfplumber` library. + + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images, and + defining extraction mode. + It integrates the 'pdfplumber' library for PDF processing and offers synchronous + blob parsing. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pdfplumber + + Load a blob from a PDF file: + + .. code-block:: python + + from langchain_core.documents.base import Blob + + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python + + from langchain_community.document_loaders.parsers import PDFPlumberParser + + parser = PDFPlumberParser( + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + # extract_tables="markdown", + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ def __init__( self, - password: Optional[Union[str, bytes]] = None, + text_kwargs: Optional[Mapping[str, Any]] = None, + dedupe: bool = False, extract_images: bool = False, *, - extraction_mode: str = "plain", - extraction_kwargs: Optional[Dict[str, Any]] = None, - ): + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extract_tables: Optional[Literal["csv", "markdown", "html"]] = None, + extract_tables_settings: Optional[dict[str, Any]] = None, + ) -> None: + """Initialize the parser. + + Args: + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extract_tables: Whether to extract images from the PDF in a specific + format, such as "csv", "markdown" or "html". + text_kwargs: Keyword arguments to pass to ``pdfplumber.Page.extract_text()`` + dedupe: Avoiding the error of duplicate characters if `dedupe=True` + extract_tables_settings: Optional dictionary of settings for customizing + table extraction. + + Returns: + This method does not directly return data. Use the `parse` or `lazy_parse` + methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the `mode` is not "single" or "page". + ValueError: If the `extract_tables` is not "csv", "markdown" or "html". + + """ + super().__init__(extract_images, images_to_text) self.password = password - self.extract_images = extract_images - self.extraction_mode = extraction_mode - self.extraction_kwargs = extraction_kwargs or {} + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + if extract_tables and extract_tables not in ["csv", "markdown", "html"]: + raise ValueError("mode must be csv, markdown or html") + self.mode = mode + self.pages_delimitor = pages_delimitor + self.dedupe = dedupe + self.text_kwargs = text_kwargs or {} + self.extract_tables = extract_tables + self.extract_tables_settings = extract_tables_settings or { + "vertical_strategy": "lines", + "horizontal_strategy": "lines", + "snap_y_tolerance": 5, + "intersection_x_tolerance": 15, + } def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] - """Lazily parse the blob.""" + """ + Lazily parse the blob. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + + Args: + blob: The blob to parse. + + Raises: + ImportError: If the `pypdf` package is not found. + + Yield: + An iterator over the parsed documents. + """ try: - import pypdf + import pdfplumber except ImportError: raise ImportError( - "`pypdf` package not found, please install it with " - "`pip install pypdf`" + "pdfplumber package not found, please install it " + "with `pip install pdfplumber`" ) - def _extract_text_from_page(page: "PageObject") -> str: - """ - Extract text from image given the version of pypdf. - """ - if pypdf.__version__.startswith("3"): - return page.extract_text() - else: - return page.extract_text( - extraction_mode=self.extraction_mode, # type: ignore[arg-type] - **self.extraction_kwargs, # type: ignore[arg-type] + with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] + doc = pdfplumber.open(file_path, password=self.password) # open document + from pdfplumber.utils import geometry # import WordExctractor, TextMap + + contents = [] + doc_metadata = purge_metadata( + ( + doc.metadata + | { + "source": blob.source, + "file_path": blob.source, + "total_pages": len(doc.pages), + } ) - - with blob.as_bytes_io() as pdf_file_obj: # type: ignore[attr-defined] - pdf_reader = pypdf.PdfReader(pdf_file_obj, password=self.password) - - yield from [ - Document( - page_content=_extract_text_from_page(page=page) - + self._extract_images_from_page(page), - metadata={"source": blob.source, "page": page_number}, # type: ignore[attr-defined] + ) + for page in doc.pages: + tables_bbox: list[tuple[float, float, float, float]] = ( + self._extract_tables_bbox_from_page(page) ) - for page_number, page in enumerate(pdf_reader.pages) - ] - - def _extract_images_from_page(self, page: pypdf._page.PageObject) -> str: - """Extract images from page and get the text with RapidOCR.""" - if not self.extract_images or "/XObject" not in page["/Resources"].keys(): # type: ignore[attr-defined] - return "" - - xObject = page["/Resources"]["/XObject"].get_object() # type: ignore - images = [] - for obj in xObject: - if xObject[obj]["/Subtype"] == "/Image": - if xObject[obj]["/Filter"][1:] in _PDF_FILTER_WITHOUT_LOSS: - height, width = xObject[obj]["/Height"], xObject[obj]["/Width"] - - images.append( - np.frombuffer(xObject[obj].get_data(), dtype=np.uint8).reshape( - height, width, -1 + tables_content = self._extract_tables_from_page(page) + images_bbox = [geometry.obj_to_bbox(image) for image in page.images] + image_from_page = self._extract_images_from_page(page) + page_text = [] + for content in self._split_page_content( + page, + tables_bbox, + tables_content, + images_bbox, + image_from_page, + ): + if isinstance(content, str): # Text + page_text.append(content) + elif isinstance(content, list): # Table + page_text.append(_join_tables + self._convert_table(content)) + else: # Image + page_text.append( + _join_images + next(self.convert_image_to_text([content])) ) + + all_text = "".join(page_text).strip() + + if self.mode == "page": + # For legacy compatibility, add the last '\n'_ + if not all_text.endswith("\n"): + all_text += "\n" + yield Document( + page_content=all_text, + metadata=_PDFPlumberParserMetadata( + doc_metadata + | { + "page": page.page_number - 1, + } + ), ) - elif xObject[obj]["/Filter"][1:] in _PDF_FILTER_WITH_LOSS: - images.append(xObject[obj].get_data()) else: - warnings.warn("Unknown PDF Filter!") - return extract_from_images_with_rapidocr(images) + contents.append(all_text) + # "tables_as_html": [self._convert_table_to_html(table) + # for + # table in tables_content], + # "images": images_content, + # tables_as_html.extend([self._convert_table(table) + # for + # table in tables_content]) + if self.mode == "single": + yield Document( + page_content=self.pages_delimitor.join(contents), + metadata=_PDFPlumberParserMetadata(doc_metadata), + ) + def _process_page_content(self, page: pdfplumber.page.Page) -> str: + """Process the page content based on dedupe. -class PDFMinerParser(BaseBlobParser): - """Parse `PDF` using `PDFMiner`.""" + Args: + page: The PDF page to process. - def __init__(self, extract_images: bool = False, *, concatenate_pages: bool = True): - """Initialize a parser based on PDFMiner. + Returns: + The extracted text from the page. + """ + if self.dedupe: + return page.dedupe_chars().extract_text(**self.text_kwargs) + return page.extract_text(**self.text_kwargs) + + def _split_page_content( + self, + page: pdfplumber.page.Page, + tables_bbox: list[tuple[float, float, float, float]], + tables_content: list[list[list[Any]]], + images_bbox: list[tuple[float, float, float, float]], + images_content: list[np.ndarray], + **kwargs: Any, + ) -> Iterator[Union[str, list[list[str]], np.ndarray]]: + """Split the page content into text, tables, and images. Args: - extract_images: Whether to extract images from PDF. - concatenate_pages: If True, concatenate all PDF pages into one a single - document. Otherwise, return one document per page. + page: The PDF page to process. + tables_bbox: Bounding boxes of tables on the page. + tables_content: Content of tables on the page. + images_bbox: Bounding boxes of images on the page. + images_content: Content of images on the page. + **kwargs: Additional keyword arguments. + + Yields: + An iterator over the split content (text, tables, images). """ - self.extract_images = extract_images - self.concatenate_pages = concatenate_pages + from pdfplumber.utils import ( + geometry, + text, + ) - def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] - """Lazily parse the blob.""" + # Iterate over words. If a word is in a table, + # yield the accumulated text, and the table + # A the word is in a previously see table, ignore it + # Finish with the accumulated text + kwargs.update( + { + "keep_blank_chars": True, + # "use_text_flow": True, + "presorted": True, + "layout_bbox": kwargs.get("layout_bbox") + # or geometry.objects_to_bbox(page.chars), + or page.cropbox, + } + ) + chars = page.dedupe_chars().objects["char"] if self.dedupe else page.chars - if not self.extract_images: - try: - from pdfminer.high_level import extract_text - except ImportError: - raise ImportError( - "`pdfminer` package not found, please install it with " - "`pip install pdfminer.six`" - ) + extractor = text.WordExtractor( + **{k: kwargs[k] for k in text.WORD_EXTRACTOR_KWARGS if k in kwargs} + ) + wordmap = extractor.extract_wordmap(chars) + extract_wordmaps: list[Any] = [] + used_arrays = [False] * len(tables_bbox) + for word, o in wordmap.tuples: + # print(f" Try with '{word['text']}' ...") + is_table = False + word_bbox = geometry.obj_to_bbox(word) + for i, table_bbox in enumerate(tables_bbox): + if geometry.get_bbox_overlap(word_bbox, table_bbox): + # Find a world in a table + # print(" Find in an array") + is_table = True + if not used_arrays[i]: + # First time I see a word in this array + # Yield the previous part + if extract_wordmaps: + new_wordmap = text.WordMap(tuples=extract_wordmaps) + new_textmap = new_wordmap.to_textmap( + **{ + k: kwargs[k] + for k in text.TEXTMAP_KWARGS + if k in kwargs + } + ) + # print(f"yield {new_textmap.to_string()}") + yield new_textmap.to_string() + extract_wordmaps.clear() + # and yield the table + used_arrays[i] = True + # print(f"yield table {i}") + yield tables_content[i] + break + if not is_table: + # print(f' Add {word["text"]}') + extract_wordmaps.append((word, o)) + if extract_wordmaps: + # Text after the array ? + new_wordmap = text.WordMap(tuples=extract_wordmaps) + new_textmap = new_wordmap.to_textmap( + **{k: kwargs[k] for k in text.TEXTMAP_KWARGS if k in kwargs} + ) + # print(f"yield {new_textmap.to_string()}") + yield new_textmap.to_string() + # Add images- + for content in images_content: + yield content - with blob.as_bytes_io() as pdf_file_obj: # type: ignore[attr-defined] - if self.concatenate_pages: - text = extract_text(pdf_file_obj) - metadata = {"source": blob.source} # type: ignore[attr-defined] - yield Document(page_content=text, metadata=metadata) - else: - from pdfminer.pdfpage import PDFPage + def _extract_images_from_page(self, page: pdfplumber.page.Page) -> list[np.ndarray]: + """Extract images from a PDF page. - pages = PDFPage.get_pages(pdf_file_obj) - for i, _ in enumerate(pages): - text = extract_text(pdf_file_obj, page_numbers=[i]) - metadata = {"source": blob.source, "page": str(i)} # type: ignore[attr-defined] - yield Document(page_content=text, metadata=metadata) - else: - import io + Args: + page: The PDF page to extract images from. - from pdfminer.converter import PDFPageAggregator, TextConverter - from pdfminer.layout import LAParams - from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager - from pdfminer.pdfpage import PDFPage + Returns: + A list of extracted images as numpy arrays. + """ + from PIL import Image - text_io = io.StringIO() - with blob.as_bytes_io() as pdf_file_obj: # type: ignore[attr-defined] - pages = PDFPage.get_pages(pdf_file_obj) - rsrcmgr = PDFResourceManager() - device_for_text = TextConverter(rsrcmgr, text_io, laparams=LAParams()) - device_for_image = PDFPageAggregator(rsrcmgr, laparams=LAParams()) - interpreter_for_text = PDFPageInterpreter(rsrcmgr, device_for_text) - interpreter_for_image = PDFPageInterpreter(rsrcmgr, device_for_image) - for i, page in enumerate(pages): - interpreter_for_text.process_page(page) - interpreter_for_image.process_page(page) - content = text_io.getvalue() + self._extract_images_from_page( - device_for_image.get_result() + if not self.extract_images: + return [] + + images = [] + for img in page.images: + if img["stream"]["Filter"].name in _PDF_FILTER_WITHOUT_LOSS: + images.append( + np.frombuffer(img["stream"].get_data(), dtype=np.uint8).reshape( + img["stream"]["Height"], img["stream"]["Width"], -1 ) - text_io.truncate(0) - text_io.seek(0) - metadata = {"source": blob.source, "page": str(i)} # type: ignore[attr-defined] - yield Document(page_content=content, metadata=metadata) - - def _extract_images_from_page(self, page: pdfminer.layout.LTPage) -> str: - """Extract images from page and get the text with RapidOCR.""" - import pdfminer - - def get_image(layout_object: Any) -> Any: - if isinstance(layout_object, pdfminer.layout.LTImage): - return layout_object - if isinstance(layout_object, pdfminer.layout.LTContainer): - for child in layout_object: - return get_image(child) + ) + elif img["stream"]["Filter"].name in _PDF_FILTER_WITH_LOSS: + buf = np.frombuffer(img["stream"].get_data(), dtype=np.uint8) + images.append(np.array(Image.open(io.BytesIO(buf.tobytes())))) else: - return None + logger.warning("Unknown PDF Filter!") - images = [] + return images - for img in filter(bool, map(get_image, page)): - img_filter = img.stream["Filter"] - if isinstance(img_filter, list): - filter_names = [f.name for f in img_filter] - else: - filter_names = [img_filter.name] + def _extract_tables_bbox_from_page( + self, + page: pdfplumber.page.Page, + ) -> list[tuple]: + """Extract bounding boxes of tables from a PDF page. - without_loss = any( - name in _PDF_FILTER_WITHOUT_LOSS for name in filter_names - ) - with_loss = any(name in _PDF_FILTER_WITH_LOSS for name in filter_names) - non_matching = {name for name in filter_names} - { - *_PDF_FILTER_WITHOUT_LOSS, - *_PDF_FILTER_WITH_LOSS, - } + Args: + page: The PDF page to extract table bounding boxes from. - if without_loss and with_loss: - warnings.warn( - "Image has both lossy and lossless filters. Defaulting to lossless" - ) + Returns: + A list of bounding boxes for tables on the page. + """ + if not self.extract_tables: + return [] + from pdfplumber.table import TableSettings - if non_matching: - warnings.warn(f"Unknown PDF Filter(s): {non_matching}") + table_settings = self.extract_tables_settings + tset = TableSettings.resolve(table_settings) + return [table.bbox for table in page.find_tables(tset)] - if without_loss: - images.append( - np.frombuffer(img.stream.get_data(), dtype=np.uint8).reshape( - img.stream["Height"], img.stream["Width"], -1 - ) - ) - elif with_loss: - images.append(img.stream.get_data()) + def _extract_tables_from_page( + self, + page: pdfplumber.page.Page, + ) -> list[list[list[Any]]]: + """Extract tables from a PDF page. - return extract_from_images_with_rapidocr(images) + Args: + page: The PDF page to extract tables from. + Returns: + A list of tables, where each table is a list of rows, and each row is a + list of cell values. + """ + if not self.extract_tables: + return [] + table_settings = self.extract_tables_settings + tables_list = page.extract_tables(table_settings) + return tables_list -class PyMuPDFParser(BaseBlobParser): - """Parse `PDF` using `PyMuPDF`.""" + def _convert_table(self, table: list[list[str]]) -> str: + """Convert a table to the specified format. - def __init__( - self, - text_kwargs: Optional[Mapping[str, Any]] = None, - extract_images: bool = False, - ) -> None: - """Initialize the parser. + Args: + table: The table to convert. + + Returns: + The table content as a string in the specified format. + """ + format = self.extract_tables + if format is None: + return "" + if format == "markdown": + return self._convert_table_to_markdown(table) + elif format == "html": + return self._convert_table_to_html(table) + elif format == "csv": + return self._convert_table_to_csv(table) + else: + raise ValueError(f"Unknown table format: {format}") + + def _convert_table_to_csv(self, table: list[list[str]]) -> str: + """Convert a table to CSV format. Args: - text_kwargs: Keyword arguments to pass to ``fitz.Page.get_text()``. + table: The table to convert. + + Returns: + The table content as a string in CSV format. """ - self.text_kwargs = text_kwargs or {} - self.extract_images = extract_images + if not table: + return "" - def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] - """Lazily parse the blob.""" + output = ["\n\n"] - import fitz + # skip first row in details if header is part of the table + # j = 0 if self.header.external else 1 - with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] - if blob.data is None: # type: ignore[attr-defined] - doc = fitz.open(file_path) - else: - doc = fitz.open(stream=file_path, filetype="pdf") + # iterate over detail rows + for row in table: + line = "" + for i, cell in enumerate(row): + # output None cells with empty string + cell = "" if cell is None else cell.replace("\n", " ") + line += cell + "," + output.append(line) + return "\n".join(output) + "\n\n" - yield from [ - Document( - page_content=self._get_page_content(doc, page, blob), - metadata=self._extract_metadata(doc, page, blob), - ) - for page in doc - ] + def _convert_table_to_html(self, table: list[list[str]]) -> str: + """ + Convert table content as a string in HTML format. + If clean is true, markdown syntax is removed from cell content. - def _get_page_content( - self, doc: fitz.fitz.Document, page: fitz.fitz.Page, blob: Blob - ) -> str: + Args: + table: The table to convert. + + Returns: + The table content as a string in HTML format. """ - Get the text of the page using PyMuPDF and RapidOCR and issue a warning - if it is empty. + if not len(table): + return "" + output = "\n" + clean = True + + # iterate over detail rows + for row in table: + line = "" + for i, cell in enumerate(row): + # output None cells with empty string + cell = "" if cell is None else cell.replace("\n", " ") + if clean: # remove sensitive syntax + cell = html.escape(cell.replace("-", "-")) + line += "" + line += "\n" + output += line + return output + "
" + cell + "
\n" + + def _convert_table_to_markdown(self, table: list[list[str]]) -> str: + """Convert table content as a string in Github-markdown format. + + Args: + table: The table to convert. + + Returns: + The table content as a string in Markdown format. """ - content = page.get_text(**self.text_kwargs) + self._extract_images_from_page( - doc, page - ) + clean = False + if not table: + return "" + col_count = len(table[0]) - if not content: - warnings.warn( - f"Warning: Empty content on page " - f"{page.number} of document {blob.source}" - ) + output = "|" + "|".join("" for i in range(col_count)) + "|\n" + output += "|" + "|".join("---" for i in range(col_count)) + "|\n" - return content + # skip first row in details if header is part of the table + # j = 0 if self.header.external else 1 - def _extract_metadata( - self, doc: fitz.fitz.Document, page: fitz.fitz.Page, blob: Blob - ) -> dict: - """Extract metadata from the document and page.""" - return dict( - { - "source": blob.source, # type: ignore[attr-defined] - "file_path": blob.source, # type: ignore[attr-defined] - "page": page.number, - "total_pages": len(doc), - }, - **{ - k: doc.metadata[k] - for k in doc.metadata - if isinstance(doc.metadata[k], (str, int)) - }, - ) + # iterate over detail rows + for row in table: + line = "|" + for i, cell in enumerate(row): + # output None cells with empty string + cell = "" if cell is None else cell.replace("\n", " ") + if clean: # remove sensitive syntax + cell = html.escape(cell.replace("-", "-")) + line += cell + "|" + line += "\n" + output += line + return output + "\n" - def _extract_images_from_page( - self, doc: fitz.fitz.Document, page: fitz.fitz.Page - ) -> str: - """Extract images from page and get the text with RapidOCR.""" - if not self.extract_images: - return "" - import fitz - img_list = page.get_images() - imgs = [] - for img in img_list: - xref = img[0] - pix = fitz.Pixmap(doc, xref) - imgs.append( - np.frombuffer(pix.samples, dtype=np.uint8).reshape( - pix.height, pix.width, -1 - ) - ) - return extract_from_images_with_rapidocr(imgs) +class ZeroxPDFParser(BaseBlobParser): + """Parse a blob from a PDF using `py-zerox` library. + This class provides methods to parse a blob from a PDF document, supporting various + configurations such as handling password-protected PDFs, extracting images. + It integrates the 'py-zerox' library for PDF processing and offers synchronous blob + parsing. -class PyPDFium2Parser(BaseBlobParser): - """Parse `PDF` with `PyPDFium2`.""" + Examples: + Setup: - def __init__(self, extract_images: bool = False) -> None: - """Initialize the parser.""" - try: - import pypdfium2 # noqa:F401 - except ImportError: - raise ImportError( - "pypdfium2 package not found, please install it with" - " `pip install pypdfium2`" - ) - self.extract_images = extract_images + .. code-block:: bash - def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] - """Lazily parse the blob.""" - import pypdfium2 + pip install -U langchain-community py-zerox - # pypdfium2 is really finicky with respect to closing things, - # if done incorrectly creates seg faults. - with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] - pdf_reader = pypdfium2.PdfDocument(file_path, autoclose=True) - try: - for page_number, page in enumerate(pdf_reader): - text_page = page.get_textpage() - content = text_page.get_text_range() - text_page.close() - content += "\n" + self._extract_images_from_page(page) - page.close() - metadata = {"source": blob.source, "page": page_number} # type: ignore[attr-defined] - yield Document(page_content=content, metadata=metadata) - finally: - pdf_reader.close() + Load a blob from a PDF file: - def _extract_images_from_page(self, page: pypdfium2._helpers.page.PdfPage) -> str: - """Extract images from page and get the text with RapidOCR.""" - if not self.extract_images: - return "" + .. code-block:: python - import pypdfium2.raw as pdfium_c + from langchain_core.documents.base import Blob - images = list(page.get_objects(filter=(pdfium_c.FPDF_PAGEOBJ_IMAGE,))) + blob = Blob.from_path("./example_data/layout-parser-paper.pdf") + + Instantiate the parser: + + .. code-block:: python - images = list(map(lambda x: x.get_bitmap().to_numpy(), images)) - return extract_from_images_with_rapidocr(images) + from langchain_community.document_loaders.parsers import ZeroxPDFParser + parser = ZeroxPDFParser( + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazily parse the blob: + + .. code-block:: python + + docs = [] + docs_lazy = parser.lazy_parse(blob) -class PDFPlumberParser(BaseBlobParser): - """Parse `PDF` with `PDFPlumber`.""" + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ + + warnings.filterwarnings( + "ignore", + module=r"^pyzerox.models.modellitellm$", + message=r"\s*Custom system prompt was provided which.*", + ) + _warn_images_to_text = False + _warn_creator = False + _map_extract_tables = { + "markdown": "", + "html": "But, use html syntax for convert all tables. ", + } + _map_extract_images = { + convert_images_to_text_with_rapidocr: "", + convert_images_to_text_with_tesseract: "", + convert_images_to_description: "If you come across a picture, " + "diagram or other illustration, " + "describe it. ", + } + _prompt = PromptTemplate.from_template( + "Convert the following PDF page to markdown. " + "{prompt_tables}" + "{prompt_images}" + "Remove the header, footer and page number. " + "Return only the markdown with no explanation text. " + "Do not exclude any content from the page. ", + ) + + @staticmethod + def _is_valid_url(url: str) -> bool: + """Check if the url is valid.""" + parsed = urlparse(url) + return bool(parsed.netloc) and bool(parsed.scheme) def __init__( self, - text_kwargs: Optional[Mapping[str, Any]] = None, - dedupe: bool = False, - extract_images: bool = False, - ) -> None: - """Initialize the parser. + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extract_images: bool = True, + extract_tables: Union[Literal["markdown", "html"], None] = "markdown", + cleanup: bool = True, + concurrency: int = 10, + maintain_format: bool = False, + model: str = "gpt-4o-mini", + custom_system_prompt: Optional[str] = None, + select_pages: Optional[Union[int, Iterable[int]]] = None, + **zerox_kwargs: dict[str, Any], + ): + """ + Initialize the parser with arguments to be passed to the zerox function. + Make sure to set necessary environment variables such as API key, endpoint, etc. + Check zerox documentation for list of necessary environment variables for + any given model. Args: - text_kwargs: Keyword arguments to pass to ``pdfplumber.Page.extract_text()`` - dedupe: Avoiding the error of duplicate characters if `dedupe=True`. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + model: + Vision capable model to use. Defaults to "gpt-4o-mini". + Hosted models are passed in format "/" + Examples: "azure/gpt-4o-mini", "vertex_ai/gemini-1.5-flash-001" + See more details in zerox documentation. + cleanup: + Whether to cleanup the temporary files after processing, defaults + to True + concurrency: + The number of concurrent processes to run, defaults to 10 + maintain_format: + Whether to maintain the format from the previous page, defaults to False + model: + The model to use for generating completions, defaults to "gpt-4o-mini". + Note - Refer: https://docs.litellm.ai/docs/providers to pass correct + model name as according to provider it might be different from actual + name. + output_dir: + The directory to save the markdown output, defaults to None + temp_dir: + The directory to store temporary files, defaults to some named folder + in system's temp directory. If already exists, the contents will be + deleted for zerox uses it. + custom_system_prompt: + The system prompt to use for the model, this overrides the default + system prompt of zerox. Generally it is not required unless you want + some specific behaviour. When set, it will raise a friendly warning, + defaults to None + select_pages: + Pages to process, can be a single page number or an iterable of page + numbers, defaults to None + **zerox_kwargs: + Arguments specific to the zerox function. """ - try: - import PIL # noqa:F401 - except ImportError: - raise ImportError( - "pillow package not found, please install it with" - " `pip install pillow`" - ) - self.text_kwargs = text_kwargs or {} - self.dedupe = dedupe + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + if extract_tables not in ["markdown", "html", None]: + raise ValueError("extract_tables must be markdown or html") + + self.mode = mode + self.pages_delimitor = pages_delimitor self.extract_images = extract_images + if not images_to_text: + images_to_text = convert_images_to_text_with_rapidocr() + self.images_to_text = images_to_text + self.extract_tables = extract_tables + + self.cleanup = cleanup + self.concurrency = concurrency + self.maintain_format = maintain_format + self.model = model + self.custom_system_prompt = custom_system_prompt + self.select_pages = select_pages + self.zerox_kwargs = zerox_kwargs + + @staticmethod + def _is_valid_url(url: str) -> bool: + """Check if the url is valid.""" + parsed = urlparse(url) + return bool(parsed.netloc) and bool(parsed.scheme) def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-type] - """Lazily parse the blob.""" - import pdfplumber + """Lazily parse the blob. - with blob.as_bytes_io() as file_path: # type: ignore[attr-defined] - doc = pdfplumber.open(file_path) # open document - - yield from [ - Document( - page_content=self._process_page_content(page) - + "\n" - + self._extract_images_from_page(page), - metadata=dict( - { - "source": blob.source, # type: ignore[attr-defined] - "file_path": blob.source, # type: ignore[attr-defined] - "page": page.page_number - 1, - "total_pages": len(doc.pages), - }, - **{ - k: doc.metadata[k] - for k in doc.metadata - if type(doc.metadata[k]) in [str, int] - }, - ), - ) - for page in doc.pages - ] + Args: + blob: The blob to parse. - def _process_page_content(self, page: pdfplumber.page.Page) -> str: - """Process the page content based on dedupe.""" - if self.dedupe: - return page.dedupe_chars().extract_text(**self.text_kwargs) - return page.extract_text(**self.text_kwargs) + Raises: + ImportError: If the `py-zerox` package is not installed. - def _extract_images_from_page(self, page: pdfplumber.page.Page) -> str: - """Extract images from page and get the text with RapidOCR.""" - from PIL import Image + Yields: + An iterator over the parsed documents. + """ + try: + from pyzerox import zerox + except ImportError: + raise ImportError( + "Could not import pyzerox python package. " + "Please install it with `pip install py-zerox`." + ) + temp_file = None + try: + if not ZeroxPDFParser._is_valid_url(str(blob.path)): + temp_file = NamedTemporaryFile() + with open(temp_file.name, "wb") as f: + f.write(blob.as_bytes()) + file_path = temp_file.name + else: + file_path = str(blob.path) - if not self.extract_images: - return "" + with blob.as_bytes_io() as pdf_file_obj, TemporaryDirectory() as tempdir: + doc_metadata = purge_metadata(self._get_metadata(pdf_file_obj)) - images = [] - for img in page.images: - if img["stream"]["Filter"].name in _PDF_FILTER_WITHOUT_LOSS: - if img["stream"]["BitsPerComponent"] == 1: - images.append( - np.array( - Image.frombytes( - "1", - (img["stream"]["Width"], img["stream"]["Height"]), - img["stream"].get_data(), - ).convert("L") - ) - ) + doc_metadata["source"] = blob.source or blob.path + zerox_prompt = self.custom_system_prompt + + if not zerox_prompt and self.extract_tables: + prompt_tables = ZeroxPDFParser._map_extract_tables[self.extract_tables] + if hasattr(self.images_to_text, "creator"): + creator = getattr(self.images_to_text, "creator") + prompt_images = ZeroxPDFParser._map_extract_images[creator] else: - images.append( - np.frombuffer(img["stream"].get_data(), dtype=np.uint8).reshape( - img["stream"]["Height"], img["stream"]["Width"], -1 + if not ZeroxPDFParser._warn_creator: + ZeroxPDFParser._warn_creator = True + logger.warning("images_to_text can not be simulate") + prompt_images = "" + zerox_prompt = ZeroxPDFParser._prompt.format( + prompt_tables=prompt_tables, prompt_images=prompt_images + ) + zerox_output = asyncio.run( + zerox( + file_path=str(file_path), + model=self.model, + cleanup=self.cleanup, + concurrency=self.concurrency, + maintain_format=self.maintain_format, + custom_system_prompt=zerox_prompt, + select_pages=self.select_pages, + **self.zerox_kwargs, + ) + ) + + # Convert zerox output to Document instances and yield them + if len(zerox_output.pages) > 0: + doc_metadata = purge_metadata( + doc_metadata + | { + "total_pages": zerox_output.pages[-1].page, + "num_pages": zerox_output.pages[-1].page, # Deprecated + } + ) + single_texts = [] + for page in zerox_output.pages: + text_from_page = page.content + images_from_page = "" + all_text = _merge_text_and_extras( + [images_from_page], text_from_page + ) + if self.mode == "page": + yield Document( + page_content=all_text, + metadata=doc_metadata | {"page": page.page - 1}, ) + else: + single_texts.append(all_text) + if self.mode == "single": + yield Document( + page_content=self.pages_delimitor.join(single_texts), + metadata=doc_metadata, ) - elif img["stream"]["Filter"].name in _PDF_FILTER_WITH_LOSS: - images.append(img["stream"].get_data()) - else: - warnings.warn("Unknown PDF Filter!") + finally: + if temp_file: + temp_file.close() + + + def _get_metadata( + self, + fp: BinaryIO, + password: str = "", + caching: bool = True, + ) -> dict[str, Any]: + """ + Extract metadata from a PDF file. + + Args: + fp: The file pointer to the PDF file. + password: The password for the PDF file, if encrypted. Defaults to an empty + string. + caching: Whether to cache the PDF structure. Defaults to True. + + Returns: + Metadata of the PDF file. + """ + from pdfminer.pdfpage import PDFDocument, PDFPage, PDFParser + + # Create a PDF parser object associated with the file object. + parser = PDFParser(fp) + # Create a PDF document object that stores the document structure. + doc = PDFDocument(parser, password=password, caching=caching) + metadata = {} + + for info in doc.info: + metadata.update(info) + for k, v in metadata.items(): + try: + metadata[k] = PDFMinerParser.resolve_and_decode(v) + except Exception as e: # pragma: nocover + # This metadata value could not be parsed. Instead of failing the PDF + # read, treat it as a warning only if `strict_metadata=False`. + logger.warning( + '[WARNING] Metadata key "%s" could not be parsed due to ' + "exception: %s", + k, + str(e), + ) + + # Count number of pages. + metadata["total_pages"] = len(list(PDFPage.create_pages(doc))) - return extract_from_images_with_rapidocr(images) + return metadata class AmazonTextractPDFParser(BaseBlobParser): @@ -558,7 +2337,7 @@ def __init__( textract_features: Optional[Sequence[int]] = None, client: Optional[Any] = None, *, - linearization_config: Optional["TextLinearizationConfig"] = None, + linearization_config: Optional[TextLinearizationConfig] = None, ) -> None: """Initializes the parser. @@ -623,7 +2402,9 @@ def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-ty the blob.data is taken """ - url_parse_result = urlparse(str(blob.path)) if blob.path else None # type: ignore[attr-defined] + url_parse_result = ( # type: ignore[attr-defined] + urlparse(str(blob.path)) if blob.path else None + ) # Either call with S3 path (multi-page) or with bytes (single-page) if ( url_parse_result @@ -648,10 +2429,22 @@ def lazy_parse(self, blob: Blob) -> Iterator[Document]: # type: ignore[valid-ty for idx, page in enumerate(document.pages): yield Document( page_content=page.get_text(config=self.linearization_config), - metadata={"source": blob.source, "page": idx + 1}, # type: ignore[attr-defined] + metadata={"source": blob.source, "page": idx + 1}, + # type: ignore[attr-defined] ) +@deprecated( + since="0.0.7", + removal="0.4.0", + message="langchain_community.document_loaders.parsers.pdf.DocumentIntelligenceParser" + "and langchain_community.document_loaders.pdf.DocumentIntelligenceLoader" + " are deprecated. Please upgrade to " + "langchain_community.document_loaders.DocumentIntelligenceLoader " + "for any file parsing purpose using Azure Document Intelligence " + "service.", + alternative_import="langchain_community.document_loaders.DocumentIntelligenceLoader", +) class DocumentIntelligenceParser(BaseBlobParser): """Loads a PDF with Azure Document Intelligence (formerly Form Recognizer) and chunks at character level.""" @@ -668,7 +2461,9 @@ def __init__(self, client: Any, model: str): self.client = client self.model = model - def _generate_docs(self, blob: Blob, result: Any) -> Iterator[Document]: # type: ignore[valid-type] + def _generate_docs( # type: ignore[valid-type] + self, blob: Blob, result: Any + ) -> Iterator[Document]: for p in result.pages: content = " ".join([line.content for line in p.lines]) diff --git a/libs/community/langchain_community/document_loaders/pdf.py b/libs/community/langchain_community/document_loaders/pdf.py index 8e7d0152d3dc0..d1b05b349c996 100644 --- a/libs/community/langchain_community/document_loaders/pdf.py +++ b/libs/community/langchain_community/document_loaders/pdf.py @@ -6,21 +6,24 @@ import time from abc import ABC from io import StringIO -from pathlib import Path +from pathlib import Path, PurePath from typing import ( TYPE_CHECKING, Any, - Dict, + BinaryIO, + Iterable, Iterator, - List, + Literal, Mapping, Optional, Sequence, Union, + cast, ) from urllib.parse import urlparse import requests +from langchain_core._api.deprecation import deprecated from langchain_core.documents import Document from langchain_core.utils import get_from_dict_or_env @@ -28,6 +31,7 @@ from langchain_community.document_loaders.blob_loaders import Blob from langchain_community.document_loaders.dedoc import DedocBaseLoader from langchain_community.document_loaders.parsers.pdf import ( + CONVERT_IMAGE_TO_TEXT, AmazonTextractPDFParser, DocumentIntelligenceParser, PDFMinerParser, @@ -35,6 +39,8 @@ PyMuPDFParser, PyPDFium2Parser, PyPDFParser, + ZeroxPDFParser, + _default_page_delimitor, ) from langchain_community.document_loaders.unstructured import UnstructuredFileLoader @@ -44,6 +50,11 @@ logger = logging.getLogger(__file__) +@deprecated( + since="0.3.13", + removal="1.0", + alternative_import="langchain_unstructured.UnstructuredPDFLoader", +) class UnstructuredPDFLoader(UnstructuredFileLoader): """Load `PDF` files using `Unstructured`. @@ -68,7 +79,7 @@ class UnstructuredPDFLoader(UnstructuredFileLoader): https://unstructured-io.github.io/unstructured/bricks.html#partition-pdf """ - def _get_elements(self) -> List: + def _get_elements(self) -> list: from unstructured.partition.pdf import partition_pdf return partition_pdf(filename=self.file_path, **self.unstructured_kwargs) # type: ignore[arg-type] @@ -81,7 +92,9 @@ class BasePDFLoader(BaseLoader, ABC): clean up the temporary file after completion. """ - def __init__(self, file_path: Union[str, Path], *, headers: Optional[Dict] = None): + def __init__( + self, file_path: Union[str, PurePath], *, headers: Optional[dict] = None + ): """Initialize with a file path. Args: @@ -94,7 +107,8 @@ def __init__(self, file_path: Union[str, Path], *, headers: Optional[Dict] = Non if "~" in self.file_path: self.file_path = os.path.expanduser(self.file_path) - # If the file is a web path or S3, download it to a temporary file, and use that + # If the file is a web path or S3, download it to a temporary file, + # and use that. It's better to use a BlobLoader. if not os.path.isfile(self.file_path) and self._is_valid_url(self.file_path): self.temp_dir = tempfile.TemporaryDirectory() _, suffix = os.path.splitext(self.file_path) @@ -151,97 +165,115 @@ def source(self) -> str: return self.web_path if self.web_path is not None else self.file_path +@deprecated( + since="0.3.13", + removal="1.0", + alternative_import="langchain_unstructured.UnstructuredPDFLoader", +) class OnlinePDFLoader(BasePDFLoader): """Load online `PDF`.""" - def load(self) -> List[Document]: + def load(self) -> list[Document]: """Load documents.""" loader = UnstructuredPDFLoader(str(self.file_path)) return loader.load() class PyPDFLoader(BasePDFLoader): - """ - PyPDFLoader document loader integration + """Load and parse a PDF file using 'pypdf' library. - Setup: - Install ``langchain-community``. + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting images, and + defining extraction mode. It integrates the `pypdf` library for PDF processing and + offers both synchronous and asynchronous document loading. + + Examples: + Setup: .. code-block:: bash - pip install -U langchain-community + pip install -U langchain-community pypdf + + Instantiate the loader: - Instantiate: .. code-block:: python from langchain_community.document_loaders import PyPDFLoader loader = PyPDFLoader( file_path = "./example_data/layout-parser-paper.pdf", - password = "my-password", - extract_images = True, # headers = None - # extraction_mode = "plain", - # extraction_kwargs = None, + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), ) - Lazy load: + Lazy load documents: + .. code-block:: python docs = [] docs_lazy = loader.lazy_load() - # async variant: - # docs_lazy = await loader.alazy_load() - for doc in docs_lazy: docs.append(doc) print(docs[0].page_content[:100]) print(docs[0].metadata) - .. code-block:: python - - LayoutParser : A Unified Toolkit for Deep - Learning Based Document Image Analysis - Zejiang Shen1( ), R - {'source': './example_data/layout-parser-paper.pdf', 'page': 0} + Load documents asynchronously: - Async load: .. code-block:: python docs = await loader.aload() print(docs[0].page_content[:100]) print(docs[0].metadata) - - .. code-block:: python - - LayoutParser : A Unified Toolkit for Deep - Learning Based Document Image Analysis - Zejiang Shen1( ), R - {'source': './example_data/layout-parser-paper.pdf', 'page': 0} - """ # noqa: E501 + """ def __init__( self, - file_path: str, + file_path: Union[str, PurePath], password: Optional[Union[str, bytes]] = None, - headers: Optional[Dict] = None, + headers: Optional[dict] = None, extract_images: bool = False, - *, - extraction_mode: str = "plain", - extraction_kwargs: Optional[Dict] = None, + *, # Move after the file_path ? + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + extraction_mode: Literal["plain", "layout"] = "plain", + extraction_kwargs: Optional[dict] = None, ) -> None: - """Initialize with a file path.""" - try: - import pypdf # noqa:F401 - except ImportError: - raise ImportError( - "pypdf package not found, please install it with `pip install pypdf`" - ) + """Initialize with a file path. + + Args: + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extraction_mode: “plain” for legacy functionality, “layout” for experimental + layout mode functionality + extraction_kwargs: Optional additional parameters for the extraction + process. + + Returns: + This method does not directly return data. Use the `load`, `lazy_load` or + `aload` methods to retrieve parsed documents with content and metadata. + """ super().__init__(file_path, headers=headers) self.parser = PyPDFParser( password=password, extract_images=extract_images, + images_to_text=images_to_text, + mode=mode, + pages_delimitor=pages_delimitor, extraction_mode=extraction_mode, extraction_kwargs=extraction_kwargs, ) @@ -249,66 +281,250 @@ def __init__( def lazy_load( self, ) -> Iterator[Document]: - """Lazy load given path as pages.""" + """ + Lazy load given path as pages. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + """ if self.web_path: - blob = Blob.from_data(open(self.file_path, "rb").read(), path=self.web_path) # type: ignore[attr-defined] + blob = Blob.from_data( # type: ignore[attr-defined] + open(self.file_path, "rb").read(), path=self.web_path + ) else: blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] - yield from self.parser.parse(blob) + yield from self.parser.lazy_parse(blob) class PyPDFium2Loader(BasePDFLoader): - """Load `PDF` using `pypdfium2` and chunks at character level.""" + """Load and parse a PDF file using the `pypdfium2` library. + + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting images, and + defining extraction mode. + It integrates the `pypdfium2` library for PDF processing and offers both + synchronous and asynchronous document loading. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pypdfium2 + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import PyPDFium2Loader + + loader = PyPDFium2Loader( + file_path = "./example_data/layout-parser-paper.pdf", + # headers = None + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazy load documents: + + .. code-block:: python + + docs = [] + docs_lazy = loader.lazy_load() + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ def __init__( self, - file_path: str, + file_path: Union[str, PurePath], *, - headers: Optional[Dict] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + password: Optional[str] = None, extract_images: bool = False, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + headers: Optional[dict] = None, ): - """Initialize with a file path.""" + """Initialize with a file path. + + Args: + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extraction_mode: “plain” for legacy functionality, “layout” for experimental + layout mode functionality + extraction_kwargs: Optional additional parameters for the extraction + process. + + Returns: + This class does not directly return data. Use the `load`, `lazy_load` or + `aload` methods to retrieve parsed documents with content and metadata. + """ super().__init__(file_path, headers=headers) - self.parser = PyPDFium2Parser(extract_images=extract_images) + self.parser = PyPDFium2Parser( + mode=mode, + password=password, + extract_images=extract_images, + images_to_text=images_to_text, + pages_delimitor=pages_delimitor, + ) def lazy_load( self, ) -> Iterator[Document]: - """Lazy load given path as pages.""" + """ + Lazy load given path as pages. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + """ if self.web_path: - blob = Blob.from_data(open(self.file_path, "rb").read(), path=self.web_path) # type: ignore[attr-defined] + blob = Blob.from_data( # type: ignore[attr-defined] + open(self.file_path, "rb").read(), path=self.web_path + ) else: blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] yield from self.parser.parse(blob) +@deprecated( + since="0.3.13", + removal="1.0", + alternative="langchain_community.document_loaders.generic.GenericLoader", +) class PyPDFDirectoryLoader(BaseLoader): - """Load a directory with `PDF` files using `pypdf` and chunks at character level. + """Load and parse a directory of PDF files using 'pypdf' library. + + This class provides methods to load and parse multiple PDF documents in a directory, + supporting options for recursive search, handling password-protected files, + extracting images, and defining extraction modes. It integrates the `pypdf` library + for PDF processing and offers synchronous document loading. - Loader also stores page numbers in metadata. + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pypdf + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import PyPDFDirectoryLoader + + loader = PyPDFDirectoryLoader( + path = "./example_data/", + glob = "**/[!.]*.pdf", + silent_errors = False, + load_hidden = False, + recursive = False, + extract_images = False, + password = None, + mode = "page", + images_to_text = None, + headers = None, + extraction_mode = "plain", + # extraction_kwargs = None, + ) + + Load documents: + + .. code-block:: python + + docs = loader.load() + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) """ def __init__( self, - path: Union[str, Path], + path: Union[str, PurePath], glob: str = "**/[!.]*.pdf", silent_errors: bool = False, load_hidden: bool = False, recursive: bool = False, extract_images: bool = False, + *, + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + headers: Optional[dict] = None, + extraction_mode: Literal["plain", "layout"] = "plain", + extraction_kwargs: Optional[dict] = None, ): + """Initialize with a directory path. + + Args: + path: The path to the directory containing PDF files to be loaded. + glob: The glob pattern to match files in the directory. + silent_errors: Whether to log errors instead of raising them. + load_hidden: Whether to include hidden files in the search. + recursive: Whether to search subdirectories recursively. + extract_images: Whether to extract images from PDFs. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for extracting the entire + document or "page" for page-wise extraction. + images_to_text: Function or callable to convert images to text during + extraction. + headers: Optional headers to use for GET request to download a file from a + web path. + extraction_mode: “plain” for legacy functionality, “layout” for + experimental layout mode functionality + extraction_kwargs: Optional additional parameters for the extraction + process. + + Returns: + This method does not directly return data. Use the `load` method to + retrieve parsed documents with content and metadata. + """ + self.password = password + self.mode = mode self.path = path self.glob = glob self.load_hidden = load_hidden self.recursive = recursive self.silent_errors = silent_errors self.extract_images = extract_images + self.images_to_text = images_to_text + self.headers = headers + self.extraction_mode = extraction_mode + self.extraction_kwargs = extraction_kwargs @staticmethod - def _is_visible(path: Path) -> bool: + def _is_visible(path: PurePath) -> bool: return not any(part.startswith(".") for part in path.parts) - def load(self) -> List[Document]: + def load(self) -> list[Document]: p = Path(self.path) docs = [] items = p.rglob(self.glob) if self.recursive else p.glob(self.glob) @@ -316,7 +532,16 @@ def load(self) -> List[Document]: if i.is_file(): if self._is_visible(i.relative_to(p)) or self.load_hidden: try: - loader = PyPDFLoader(str(i), extract_images=self.extract_images) + loader = PyPDFLoader( + str(i), + password=self.password, + mode=self.mode, + extract_images=self.extract_images, + images_to_text=self.images_to_text, + headers=self.headers, + extraction_mode=self.extraction_mode, + extraction_kwargs=self.extraction_kwargs, + ) sub_docs = loader.load() for doc in sub_docs: doc.metadata["source"] = str(i) @@ -330,64 +555,144 @@ def load(self) -> List[Document]: class PDFMinerLoader(BasePDFLoader): - """Load `PDF` files using `PDFMiner`.""" + """Load and parse a PDF file using 'pdfminer.six' library. + + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting images, and + defining extraction mode. It integrates the `pdfminer.six` library for PDF + processing and offers both synchronous and asynchronous document loading. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pdfminer.six + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import PDFMinerLoader + + loader = PDFMinerLoader( + file_path = "./example_data/layout-parser-paper.pdf", + # headers = None + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + ) + + Lazy load documents: + + .. code-block:: python + + docs = [] + docs_lazy = loader.lazy_load() + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ def __init__( self, - file_path: str, + file_path: Union[str, PurePath], *, - headers: Optional[Dict] = None, + password: Optional[str] = None, + mode: Literal["single", "page"] = "single", + pages_delimitor: str = _default_page_delimitor, extract_images: bool = False, - concatenate_pages: bool = True, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + headers: Optional[dict] = None, + concatenate_pages: Optional[bool] = None, ) -> None: - """Initialize with file path. + """Initialize with a file path. Args: - extract_images: Whether to extract images from PDF. - concatenate_pages: If True, concatenate all PDF pages into one a single - document. Otherwise, return one document per page. - """ - try: - from pdfminer.high_level import extract_text # noqa:F401 - except ImportError: - raise ImportError( - "`pdfminer` package not found, please install it with " - "`pip install pdfminer.six`" - ) + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + concatenate_pages: Deprecated. If True, concatenate all PDF pages into one + a single document. Otherwise, return one document per page. + Returns: + This method does not directly return data. Use the `load`, `lazy_load` or + `aload` methods to retrieve parsed documents with content and metadata. + """ super().__init__(file_path, headers=headers) self.parser = PDFMinerParser( - extract_images=extract_images, concatenate_pages=concatenate_pages + password=password, + extract_images=extract_images, + images_to_text=images_to_text, + concatenate_pages=concatenate_pages, + mode=mode, + pages_delimitor=pages_delimitor, ) def lazy_load( self, ) -> Iterator[Document]: - """Lazily load documents.""" + """ + Lazy load given path as pages. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + """ if self.web_path: - blob = Blob.from_data(open(self.file_path, "rb").read(), path=self.web_path) # type: ignore[attr-defined] + blob = Blob.from_data( # type: ignore[attr-defined] + open(self.file_path, "rb").read(), path=self.web_path + ) else: blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] - yield from self.parser.parse(blob) + yield from self.parser.lazy_parse(blob) class PDFMinerPDFasHTMLLoader(BasePDFLoader): - """Load `PDF` files as HTML content using `PDFMiner`.""" + """Load `PDF` files as HTML content using `PDFMiner`. + Warning, the HTML output is just a positioning of the boxes, + without being able to interpret the HTML in an LLM. + """ - def __init__(self, file_path: str, *, headers: Optional[Dict] = None): + def __init__( + self, + file_path: Union[str, PurePath], + *, + password: Optional[str] = None, + headers: Optional[dict] = None, + ): """Initialize with a file path.""" + super().__init__(file_path, headers=headers) + self.password = password + + def lazy_load(self) -> Iterator[Document]: + """Load file.""" try: - from pdfminer.high_level import extract_text_to_fp # noqa:F401 + from pdfminer.high_level import extract_text_to_fp except ImportError: raise ImportError( "`pdfminer` package not found, please install it with " "`pip install pdfminer.six`" ) - super().__init__(file_path, headers=headers) - - def lazy_load(self) -> Iterator[Document]: - """Load file.""" from pdfminer.high_level import extract_text_to_fp from pdfminer.layout import LAParams from pdfminer.utils import open_filename @@ -395,8 +700,9 @@ def lazy_load(self) -> Iterator[Document]: output_string = StringIO() with open_filename(self.file_path, "rb") as fp: extract_text_to_fp( - fp, + cast(BinaryIO, fp), output_string, + password=self.password or "", codec="", laparams=LAParams(), output_type="html", @@ -408,51 +714,129 @@ def lazy_load(self) -> Iterator[Document]: class PyMuPDFLoader(BasePDFLoader): - """Load `PDF` files using `PyMuPDF`.""" + """Load and parse a PDF file using 'PyMuPDF' library. + + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting tables, + extracting images, and defining extraction mode. It integrates the `PyMuPDF` + library for PDF processing and offers both synchronous and asynchronous document + loading. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pymupdf + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import PyMuPDFLoader + + loader = PyMuPDFLoader( + file_path = "./example_data/layout-parser-paper.pdf", + # headers = None + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + # extract_tables = "markdown", + # extract_tables_settings = None, + ) + + Lazy load documents: + + .. code-block:: python + + docs = [] + docs_lazy = loader.lazy_load() + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ def __init__( self, - file_path: str, + file_path: Union[str, PurePath], *, - headers: Optional[Dict] = None, + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, extract_images: bool = False, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extract_tables: Union[Literal["csv", "markdown", "html"], None] = None, + headers: Optional[dict] = None, + extract_tables_settings: Optional[dict[str, Any]] = None, **kwargs: Any, ) -> None: - """Initialize with a file path.""" - try: - import fitz # noqa:F401 - except ImportError: - raise ImportError( - "`PyMuPDF` package not found, please install it with " - "`pip install pymupdf`" - ) - super().__init__(file_path, headers=headers) - self.extract_images = extract_images - self.text_kwargs = kwargs + """Initialize with a file path. - def _lazy_load(self, **kwargs: Any) -> Iterator[Document]: - if kwargs: - logger.warning( - f"Received runtime arguments {kwargs}. Passing runtime args to `load`" - f" is deprecated. Please pass arguments during initialization instead." - ) + Args: + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extract_tables: Whether to extract tables in a specific format, such as + "csv", "markdown", or "html". + extract_tables_settings: Optional dictionary of settings for customizing + table extraction. + **kwargs: Additional keyword arguments for customizing text extraction + behavior. - text_kwargs = {**self.text_kwargs, **kwargs} - parser = PyMuPDFParser( - text_kwargs=text_kwargs, extract_images=self.extract_images + Returns: + This method does not directly return data. Use the `load`, `lazy_load`, or + `aload` methods to retrieve parsed documents with content and metadata. + + Raises: + ValueError: If the `mode` argument is not one of "single" or "page". + """ + if mode not in ["single", "page"]: + raise ValueError("mode must be single or page") + super().__init__(file_path, headers=headers) + self.parser = PyMuPDFParser( + password=password, + mode=mode, + pages_delimitor=pages_delimitor, + text_kwargs=kwargs, + extract_images=extract_images, + images_to_text=images_to_text, + extract_tables=extract_tables, + extract_tables_settings=extract_tables_settings, ) + + def lazy_load(self) -> Iterator[Document]: + """ + Lazy load given path as pages. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + """ + parser = self.parser if self.web_path: blob = Blob.from_data(open(self.file_path, "rb").read(), path=self.web_path) # type: ignore[attr-defined] else: blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] yield from parser.lazy_parse(blob) - def load(self, **kwargs: Any) -> List[Document]: - return list(self._lazy_load(**kwargs)) - - def lazy_load(self) -> Iterator[Document]: - yield from self._lazy_load() - # MathpixPDFLoader implementation taken largely from Daniel Gross's: # https://gist.github.com/danielgross/3ab4104e14faccc12b49200843adab21 @@ -461,11 +845,11 @@ class MathpixPDFLoader(BasePDFLoader): def __init__( self, - file_path: str, + file_path: Union[str, PurePath], processed_file_format: str = "md", max_wait_time_seconds: int = 500, should_clean_pdf: bool = False, - extra_request_data: Optional[Dict[str, Any]] = None, + extra_request_data: Optional[dict[str, Any]] = None, **kwargs: Any, ) -> None: """Initialize with a file path. @@ -499,7 +883,7 @@ def __init__( self.should_clean_pdf = should_clean_pdf @property - def _mathpix_headers(self) -> Dict[str, str]: + def _mathpix_headers(self) -> dict[str, str]: return {"app_id": self.mathpix_api_id, "app_key": self.mathpix_api_key} @property @@ -515,7 +899,7 @@ def data(self) -> dict: return {"options_json": json.dumps(options)} def send_pdf(self) -> str: - with open(self.file_path, "rb") as f: + with open(str(self.file_path), "rb") as f: files = {"file": f} response = requests.post( self.url, headers=self._mathpix_headers, files=files, data=self.data @@ -562,7 +946,7 @@ def wait_for_processing(self, pdf_id: str) -> None: # This indicates an error with the PDF processing raise ValueError("Unable to retrieve PDF from Mathpix") else: - print(f"Status: {status}, waiting for processing to complete") # noqa: T201 + logger.info("Status: %s, waiting for processing to complete", status) time.sleep(5) raise TimeoutError @@ -572,8 +956,7 @@ def get_processed_pdf(self, pdf_id: str) -> str: response = requests.get(url, headers=self._mathpix_headers) return response.content.decode("utf-8") - @staticmethod - def clean_pdf(contents: str) -> str: + def clean_pdf(self, contents: str) -> str: """Clean the PDF file. Args: @@ -596,7 +979,7 @@ def clean_pdf(contents: str) -> str: ) return contents - def load(self) -> List[Document]: + def load(self) -> list[Document]: pdf_id = self.send_pdf() contents = self.get_processed_pdf(pdf_id) if self.should_clean_pdf: @@ -606,43 +989,133 @@ def load(self) -> List[Document]: class PDFPlumberLoader(BasePDFLoader): - """Load `PDF` files using `pdfplumber`.""" + """Load and parse a PDF file using 'pdfplumber' library. + + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting images, and + defining extraction mode. It integrates the `pdfplumber` library for PDF processing + and offers both synchronous and asynchronous document loading. + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pdfplumber + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import PDFPlumberLoader + + loader = PDFPlumberLoader( + file_path = "./example_data/layout-parser-paper.pdf", + # headers = None + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + # extract_tables = None, + # extract_tables_settings = None, + # text_kwargs = {"use_text_flow": False, "keep_blank_chars": False}, + # dedupe = False, + ) + + Lazy load documents: + + .. code-block:: python + + docs = [] + docs_lazy = loader.lazy_load() + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) + """ def __init__( self, - file_path: str, + file_path: Union[str, PurePath], text_kwargs: Optional[Mapping[str, Any]] = None, dedupe: bool = False, - headers: Optional[Dict] = None, + headers: Optional[dict] = None, extract_images: bool = False, + *, + password: Optional[str] = None, + mode: Literal["single", "page"] = "page", + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + pages_delimitor: str = _default_page_delimitor, + extract_tables: Optional[Literal["csv", "markdown", "html"]] = None, + extract_tables_settings: Optional[dict[str, Any]] = None, ) -> None: - """Initialize with a file path.""" - try: - import pdfplumber # noqa:F401 - except ImportError: - raise ImportError( - "pdfplumber package not found, please install it with " - "`pip install pdfplumber`" - ) + """Initialize with a file path. - super().__init__(file_path, headers=headers) - self.text_kwargs = text_kwargs or {} - self.dedupe = dedupe - self.extract_images = extract_images + Args: + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extract_tables: Whether to extract tables in a specific format, such as + "csv", "markdown", or "html". + extract_tables_settings: Optional dictionary of settings for customizing + table extraction. + text_kwargs: Keyword arguments to pass to ``pdfplumber.Page.extract_text()`` + dedupe: Avoiding the error of duplicate characters if `dedupe=True` - def load(self) -> List[Document]: - """Load file.""" + Returns: + This method does not directly return data. Use the `load`, `lazy_load`, + or `aload` methods + to retrieve parsed documents with content and metadata. - parser = PDFPlumberParser( - text_kwargs=self.text_kwargs, - dedupe=self.dedupe, - extract_images=self.extract_images, + Raises: + ImportError: If the `pdfplumber` package is not installed. + """ + super().__init__(file_path, headers=headers) + self.parser = PDFPlumberParser( + password=password, + mode=mode, + pages_delimitor=pages_delimitor, + extract_images=extract_images, + images_to_text=images_to_text, + extract_tables=extract_tables, + text_kwargs=text_kwargs, + extract_tables_settings=extract_tables_settings, + dedupe=dedupe, ) + + def lazy_load( + self, + ) -> Iterator[Document]: + """ + Lazy load given path as pages. + Insert image, if possible, between two paragraphs. + In this way, a paragraph can be continued on the next page. + """ if self.web_path: - blob = Blob.from_data(open(self.file_path, "rb").read(), path=self.web_path) # type: ignore[attr-defined] + blob = Blob.from_data( # type: ignore[attr-defined] + open(self.file_path, "rb").read(), path=self.web_path + ) else: blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] - return parser.parse(blob) + yield from self.parser.lazy_parse(blob) class AmazonTextractPDFLoader(BasePDFLoader): @@ -669,13 +1142,13 @@ class AmazonTextractPDFLoader(BasePDFLoader): def __init__( self, - file_path: str, + file_path: Union[str, PurePath], textract_features: Optional[Sequence[str]] = None, client: Optional[Any] = None, credentials_profile_name: Optional[str] = None, region_name: Optional[str] = None, endpoint_url: Optional[str] = None, - headers: Optional[Dict] = None, + headers: Optional[dict] = None, *, linearization_config: Optional["TextLinearizationConfig"] = None, ) -> None: @@ -743,7 +1216,7 @@ def __init__( linearization_config=linearization_config, ) - def load(self) -> List[Document]: + def load(self) -> list[Document]: """Load given path as pages.""" return list(self.lazy_load()) @@ -758,7 +1231,7 @@ def lazy_load( if self.web_path and self._is_s3_url(self.web_path): blob = Blob(path=self.web_path) # type: ignore[call-arg] # type: ignore[misc] else: - blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] + blob = Blob.from_path(self.file_path) if AmazonTextractPDFLoader._get_number_of_pages(blob) > 1: raise ValueError( f"the file {blob.path} is a multi-page document, \ @@ -792,7 +1265,9 @@ def _get_number_of_pages(blob: Blob) -> int: # type: ignore[valid-type] elif blob.mimetype in ["image/png", "image/jpeg"]: # type: ignore[attr-defined] return 1 else: - raise ValueError(f"unsupported mime type: {blob.mimetype}") # type: ignore[attr-defined] + raise ValueError( # type: ignore[attr-defined] + f"unsupported mime type: {blob.mimetype}" + ) class DedocPDFLoader(DedocBaseLoader): @@ -901,7 +1376,7 @@ def __init__( file_path: str, client: Any, model: str = "prebuilt-document", - headers: Optional[Dict] = None, + headers: Optional[dict] = None, ) -> None: """ Initialize the object for file processing with Azure Document Intelligence @@ -930,10 +1405,10 @@ def __init__( ... ) """ - self.parser = DocumentIntelligenceParser(client=client, model=model) super().__init__(file_path, headers=headers) + self.parser = DocumentIntelligenceParser(client=client, model=model) - def load(self) -> List[Document]: + def load(self) -> list[Document]: """Load given path as pages.""" return list(self.lazy_load()) @@ -946,81 +1421,180 @@ def lazy_load( class ZeroxPDFLoader(BasePDFLoader): - """ - Document loader utilizing Zerox library: + """Load and parse a PDF file using 'py-zerox' library. https://github.com/getomni-ai/zerox + This class provides methods to load and parse PDF documents, supporting various + configurations such as handling password-protected files, extracting tables, + extracting images, and defining extraction mode. It integrates the `py-zerox` + library for PDF processing and offers both synchronous and asynchronous document + loading. + Zerox converts PDF document to serties of images (page-wise) and uses vision-capable LLM model to generate Markdown representation. - Zerox utilizes anyc operations. Therefore when using this loader + Zerox utilizes async operations. Therefore when using this loader inside Jupyter Notebook (or any environment running async) you will need to: ```python import nest_asyncio nest_asyncio.apply() ``` + + Examples: + Setup: + + .. code-block:: bash + + pip install -U langchain-community pymupdf + + Instantiate the loader: + + .. code-block:: python + + from langchain_community.document_loaders import ZeroxPDFLoader + + loader = ZeroxPDFLoader( + file_path = "./example_data/layout-parser-paper.pdf", + # headers = None + # password = None, + mode = "single", + pages_delimitor = "\n\f", + # extract_images = True, + # images_to_text = convert_images_to_text_with_tesseract(), + # extract_tables = "markdown", + # extract_tables_settings = None, + ) + + Lazy load documents: + + .. code-block:: python + + docs = [] + docs_lazy = loader.lazy_load() + + for doc in docs_lazy: + docs.append(doc) + print(docs[0].page_content[:100]) + print(docs[0].metadata) + + Load documents asynchronously: + + .. code-block:: python + + docs = await loader.aload() + print(docs[0].page_content[:100]) + print(docs[0].metadata) """ def __init__( self, file_path: Union[str, Path], + *, + headers: Optional[dict] = None, + mode: Literal["single", "page"] = "page", + pages_delimitor: str = _default_page_delimitor, + images_to_text: CONVERT_IMAGE_TO_TEXT = None, + extract_images: bool = True, + extract_tables: Union[Literal["markdown", "html"], None] = "markdown", + cleanup: bool = True, + concurrency: int = 10, + maintain_format: bool = False, model: str = "gpt-4o-mini", - **zerox_kwargs: Any, + custom_system_prompt: Optional[str] = None, + select_pages: Optional[Union[int, Iterable[int]]] = None, + **zerox_kwargs: dict[str, Any], ) -> None: - super().__init__(file_path=file_path) """ - Initialize the parser with arguments to be passed to the zerox function. - Make sure to set necessary environmnet variables such as API key, endpoint, etc. + Initialize the loader with arguments to be passed to the zerox function. + Make sure to set necessary environment variables such as API key, endpoint, etc. Check zerox documentation for list of necessary environment variables for any given model. Args: - file_path: - Path or url of the pdf file + file_path: The path to the PDF file to be loaded. + headers: Optional headers to use for GET request to download a file from a + web path. + password: Optional password for opening encrypted PDFs. + mode: The extraction mode, either "single" for the entire document or "page" + for page-wise extraction. + pages_delimitor: A string delimiter to separate pages in single-mode + extraction. + extract_images: Whether to extract images from the PDF. + images_to_text: Optional function or callable to convert images to text + during extraction. + extract_tables: Whether to extract tables in a specific format, such as + "csv", "markdown", or "html". + extract_tables_settings: Optional dictionary of settings for customizing + table extraction. + cleanup: + Whether to cleanup the temporary files after processing, defaults + to True + concurrency: + The number of concurrent processes to run, defaults to 10 + maintain_format: + Whether to maintain the format from the previous page, defaults to False model: - Vision capable model to use. Defaults to "gpt-4o-mini". - Hosted models are passed in format "/" - Examples: "azure/gpt-4o-mini", "vertex_ai/gemini-1.5-flash-001" - See more details in zerox documentation. - **zerox_kwargs: + The model to use for generating completions, defaults to "gpt-4o-mini". + Note - Refer: https://docs.litellm.ai/docs/providers to pass correct + model name as according to provider it might be different from + actual name. + output_dir: + The directory to save the markdown output, defaults to None + temp_dir: + The directory to store temporary files, defaults to some named folder + in system's temp directory. If already exists, the contents will be + deleted for zerox uses it. + custom_system_prompt: + The system prompt to use for the model, this overrides the default + system prompt of zerox. Generally it is not required unless you want + some specific behaviour. When set, it will raise a friendly warning, + defaults to None + select_pages: + Pages to process, can be a single page number or an iterable of page + numbers, defaults to None + **kwargs: Arguments specific to the zerox function. - see datailed list of arguments here in zerox repository: - https://github.com/getomni-ai/zerox/blob/main/py_zerox/pyzerox/core/zerox.py#L25 - """ # noqa: E501 - self.zerox_kwargs = zerox_kwargs - self.model = model + """ + super().__init__(file_path, headers=headers) + self.parser = ZeroxPDFParser( + mode=mode, + pages_delimitor=pages_delimitor, + images_to_text=images_to_text, + extract_images=extract_images, + extract_tables=extract_tables, + cleanup=cleanup, + concurrency=concurrency, + maintain_format=maintain_format, + model=model, + custom_system_prompt=custom_system_prompt, + select_pages=select_pages, + **zerox_kwargs, + ) def lazy_load(self) -> Iterator[Document]: """ - Loads documnts from pdf utilizing zerox library: + Loads documents from pdf utilizing zerox library: https://github.com/getomni-ai/zerox Returns: Iterator[Document]: An iterator over parsed Document instances. """ - import asyncio - - from pyzerox import zerox - - # Directly call asyncio.run to execute zerox synchronously - zerox_output = asyncio.run( - zerox(file_path=self.file_path, model=self.model, **self.zerox_kwargs) - ) - - # Convert zerox output to Document instances and yield them - if len(zerox_output.pages) > 0: - num_pages = zerox_output.pages[-1].page - for page in zerox_output.pages: - yield Document( - page_content=page.content, - metadata={ - "source": self.source, - "page": page.page, - "num_pages": num_pages, - }, - ) + """Lazy load given path as pages.""" + if self.web_path: + blob = Blob.from_data( # type: ignore[attr-defined] + open(self.file_path, "rb").read(), path=self.web_path + ) + else: + blob = Blob.from_path(self.file_path) # type: ignore[attr-defined] + yield from self.parser.lazy_parse(blob) # Legacy: only for backwards compatibility. Use PyPDFLoader instead -PagedPDFSplitter = PyPDFLoader +@deprecated( + since="0.0.30", + removal="1.0", + alternative="PyPDFLoader", +) +class PagedPDFSplitter(PyPDFLoader): + pass 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 928c26898c9e7..597a25068bd56 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 @@ -1,17 +1,16 @@ """Tests for the various PDF parsers.""" +import os +import re from pathlib import Path from typing import Iterator +import numpy as np +import pytest + +import langchain_community.document_loaders.parsers as pdf_parsers from langchain_community.document_loaders.base import BaseBlobParser from langchain_community.document_loaders.blob_loaders import Blob -from langchain_community.document_loaders.parsers.pdf import ( - PDFMinerParser, - PDFPlumberParser, - PyMuPDFParser, - PyPDFium2Parser, - PyPDFParser, -) # PDFs to test parsers on. HELLO_PDF = Path(__file__).parent.parent.parent / "examples" / "hello.pdf" @@ -20,6 +19,12 @@ Path(__file__).parent.parent.parent / "examples" / "layout-parser-paper.pdf" ) +LAYOUT_PARSER_PAPER_PASSWORD_PDF = ( + Path(__file__).parent.parent.parent + / "examples" + / "layout-parser-paper-password.pdf" +) + DUPLICATE_CHARS = ( Path(__file__).parent.parent.parent / "examples" / "duplicate-chars.pdf" ) @@ -41,7 +46,7 @@ def _assert_with_parser(parser: BaseBlobParser, splits_by_page: bool = True) -> assert isinstance(page_content, str) # The different parsers return different amount of whitespace, so using # startswith instead of equals. - assert docs[0].page_content.startswith("Hello world!") + assert re.findall(r"Hello\s+world!", docs[0].page_content) blob = Blob.from_path(LAYOUT_PARSER_PAPER_PDF) doc_generator = parser.lazy_parse(blob) @@ -81,53 +86,181 @@ def _assert_with_duplicate_parser(parser: BaseBlobParser, dedupe: bool = False) assert "1000 Series" == docs[0].page_content.split("\n")[0] else: # duplicate characters will appear in doc if not dedupe - assert "11000000 SSeerriieess" == docs[0].page_content.split("\n")[0] - - -def test_pymupdf_loader() -> None: - """Test PyMuPDF loader.""" - _assert_with_parser(PyMuPDFParser()) - - -def test_pypdf_parser() -> None: - """Test PyPDF parser.""" - _assert_with_parser(PyPDFParser()) - - -def test_pdfminer_parser() -> None: - """Test PDFMiner parser.""" - # Does not follow defaults to split by page. - _assert_with_parser(PDFMinerParser(), splits_by_page=False) - - -def test_pypdfium2_parser() -> None: - """Test PyPDFium2 parser.""" - # Does not follow defaults to split by page. - _assert_with_parser(PyPDFium2Parser()) - + assert "11000000 SSeerriieess" == docs[0].page_content.split("\n")[0] -def test_pdfplumber_parser() -> None: - """Test PDFPlumber parser.""" - _assert_with_parser(PDFPlumberParser()) - _assert_with_duplicate_parser(PDFPlumberParser()) - _assert_with_duplicate_parser(PDFPlumberParser(dedupe=True), dedupe=True) - -def test_extract_images_text_from_pdf_pypdfparser() -> None: - """Test extract image from pdf and recognize text with rapid ocr - PyPDFParser""" - _assert_with_parser(PyPDFParser(extract_images=True)) - - -def test_extract_images_text_from_pdf_pdfminerparser() -> None: - """Test extract image from pdf and recognize text with rapid ocr - PDFMinerParser""" - _assert_with_parser(PDFMinerParser(extract_images=True)) - - -def test_extract_images_text_from_pdf_pymupdfparser() -> None: - """Test extract image from pdf and recognize text with rapid ocr - PyMuPDFParser""" - _assert_with_parser(PyMuPDFParser(extract_images=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)) +@pytest.mark.parametrize( + "mode", + ["single", "page"], +) +@pytest.mark.parametrize( + "extract_images", + [True, False], +) +@pytest.mark.parametrize( + "parser_factory,params", + [ + ("PDFMinerParser", {}), + ("PDFPlumberParser", {}), + ("PyMuPDFParser", {}), + ("PyPDFParser", {"extraction_mode": "plain"}), + ("PyPDFParser", {"extraction_mode": "layout"}), + ("PyPDFium2Parser", {}), + ("ZeroxPDFParser", {}), + ], +) +def test_standard_parameters( + parser_factory: str, params: dict, mode: str, extract_images: bool +) -> None: + def _std_assert_with_parser(parser: BaseBlobParser) -> None: + """Standard tests to verify that the given parser works. + + Args: + parser (BaseBlobParser): The parser to test. + """ + blob = Blob.from_path(LAYOUT_PARSER_PAPER_PDF) + doc_generator = parser.lazy_parse(blob) + docs = list(doc_generator) + metadata = docs[0].metadata + assert metadata["source"] == str(LAYOUT_PARSER_PAPER_PDF) + assert "creationdate" in metadata + assert "creator" in metadata + assert "producer" in metadata + assert "total_pages" in metadata + if len(docs) > 1: + assert metadata["page"] == 0 + if hasattr(parser, "extract_images") and parser.extract_images: + images = [] + for doc in docs: + _HTML_image = ( + r"]*" + r'src="([^"]+)"(?:\s+alt="([^"]*)")?(?:\s+' + r'title="([^"]*)")?[^>]*>' + ) + _markdown_image = r"!\[([^\]]*)\]\(([^)\s]+)(?:\s+\"([^\"]+)\")?\)" + match = re.findall(_markdown_image, doc.page_content) + if match: + images.extend(match) + assert len(images) >= 1 + + if hasattr(parser, "password"): + old_password = parser.password + parser.password = "password" + blob = Blob.from_path(LAYOUT_PARSER_PAPER_PASSWORD_PDF) + doc_generator = parser.lazy_parse(blob) + docs = list(doc_generator) + assert len(docs) + parser.password = old_password + + os.environ["SCARF_NO_ANALYTICS"] = "false" + os.environ["DO_NOT_TRACK"] = "true" + + def images_to_text(images: list[np.ndarray]) -> Iterator[str]: + return iter(["![image](.)"] * len(images)) + + parser_class = getattr(pdf_parsers, parser_factory) + + parser = parser_class( + mode=mode, + extract_images=extract_images, + images_to_text=images_to_text, + **params, + ) + _assert_with_parser(parser, splits_by_page=(mode == "page")) + _std_assert_with_parser(parser) + + +@pytest.mark.parametrize( + "mode", + ["single", "page"], +) +@pytest.mark.parametrize( + "extract_tables", + ["markdown", "html", "csv", None], +) +@pytest.mark.parametrize( + "parser_factory,params", + [ + ("PyMuPDFParser", {}), + ("PDFPlumberParser", {}), + ("ZeroxPDFParser", {}), + ], +) +def test_parser_with_table( + parser_factory: str, + params: dict, + mode: str, + extract_tables: str, +) -> None: + if parser_factory == "LlamaIndexPDFParser" and extract_tables not in [ + "markdown", + None, + ]: + pytest.skip( + f"{parser_factory} is not compatible with extract_tables='{extract_tables}'" + ) + + if parser_factory == "ZeroxPDFParser" and extract_tables not in [ + "markdown", + "html", + None, + ]: + pytest.skip( + f"{parser_factory} is not compatible with extract_tables='{extract_tables}'" + ) + + def _std_assert_with_parser(parser: BaseBlobParser) -> None: + """Standard tests to verify that the given parser works. + + Args: + parser (BaseBlobParser): The parser to test. + """ + blob = Blob.from_path(LAYOUT_PARSER_PAPER_PDF) + doc_generator = parser.lazy_parse(blob) + docs = list(doc_generator) + tables = [] + for doc in docs: + if extract_tables == "markdown": + pattern = ( + r"(?s)(" + r"(?:(?:[^\n]*\|)\n)" + r"(?:\|(?:\s?:?---*:?\s?\|)+)\n" + r"(?:(?:[^\n]*\|)\n)+" + r")" + ) + elif extract_tables == "html": + pattern = r"(?s)(]*>(?:.*?)<\/table>)" + elif extract_tables == "csv": + pattern = ( + r"((?:(?:" + r'(?:"(?:[^"]*(?:""[^"]*)*)"' + r"|[^\n,]*),){2,}" + r"(?:" + r'(?:"(?:[^"]*(?:""[^"]*)*)"' + r"|[^\n]*))\n){2,})" + ) + else: + pattern = None + if pattern: + matches = re.findall(pattern, doc.page_content) + if matches: + tables.extend(matches) + if extract_tables: + assert len(tables) >= 1 + else: + assert not len(tables) + + os.environ["SCARF_NO_ANALYTICS"] = "false" + os.environ["DO_NOT_TRACK"] = "true" + + 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, + **params, + ) + _std_assert_with_parser(parser) 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 50c9fde29d918..b3f772a410db6 100644 --- a/libs/community/tests/integration_tests/document_loaders/test_pdf.py +++ b/libs/community/tests/integration_tests/document_loaders/test_pdf.py @@ -1,142 +1,47 @@ +import os from pathlib import Path from typing import Sequence, Union import pytest +import langchain_community.document_loaders as pdf_loaders from langchain_community.document_loaders import ( AmazonTextractPDFLoader, MathpixPDFLoader, - PDFMinerLoader, PDFMinerPDFasHTMLLoader, - PyMuPDFLoader, - PyPDFium2Loader, - UnstructuredPDFLoader, ) -def test_unstructured_pdf_loader_elements_mode() -> None: - """Test unstructured loader with various modes.""" - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = UnstructuredPDFLoader(str(file_path), mode="elements") - docs = loader.load() - - assert len(docs) == 2 - - -def test_unstructured_pdf_loader_paged_mode() -> None: - """Test unstructured loader with various modes.""" - file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = UnstructuredPDFLoader(str(file_path), mode="paged") - docs = loader.load() - - assert len(docs) == 16 - - -def test_unstructured_pdf_loader_default_mode() -> None: - """Test unstructured loader.""" - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = UnstructuredPDFLoader(str(file_path)) - docs = loader.load() - - assert len(docs) == 1 - - -def test_pdfminer_loader() -> None: - """Test PDFMiner loader.""" - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = PDFMinerLoader(str(file_path)) - docs = loader.load() - - assert len(docs) == 1 - - file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = PDFMinerLoader(str(file_path)) - - docs = loader.load() - assert len(docs) == 1 - - # Verify that concatenating pages parameter works - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = PDFMinerLoader(str(file_path), concatenate_pages=True) - docs = loader.load() - - assert len(docs) == 1 - - file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = PDFMinerLoader(str(file_path), concatenate_pages=False) - - docs = loader.load() - assert len(docs) == 16 - - def test_pdfminer_pdf_as_html_loader() -> None: """Test PDFMinerPDFasHTMLLoader.""" file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = PDFMinerPDFasHTMLLoader(str(file_path)) + loader = PDFMinerPDFasHTMLLoader(file_path) docs = loader.load() assert len(docs) == 1 file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = PDFMinerPDFasHTMLLoader(str(file_path)) + loader = PDFMinerPDFasHTMLLoader(file_path) docs = loader.load() assert len(docs) == 1 -def test_pypdfium2_loader() -> None: - """Test PyPDFium2Loader.""" - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = PyPDFium2Loader(str(file_path)) - docs = loader.load() - - assert len(docs) == 1 - - file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = PyPDFium2Loader(str(file_path)) - - docs = loader.load() - assert len(docs) == 16 - - -def test_pymupdf_loader() -> None: - """Test PyMuPDF loader.""" - file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = PyMuPDFLoader(str(file_path)) - - docs = loader.load() - assert len(docs) == 1 - - file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = PyMuPDFLoader(str(file_path)) - - docs = loader.load() - assert len(docs) == 16 - assert loader.web_path is None - - web_path = "https://people.sc.fsu.edu/~jpeterson/hello_world.pdf" - loader = PyMuPDFLoader(web_path) - - docs = loader.load() - assert loader.web_path == web_path - assert loader.file_path != web_path - assert len(docs) == 1 - - +@pytest.mark.skipif( + not os.environ.get("MATHPIX_API_KEY"), reason="Mathpix API key not found" +) def test_mathpix_loader() -> None: file_path = Path(__file__).parent.parent / "examples/hello.pdf" - loader = MathpixPDFLoader(str(file_path)) + loader = MathpixPDFLoader(file_path) docs = loader.load() assert len(docs) == 1 - print(docs[0].page_content) # noqa: T201 file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" - loader = MathpixPDFLoader(str(file_path)) + loader = MathpixPDFLoader(file_path) docs = loader.load() assert len(docs) == 1 - print(docs[0].page_content) # noqa: T201 @pytest.mark.parametrize( @@ -214,7 +119,6 @@ def test_amazontextract_loader( else: loader = AmazonTextractPDFLoader(file_path, textract_features=features) docs = loader.load() - print(docs) # noqa: T201 assert len(docs) == docs_length @@ -228,3 +132,40 @@ def test_amazontextract_loader_failures() -> None: loader = AmazonTextractPDFLoader(two_page_pdf) with pytest.raises(ValueError): loader.load() + + +@pytest.mark.parametrize( + "parser_factory,params", + [ + ("PDFMinerLoader", {}), + ("PDFPlumberLoader", {}), + ("PDFMinerLoader", {}), + ("PyMuPDFLoader", {}), + ("PyPDFLoader", {}), + ("PyPDFium2Loader", {}), + ("ZeroxPDFLoader", {}), + ], +) +def test_standard_parameters( + parser_factory: str, + params: dict, +) -> None: + loader_class = getattr(pdf_loaders, parser_factory) + + file_path = Path(__file__).parent.parent / "examples/hello.pdf" + loader = loader_class(file_path) + docs = loader.load() + assert len(docs) == 1 + + file_path = Path(__file__).parent.parent / "examples/layout-parser-paper.pdf" + loader = loader_class(file_path, mode="page") + docs = loader.load() + assert len(docs) == 16 + assert loader.web_path is None + + web_path = "https://people.sc.fsu.edu/~jpeterson/hello_world.pdf" + loader = loader_class(web_path) + docs = loader.load() + assert loader.web_path == web_path + assert loader.file_path != web_path + assert len(docs) == 1 diff --git a/libs/community/tests/integration_tests/examples/layout-parser-paper-password.pdf b/libs/community/tests/integration_tests/examples/layout-parser-paper-password.pdf new file mode 100644 index 0000000000000..ae9ca9b4c684e Binary files /dev/null and b/libs/community/tests/integration_tests/examples/layout-parser-paper-password.pdf differ diff --git a/libs/community/tests/unit_tests/document_loaders/parsers/test_pdf_parsers.py b/libs/community/tests/unit_tests/document_loaders/parsers/test_pdf_parsers.py index 5b96e25015f51..03920bd5d6139 100644 --- a/libs/community/tests/unit_tests/document_loaders/parsers/test_pdf_parsers.py +++ b/libs/community/tests/unit_tests/document_loaders/parsers/test_pdf_parsers.py @@ -1,17 +1,16 @@ """Tests for the various PDF parsers.""" +import importlib from pathlib import Path -from typing import Iterator +from typing import Any, Iterator import pytest +import langchain_community.document_loaders.parsers as pdf_parsers from langchain_community.document_loaders.base import BaseBlobParser from langchain_community.document_loaders.blob_loaders import Blob from langchain_community.document_loaders.parsers.pdf import ( - PDFMinerParser, - PyMuPDFParser, - PyPDFium2Parser, - PyPDFParser, + _merge_text_and_extras, ) _THIS_DIR = Path(__file__).parents[3] @@ -23,7 +22,19 @@ LAYOUT_PARSER_PAPER_PDF = _EXAMPLES_DIR / "layout-parser-paper.pdf" -def _assert_with_parser(parser: BaseBlobParser, splits_by_page: bool = True) -> None: +def test_merge_text_and_extras() -> None: + assert "abc\n\n\n\n\n\n\n\ndef\n\n\nghi" == _merge_text_and_extras( + ["", "
"], "abc\n\n\ndef\n\n\nghi" + ) + assert "abc\n\n\n\n
\n\ndef\n\nghi" == _merge_text_and_extras( + ["", "
"], "abc\n\ndef\n\nghi" + ) + assert "abc\ndef\n\n\n\n
\n\nghi" == _merge_text_and_extras( + ["", "
"], "abc\ndef\n\nghi" + ) + + +def _assert_with_parser(parser: BaseBlobParser, *, splits_by_page: bool = True) -> None: """Standard tests to verify that the given parser works. Args: @@ -62,27 +73,26 @@ def _assert_with_parser(parser: BaseBlobParser, splits_by_page: bool = True) -> assert int(metadata["page"]) == 0 -@pytest.mark.requires("pypdf") -def test_pypdf_parser() -> None: - """Test PyPDF parser.""" - _assert_with_parser(PyPDFParser()) - - -@pytest.mark.requires("pdfminer") -def test_pdfminer_parser() -> None: - """Test PDFMiner parser.""" - # Does not follow defaults to split by page. - _assert_with_parser(PDFMinerParser(), splits_by_page=False) - - -@pytest.mark.requires("fitz") # package is PyMuPDF -def test_pymupdf_loader() -> None: - """Test PyMuPDF loader.""" - _assert_with_parser(PyMuPDFParser()) - - -@pytest.mark.requires("pypdfium2") -def test_pypdfium2_parser() -> None: - """Test PyPDFium2 parser.""" - # Does not follow defaults to split by page. - _assert_with_parser(PyPDFium2Parser()) +@pytest.mark.parametrize( + "parser_factory,require,params", + [ + ("PyPDFParser", "pypdf", {}), + ("PDFMinerParser", "pdfminer", {"splits_by_page": False}), + ("PyMuPDFParser", "pymupdf", {}), + ("PyPDFium2Parser", "pypdfium2", {}), + # ("ZeroxPDFParser", "py-zerox",{}), # Online only + ], +) +def test_parsers( + parser_factory: str, + require: str, + params: dict[str, Any], +) -> None: + try: + require = require.replace("-", "") + importlib.import_module(require, package=None) + parser_class = getattr(pdf_parsers, parser_factory) + parser = parser_class() + _assert_with_parser(parser, **params) + except ModuleNotFoundError: + pytest.skip(f"{parser_factory} skiped. Require '{require}'") diff --git a/libs/community/tests/unit_tests/document_loaders/parsers/test_public_api.py b/libs/community/tests/unit_tests/document_loaders/parsers/test_public_api.py index efaf28ecc89ce..2a7dd0ca575a7 100644 --- a/libs/community/tests/unit_tests/document_loaders/parsers/test_public_api.py +++ b/libs/community/tests/unit_tests/document_loaders/parsers/test_public_api.py @@ -16,4 +16,5 @@ def test_parsers_public_api_correct() -> None: "PyPDFium2Parser", "PDFPlumberParser", "VsdxParser", + "ZeroxPDFParser", } diff --git a/libs/community/tests/unit_tests/document_loaders/test_imports.py b/libs/community/tests/unit_tests/document_loaders/test_imports.py index ddeaf734b0fe8..2b62ff5720b4a 100644 --- a/libs/community/tests/unit_tests/document_loaders/test_imports.py +++ b/libs/community/tests/unit_tests/document_loaders/test_imports.py @@ -43,6 +43,7 @@ "CassandraLoader", "CSVLoader", "ChatGPTLoader", + "CloudBlobLoader", "CoNLLULoader", "CollegeConfidentialLoader", "ConcurrentLoader", @@ -199,6 +200,7 @@ "YoutubeAudioLoader", "YoutubeLoader", "YuqueLoader", + "ZeroxPDFLoader", ] diff --git a/libs/community/tests/unit_tests/document_loaders/test_pdf.py b/libs/community/tests/unit_tests/document_loaders/test_pdf.py index ae7356ea4952e..8078fbbfa7f9a 100644 --- a/libs/community/tests/unit_tests/document_loaders/test_pdf.py +++ b/libs/community/tests/unit_tests/document_loaders/test_pdf.py @@ -21,12 +21,12 @@ @pytest.mark.requires("pypdf") def test_pypdf_loader() -> None: """Test PyPDFLoader.""" - loader = PyPDFLoader(str(path_to_simple_pdf)) + loader = PyPDFLoader(path_to_simple_pdf) docs = loader.load() assert len(docs) == 1 - loader = PyPDFLoader(str(path_to_layout_pdf)) + loader = PyPDFLoader(path_to_layout_pdf) docs = loader.load() assert len(docs) == 16 @@ -43,7 +43,7 @@ def test_pypdf_loader() -> None: @pytest.mark.requires("pypdf") def test_pypdf_loader_with_layout() -> None: """Test PyPDFLoader with layout mode.""" - loader = PyPDFLoader(str(path_to_layout_pdf), extraction_mode="layout") + loader = PyPDFLoader(path_to_layout_pdf, extraction_mode="layout") docs = loader.load() assert len(docs) == 16 @@ -59,4 +59,4 @@ def test_pypdf_loader_with_layout() -> None: expected = path_to_layout_pdf_txt.read_text(encoding="utf-8") cleaned_first_page = re.sub(r"\x00", "", first_page) cleaned_expected = re.sub(r"\x00", "", expected) - assert cleaned_first_page == cleaned_expected + assert cleaned_first_page == cleaned_expected.strip()