Markdown是一种轻量级标记语言,用于使用纯文本编辑器创建格式化文本。在本文中,我们将介绍如何将Markdown文档加载为LangChainDocument
对象,以便在后续处理中使用。我们将涵盖以下内容:
- 基本用法
- 将Markdown解析为元素,例如标题、列表项和文本
LangChain实现了一个UnstructuredMarkdownLoader
对象,该对象需要Unstructured
包支持。首先,我们安装该包:
%pip install "unstructured[md]"
基本用法
基本用法将Markdown文件导入为单个文档。在这里我们演示如何加载LangChain的README文件:
from langchain_community.document_loaders import UnstructuredMarkdownLoader
from langchain_core.documents import Document
# 设置Markdown文件路径
markdown_path = "../../../README.md"
# 创建Markdown加载器
loader = UnstructuredMarkdownLoader(markdown_path)
# 加载数据
data = loader.load()
# 确认返回的数据结构
assert len(data) == 1
assert isinstance(data[0], Document)
# 打印文档内容的一部分
readme_content = data[0].page_content
print(readme_content[:250])
在上述示例中,我们使用UnstructuredMarkdownLoader
加载了Markdown文件,得到一个包含文档内容的对象。
保留元素
在底层,Unstructured
为不同文本块创建不同的"元素"。默认情况下,我们将这些元素合并,但您可以通过指定mode="elements"
选项轻松保留这些元素的分离:
# 使用元素模式加载器
loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")
# 加载数据
data = loader.load()
print(f"Number of documents: {len(data)}\n")
# 打印前两个文档的信息
for document in data[:2]:
print(f"{document}\n")
输出结果显示文档数量:
Number of documents: 66
文档示例:
page_content='🦜️🔗 LangChain' metadata={'source': '../../../README.md', 'category_depth': 0, 'last_modified': '2024-06-28T15:20:01', 'languages': ['eng'], 'filetype': 'text/markdown', 'file_directory': '../../..', 'filename': 'README.md', 'category': 'Title'}
page_content='⚡ Build context-aware reasoning applications ⚡' metadata={'source': '../../../README.md', 'last_modified': '2024-06-28T15:20:01', 'languages': ['eng'], 'parent_id': '200b8a7d0dd03f66e4f13456566d2b3a', 'filetype': 'text/markdown', 'file_directory': '../../..', 'filename': 'README.md', 'category': 'NarrativeText'}
在这种情况下,我们获得了三种不同的元素类型:
print(set(document.metadata["category"] for document in data))
结果:
{'ListItem', 'NarrativeText', 'Title'}
应用场景分析
这种处理方式非常适合需要从Markdown文档中提取结构化信息的应用场景。比如说,您需要将文档中的标题、列表项等专门处理或显示,都可以使用UnstructuredMarkdownLoader
。
实践建议
- 充分利用
mode="elements"
来提取并分析不同类型的文本元素。 - 关注文档的元数据,可以帮助您理解文档内容及其来源。
如果遇到问题欢迎在评论区交流。
—END—