使用MarkdownHeaderTextSplitter高效分割Markdown文件

733 阅读2分钟

使用MarkdownHeaderTextSplitter高效分割Markdown文件

引言

在处理自然语言处理任务时,特别是需要通过嵌入和向量存储进行文本处理的场景中,将输入文档进行合理的切分是非常重要的。Markdown文件凭借其结构化的标题可以为此提供一个很好的切分依据。本文将介绍如何使用MarkdownHeaderTextSplitter来根据Markdown的标题分割文本,并提供实用的代码示例。

主要内容

Markdown文件的结构化切分

Markdown文本文件通常使用不同层级的标题来组织内容。利用这些标题,我们可以将文件切分成具有共同上下文的块。MarkdownHeaderTextSplitter工具允许我们根据指定的标题级别来分割Markdown文件,这样可以保留上下文的完整性。

如何使用MarkdownHeaderTextSplitter

MarkdownHeaderTextSplitter允许我们指定需要切分的标题级别,并根据这些级别来分割文本。

首先,确保安装必要的库:

%pip install -qU langchain-text-splitters

然后,可以创建一个Markdown文档并定义要用于分割的标题:

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"),
]

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)

代码示例

以下是一个完整的代码示例,展示了如何使用MarkdownHeaderTextSplitter切分Markdown文档:

from langchain_text_splitters import MarkdownHeaderTextSplitter

markdown_document = """# Foo

## Bar

Hi this is Jim

Hi this is Joe

### Boo 

Hi this is Lance

## Baz

Hi this is Molly"""

headers_to_split_on = [
    ("#", "Header 1"),
    ("##", "Header 2"),
    ("###", "Header 3"),
]

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)

for doc in md_header_splits:
    print(doc.page_content, doc.metadata)

常见问题和解决方案

  • 问题:标题被移除
    默认情况下,MarkdownHeaderTextSplitter会移除划分的标题。通过设置strip_headers=False可以保留标题。

  • 问题:需要单行输出
    如果需要将每一行作为一个独立的文档返回,可以设置return_each_line=True

  • 问题:文本块过大或过小
    可以结合RecursiveCharacterTextSplitter等工具对切分后的块进一步控制大小。

from langchain_text_splitters import RecursiveCharacterTextSplitter

chunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=chunk_size, chunk_overlap=chunk_overlap
)

# 使用API代理服务提高访问稳定性
splits = text_splitter.split_documents(md_header_splits)

总结和进一步学习资源

通过使用MarkdownHeaderTextSplitter,我们可以更好地处理和分析结构化文档。为了更深入地理解相关技术,建议查阅以下资源:

参考资料

  1. Langchain 文档: python.langchain.com/docs/get_st…
  2. Markdown Guide: www.markdownguide.org/

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

---END---