# RAG | Langchain # Langchain RAG:打造Markdown文件的结构化分割解决方案

【文章简介】
在信息技术的现代背景下,高效地处理和分析文本数据对于知识获取和决策支持至关重要。Markdown文件因其易读性和高效性,在文档编写和知识共享中占据了重要地位。然而,传统的文本处理方法往往忽视了Markdown的结构化特性,未能充分挖掘文本的深层含义和主题。

本文介绍了一种创新的结构化分割方法,利用Langchain技术,通过MarkdownHeaderTextSplitter工具,根据标题层级进行精确分割,同时保留文本的上下文和结构信息。这种方法特别适合处理报告、教程等结构化文档,有助于提升文本向量化(embedding)的效果。
正如Pinecone所指出的,当整个段落或文档被嵌入时,嵌入过程会同时考虑整体上下文和文本内部句子与短语之间的关系,从而产生更全面的向量表示,捕获文本的更广泛含义和主题。
此外,RecursiveCharacterTextSplitter工具适用于需要均匀文本块的自然语言处理任务,而UnstructuredMarkdownLoader则将Markdown文件转换为Langchain对象,通过mode="elements"选项,进一步增强了文本块的独立性和分析的灵活性。

这种方法不仅提高了文本分析的效率和准确性,而且通过优化embedding过程,显著增强了RAG(Retrieval-Augmented
Generation)效果,为Markdown文件的深入利用和知识管理开辟了新路径。

MarkDown

Markdown是一种轻量级标记语言,用于使用纯文本编辑器创建格式化文本。
优势:纯文本、有语义(用纯文本表示的语义)

使用MarkdownHeaderTextSplitter获取markdown结构

调用方法

%pip install -qU langchain-text-splitters

我们可以自己规定分割的chunksize、标题层级

标题层级分割

# 1 标题
## 1.1 标题
### 1.1.1 标题
#### 1.1.1.1 标题
1.1.1.1 内容# 2 标题
2 内容
## 2.2 标题
2.2 内容
# 读取markdown内容
content_path= r"xxx.md"
with open(content_path, "r") as f:page_content = f.read()from langchain_text_splitters import MarkdownHeaderTextSplittermarkdown_document = page_contentheaders_to_split_on = [("#", "Header 1"),("##", "Header 2"),("###", "Header 3"),
]markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
md_header_splits = markdown_splitter.split_text(markdown_document)
for i, doc in enumerate(md_header_splits):print("-------------------------------------------------------")print(f"Document {i+1}:")print("Page content:")print(doc.page_content)print("Metadata:")for key, value in doc.metadata.items():print(f"{key}: {value}")print("\n")
-------------------------------------------------------
Document 1:
Page content:
#### 1.1.1.1 标题
1.1.1.1 内容
Metadata:
Header 1: 1 标题
Header 2: 1.1 标题
Header 3: 1.1.1 标题-------------------------------------------------------
Document 2:
Page content:
2 内容
Metadata:
Header 1: 2 标题-------------------------------------------------------
Document 3:
Page content:
2.2 内容
Metadata:
Header 1: 2 标题
Header 2: 2.2 标题

strip_headers = False 禁止剥离标题

markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on, strip_headers=False
)
-------------------------------------------------------
Document 1:
Page content:
# 1 标题  
## 1.1 标题  
### 1.1.1 标题
#### 1.1.1.1 标题
1.1.1.1 内容-------------------------------------------------------
Document 2:
Page content:
# 2 标题
2 内容-------------------------------------------------------
Document 3:
Page content:
## 2.2 标题
2.2 内容

对比剥离标题情况
strip_headers=False
image.png
strip_headers=True
image.png

适应各种文本分割器

# MD splits
markdown_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on, strip_headers=False
)
md_header_splits = markdown_splitter.split_text(markdown_document)# Char-level splits
from langchain_text_splitters import RecursiveCharacterTextSplitterchunk_size = 250
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap
)# Split
splits = text_splitter.split_documents(md_header_splits)
splits

【额外补充】markdown转为langchain对象 UnstructuredMarkdownLoader 方法 调用

# !pip install unstructured > /dev/null
from langchain_community.document_loaders import UnstructuredMarkdownLoadermarkdown_path = "../../../../../README.md"
loader = UnstructuredMarkdownLoader(markdown_path)data = loader.load()
data[Document(page_content="ð\x9f¦\x9cï¸\x8fð\x9f”\x97 LangChain\n\nâ\x9a¡ Building applications with LLMs through composability â\x9a¡\n\nLooking for the JS/TS version? Check out LangChain.js.\n\nProduction Support: As you move your LangChains into production, we'd love to offer more comprehensive support.\nPlease fill out this form and we'll set up a dedicated support Slack channel.\n\nQuick Install\n\npip install langchain\nor\nconda install langchain -c conda-forge\n\nð\x9f¤” What is this?\n\nLarge language models (LLMs) are emerging as a transformative technology, enabling developers to build applications that they previously could not. However, using these LLMs in isolation is often insufficient for creating a truly powerful app - the real power comes when you can combine them with other sources of computation or knowledge.\n\nThis library aims to assist in the development of those types of applications. Common examples of these applications include:\n\nâ\x9d“ Question Answering over specific documents\n\nDocumentation\n\nEnd-to-end Example: Question Answering over Notion Database\n\nð\x9f’¬ Chatbots\n\nDocumentation\n\nEnd-to-end Example: Chat-LangChain\n\nð\x9f¤\x96 Agents\n\nDocumentation\n\nEnd-to-end Example: GPT+WolframAlpha\n\nð\x9f“\x96 Documentation\n\nPlease see here for full documentation on:\n\nGetting started (installation, setting up the environment, simple examples)\n\nHow-To examples (demos, integrations, helper functions)\n\nReference (full API docs)\n\nResources (high-level explanation of core concepts)\n\nð\x9f\x9a\x80 What can this help with?\n\nThere are six main areas that LangChain is designed to help with.\nThese are, in increasing order of complexity:\n\nð\x9f“\x83 LLMs and Prompts:\n\nThis includes prompt management, prompt optimization, a generic interface for all LLMs, and common utilities for working with LLMs.\n\nð\x9f”\x97 Chains:\n\nChains go beyond a single LLM call and involve sequences of calls (whether to an LLM or a different utility). LangChain provides a standard interface for chains, lots of integrations with other tools, and end-to-end chains for common applications.\n\nð\x9f“\x9a Data Augmented Generation:\n\nData Augmented Generation involves specific types of chains that first interact with an external data source to fetch data for use in the generation step. Examples include summarization of long pieces of text and question/answering over specific data sources.\n\nð\x9f¤\x96 Agents:\n\nAgents involve an LLM making decisions about which Actions to take, taking that Action, seeing an Observation, and repeating that until done. LangChain provides a standard interface for agents, a selection of agents to choose from, and examples of end-to-end agents.\n\nð\x9f§\xa0 Memory:\n\nMemory refers to persisting state between calls of a chain/agent. LangChain provides a standard interface for memory, a collection of memory implementations, and examples of chains/agents that use memory.\n\nð\x9f§\x90 Evaluation:\n\n[BETA] Generative models are notoriously hard to evaluate with traditional metrics. One new way of evaluating them is using language models themselves to do the evaluation. LangChain provides some prompts/chains for assisting in this.\n\nFor more information on these concepts, please see our full documentation.\n\nð\x9f’\x81 Contributing\n\nAs an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.\n\nFor detailed information on how to contribute, see here.", metadata={'source': '../../../../../README.md'})]

Retain Elements

Unstructured为不同的文本块创建不同的“元素”。默认情况下,我们将这些联合收割机组合在一起,但您可以通过指定 mode="elements" 轻松地保持这种分离。

loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")data = loader.load()data[0]
    Document(page_content='ð\x9f¦\x9cï¸\x8fð\x9f”\x97 LangChain', metadata={'source': '../../../../../README.md', 'page_number': 1, 'category': 'Title'})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/311805.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习 Lecture 7 迁移学习、精确率、召回率和F1评分

一、迁移学习(Transfer learning) 用来自不同任务的数据来帮助我解决当前任务。 场景:比如现在我想要识别从0到9度手写数字,但是我没有那么多手写数字的带标签数据。我可以找到一个很大的数据集,比如有一百万张图片的猫、狗、汽…

卷积神经网络的结构组成与解释(详细介绍)

文章目录 前言 1、卷积层 2、激活层 3、BN层 4、池化层 5、FC层(全连接层) 6、损失层 7、Dropout层 8、优化器 9、学习率 10、卷积神经网络的常见结构 前言 卷积神经网络是以卷积层为主的深层网络结构,网络结构包括有卷积层、激活层、BN层、…

专业140+总410+国防科技大学831信号与系统考研经验国防科大电子信息与通信,真题,大纲,参考书。

应群里同学要求,总结一下我自己的复习经历,希望对大家有所借鉴,报考国防科技大学,专业课831信号与系统140,总分410,大家以前一直认为国防科技大学时军校,从而很少关注这所军中清华,现…

【C++】哈希一

这篇博客要说的是哈希算法,哈希又称为散列,它是将存储的值和存储的位置建立起关联关系的一种算法,或者说是一种将任意长度的数据映射为固定长度的输出的算法。 什么意思呢?我们来看一个例子:比如说我们要存储1&#xf…

Github 2024-04-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2Cuda项目1C++项目1C项目1HTML项目1Jupyter Notebook项目1JavaScript项目1Python - 100天从新手到大师 创建周期:22…

pytorch 今日小知识3——nn.MaxPool3d 、nn.AdaptiveAvgPool3d、nn.ModuleList

MaxPool3d — PyTorch 2.2 documentation 假设输入维度(1,2,3,4,4) maxpool torch.nn.MaxPool3d(kernel_size(2, 2, 2), stride(2, 2, 2), padding(1, 0, 0))F 维的 kernel_size 为 2,说明在 F 维的覆盖的 frame 数为 2,也就是…

机器学习实验------决策树

第1关:什么是决策树 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 第2关:信息熵与信息增益 任务描述 本关任务:掌握什么是信息增益,完成计算信息增益的程序设计。 import numpy as npdef calcIn…

【机器学习】knn邻近算法解决实际问题

采用kNN算法回答红色字体提出的问题。要求写出算法过程和预测结果。 KNN原理 KNN(K-最近邻)算法是一个简单直观的分类方法。它的核心思想是“物以类聚”,即一个样本的类别通常由其周围最近的几个邻居决定。这里的“最近”是通过计算样本间的…

智能零售:引领购物新时代

智能零售通过整合人工智能、物联网、大数据和机器学习等技术,正在彻底改变传统的购物模式,为消费者和零售商提供前所未有的效率和个性化体验。 智能零售利用消费者数据分析来提供个性化的购物推荐。无论是在线平台或是实体店内,智能系统都能…

RabbitMQ - Spring boot 整合 RabbitMQ

一、RabbitMQ 1、RabbitMQ 使用场景 1.1、服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下…

Gitea是一个开源、轻量级的自托管Git解决方案

Gitea介绍 Gitea是一个由Go语言编写的、轻量级的、自托管的Git解决方案,类似于GitHub、GitLab等平台。它是用Go语言编写的开源软件,提供了Git版本控制系统的基本功能,包括代码托管、问题跟踪、代码审查、Wiki等。Gitea的设计目标是简单易用、…

uniapp 当前系统没有安装苹果根证书,是否打开证书目录(打开后依次安装证书

当你遇到这类问题时,说明你也极其的困惑!这就是为啥大抵国内这些货色搞的东西总是不尽人意!连开发者生态都搞不好,就急着吹嘘。 这是官方给的技术说明方案: 恭喜你,当你按照这个搞之后,你的问题…

海外媒体如何发布软文通稿

大舍传媒-带您了解海外发布新潮流 随着全球化的不断深入,越来越多的中国企业开始关注海外市场。为了在国际舞台上树立品牌形象,企业纷纷寻求与海外媒体合作,通过发布软文通稿的方式,传递正面信息,提升品牌知名度。作为…

【ElasticSearch】安装(bug篇)

以下解决办法参考自网友们的分享 1. JDK绑定问题 但其实这样也没有问题,因为内嵌的jdk版本与当前的es版本是适配的 但是,如果内嵌的jdk与当前es不适配,那就要修改配置文件 / 添加环境变量,让es启动的时候能扫描到我们本地的jdk …

2024蓝桥杯每日一题(组合计数)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:计算系数 试题二:求组合数1 试题三:求组合数2 试题四:杨辉三角形 试题一:计算系数 【题目描述】 给定一个多项式 (axby)k,请…

Linux内核之aligned用法实例(四十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

2024 NTFS读写工具Tuxera NTFS for Mac 是如何进行下载、安装、激活的

本篇将为各位小伙伴们集中讲解一下NTFS读写工具Tuxera NTFS for Mac 是如何进行下载、安装、激活与换机的。 在数字化时代,数据交换和共享变得日益重要。然而,对于Mac用户来说,与Windows系统之间的文件交换可能会遇到一些挑战。这是因为Mac …

一个开源的全自动视频生成软件MoneyPrinterTurbo

只需提供一个视频 主题 或 关键词 ,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 一:功能特性 完整的 MVC架构,代码 结构清晰,易于维护,支持 API 和 Web界面…

【安装部署】Apache SeaTunnel 和 Web快速安装详解

版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本。 可以自定义兼容处理,官方提供了文档:https://mp.weixin.qq.com/s/Al1VmBoOKu2P02sBOTB6DQ 因为大部分用…

Backend - DRF 序列化(django-rest-framework)

目录 一、restful 、django-rest-framework 、swagger 三者的关系 (一)restful API(REST API) 1. rest 2. restful 3. api 4. restfulAPI (二)django-rest-framework(简称DRF&#xff09…