Skip to main content

Loading Documents in LangChain

Overview

LangChain provides utilities for loading various document formats like HTML, Markdown, PDFs, etc. into a common Document format that can be used in downstream NLP pipelines. This document provides examples and explanations of the key document loading capabilities in LangChain.

Loading HTML

HTML (Hypertext Markup Language) is a standard markup language used to create web pages.

To load an HTML file into a Document object in LangChain, we can use the UnstructuredHTMLLoader:

from langchain.document_loaders import UnstructuredHTMLLoader

loader = UnstructuredHTMLLoader("example_data/fake-content.html")

data = loader.load()

print(data)

This will extract the main textual content from the HTML, cleaning up any markup, and store it in the page_content field of the Document. The source path will be stored in metadata.

[Document(page_content='My First Heading\n\nMy first paragraph.',
metadata={'source': 'example_data/fake-content.html'})]

Loading HTML with BeautifulSoup

We can also use the popular BeautifulSoup library to parse and load HTML through the BSHTMLLoader:

from langchain.document_loaders import BSHTMLLoader

loader = BSHTMLLoader("example_data/fake-content.html")
data = loader.load()

print(data)

This will extract the text content like the UnstructuredHTMLLoader, but also parse out the title of the HTML page and store it in the metadata:

[Document(page_content='\n\nTest Title\n\n\nMy First Heading\nMy first paragraph.\n\n\n',
metadata={'source': 'example_data/fake-content.html',
'title': 'Test Title'})]

The BSHTMLLoader provides more control over parsing and extracting content from complex HTML documents.

Loading Markdown

Markdown is a popular lightweight markup language used for formatting plain text documents.

To load a Markdown document, we can use the UnstructuredMarkdownLoader:

from langchain.document_loaders import UnstructuredMarkdownLoader

markdown_path = "document.md"
loader = UnstructuredMarkdownLoader(markdown_path)

data = loader.load()
print(data)

This will extract all the text content, excluding any Markdown syntax, into the page_content field of the Document.

In addition to plain text content, the loader can also retain some structure from the original Markdown document:

loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")

data = loader.load()
print(data[0])
Document(page_content='# My Document Title',
metadata={'source': 'document.md',
'page_number': 1,
'category': 'Title'})

This allows accessing elements like headings, lists, etc separately for further processing.

Loading PDFs

PDF (Portable Document Format) is a common format for distributing documents digitally.

To load a PDF file, we can use the PDFLoader:

from langchain.document_loaders import PDFLoader

loader = PDFLoader("paper.pdf")
data = loader.load()

print(data[0])
Document(page_content='Deep learning (DL) has become ubiquitous for document image analysis (DIA) in recent years. However, 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 applications. The core LayoutParser library comes with a set of simple and intuitive interfaces for applying and customizing DL models for layout detection, 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 digitization 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.',
metadata={'source': 'example_data/layout-parser-paper.pdf',
'page_number': 1,
'total_pages': 16})

This extracts the text content from each page into separate Document objects. Metadata like page number is also stored.

Conclusion

LangChain provides simple utilities like UnstructuredHTMLLoader, BSHTMLLoader, UnstructuredMarkdownLoader, PDFLoader to load HTML, Markdown, PDFs, and other text-based documents into a common Document format for downstream NLP tasks. The loaders provide options to retain structure and metadata from the original documents when needed.