使用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,我们可以更好地处理和分析结构化文档。为了更深入地理解相关技术,建议查阅以下资源:
参考资料
- Langchain 文档: python.langchain.com/docs/get_st…
- Markdown Guide: www.markdownguide.org/
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---