LangChain-RAG学习之 文档加载器

目录

一、实现原理

二、文档加载器的选择 

(一).PDF

 加载本地文件

可能需要的环境配置

(二).CSV

1、使用每个文档一行的 CSV 数据加载 CSVLoader

2、自定义 csv 解析和加载 (csv_args

3、指定用于 标识文档来源的 列(source_column

(三)、文件目录 file_directory

1、加载文件目录数据(DirectoryLoader

2、显示进度条 (tqdm,show_progress

3、使用多线程 (use_multithreading

4、更改加载器类(loader_cls

(四)、HTML

1、加载 html (UnstructuredHTMLLoader

2、使用 BeautifulSoup4 加载 HTML (BSHTMLLoader我们还可以使用 BeautifulSoup4 使用 BSHTMLLoader 加载 HTML 文档。这将提取 HTML 中的文本到 page_content,并将页面标题作为 metadata 的 title。

(五)、JSON

1、使用 json 加载数据 

2、使用 JSONLoader

3、提取元数据 (Extracting metadata)通常,我们希望将 JSON 文件中的元数据包含到从内容创建的文档中。

(六)、Markdown ( UnstructuredMarkdownLoader

保留元素(Retain Elements)


 

一、实现原理

(1) 上传文档:用户上传包含知识的文档,支持 txt、pdf、docx 等格式,LangChain Chatchat 会将文档转换为 Markdown 格式

(2) 文本切割:为了便于分析和处理,将长文本切割为小块(chunk)

(3) 文本向量化:将切割的 chunk 通过 embedding 技术,转换为算法可以处理的向量,存入向量数据库

(4) 问句向量化:用户提问后,同样将用户的问句向量化

(5) 语义检索匹配:将用户的问句与向量数据库中的 chunk 匹配,匹配出与问句向量最相似的 top k 个

(6) 提交 prompt 至 LLM:将匹配出的文本和问句,一起添加到配置好的 prompt 模板中,提交给 LLM

(7) 生成回答:LLM 生成回答,返回给用户

二、文档加载器的选择 

LangChain封装了一系列类型的文档加载模块,例如PDF、CSV、HTML、JSON、Markdown、File Directory等。下面以PDF文件夹在为例看一下用法,其它类型的文档加载的用法都类似。

(一).PDF

 加载本地文件

LangChain加载PDF文件使用的是pypdf,先安装:

pip install pypdf
from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("知识问答.pdf")
pages = loader.load_and_split()

print(f"第0页:\n{pages[0]}") ## 也可通过 pages[0].page_content只获取本页内容

加载在线PDF文件 

可能需要的环境配置

在开始之前,你可能需要安装以下的Python包:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple unstructured
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pdf2image
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple unstructured-inference
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pikepdf

除了Python包,还需要下载 nltk_data,这东西非常大,下载起来非常慢。所以们可以事先下好,放到固定的位置。


下载地址:https://github.com/nltk/nltk_data/tree/gh-pages
下载完后,将其中的packages文件夹内的全部内容拷贝到固定位置,例如上面的
原文链接:https://blog.csdn.net/Attitude93/article/details/135996698

from langchain_community.document_loaders import OnlinePDFLoader

loader = OnlinePDFLoader("https://arxiv.org/pdf/2302.03803.pdf")
data = loader.load()
print(data)

(二).CSV

逗号分隔值(CSV) 文件是一种使用逗号分隔值的定界文本文件。
文件的每一行是一个数据记录;每个记录由一个或多个字段组成,字段之间用逗号分隔。


1、使用每个文档一行的 CSV 数据加载 CSVLoader
from langchain.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(file_path='./example_data/mlb_teams_2012.csv')
data = loader.load()
2、自定义 csv 解析和加载 (csv_args

参见 csv 模块 文档,了解支持的 csv 参数的更多信息。

loader = CSVLoader(file_path='./mlb_teams_2012.csv', 
					csv_args={
					    'delimiter': ',',
					    'quotechar': '"',
					    'fieldnames': ['MLB Team', 'Payroll in millions', 'Wins']
					})

data = loader.load()
3、指定用于 标识文档来源的 列(source_column

使用 source_column 参数指定从每一行创建的文档的来源。
否则,file_path 将作为从 CSV 文件创建的所有文档的来源。

在使用基于来源回答问题的链时,这非常有用。

loader = CSVLoader(file_path='./example_data/mlb_teams_2012.csv',
				   source_column="Team")

data = loader.load()

(三)、文件目录 file_directory

这里介绍了如何加载目录中的所有文档。

在底层,默认情况下使用 UnstructuredLoader

我们可以使用 glob 参数来控制要加载的文件。

请注意,这里不加载 .rst 文件或 .html文件。


1、加载文件目录数据(DirectoryLoader
from langchain.document_loaders import DirectoryLoader
loader = DirectoryLoader('../', glob="**/*.md")
docs = loader.load()
len(docs) # -> 1

 

2、显示进度条 (tqdm,show_progress

默认情况下,不会显示进度条。
要显示进度条,请安装 tqdm 库(如 pip install tqdm),并将 show_progress 参数设置为 True

loader = DirectoryLoader('../', 
						  glob="**/*.md", 
						  show_progress=True)
docs = loader.load()
3、使用多线程 (use_multithreading

默认情况下,加载操作在 一个线程 中进行。
为了利用多个线程,将 use_multithreading标志设置为 True。

loader = DirectoryLoader('../', 
						glob="**/*.md", 
						use_multithreading=True)
docs = loader.load() 
4、更改加载器类(loader_cls

默认情况下使用 UnstructuredLoader 类。但是,您可以相当容易地 更改加载器的类型。

from langchain.document_loaders import TextLoader

loader = DirectoryLoader('../', 
						  glob="**/*.md", 
						  loader_cls=TextLoader)

docs = loader.load()
len(docs)
# -> 1

 

(四)、HTML

超文本标记语言或 HTML 是用于在 Web 浏览器中显示的文档的标准标记语言。

1、加载 html (UnstructuredHTMLLoader

这部分介绍如何将 HTML 文档加载到 我们可以在下游使用的文档格式中。

from langchain.document_loaders import UnstructuredHTMLLoader
loader = UnstructuredHTMLLoader("example_data/fake-content.html")
data = loader.load()
2、使用 BeautifulSoup4 加载 HTML (BSHTMLLoader
我们还可以使用 BeautifulSoup4 使用 BSHTMLLoader 加载 HTML 文档。
这将提取 HTML 中的文本到 page_content,并将页面标题作为 metadata 的 title。
 
from langchain.document_loaders import BSHTMLLoader
loader = BSHTMLLoader("example_data/fake-content.html")
data = loader.load()

(五)、JSON

JSON (JavaScript Object Notation) 是一种开放标准的文件格式和数据交换格式,存储和传输方便,且可读。

JSON 对象由属性 key - 值 value 对和数组(或其他可序列化值)组成的数据对象。

1、使用 json 加载数据 
import json
from pathlib import Path
from pprint import pprint

from langchain.document_loaders import JSONLoader

file_path='./facebook_chat.json'
data = json.loads(Path(file_path).read_text())

 

2、使用 JSONLoader

JSONLoader 使用指定的 jq schema 来解析 JSON 文件。

它使用 jq python 包。 查看这个 手册 来详细了解 jq 语法。

pip install jq


loader = JSONLoader(
		    file_path='./facebook_chat.json',
		    jq_schema='.messages[].content')

data = loader.load()

 

3、提取元数据 (Extracting metadata)
通常,我们希望将 JSON 文件中的元数据包含到从内容创建的文档中。

下面演示了如何使用 JSONLoader 提取元数据。

需要注意一些关键的更改。在前一个示例中,我们没有收集元数据,在模式中直接指定了 page_content 的值的提取位置。

(六)、Markdown ( UnstructuredMarkdownLoader

Markdown 是一种轻量级标记语言,用于使用纯文本编辑器创建格式化文本。

这部分内容介绍了如何将 Markdown 文档 加载到我们可以在应用程序中 要使用的文档格式中。

! pip install unstructured > /dev/null

 

from langchain.document_loaders import UnstructuredMarkdownLoader
markdown_path = "../../../../../README.md"
loader = UnstructuredMarkdownLoader(markdown_path)
data = loader.load()

 

保留元素(Retain Elements)

在底层,Unstructured 为不同的文本块创建不同的“元素”。
默认情况下,我们将它们组合在一起,但通过指定 mode="elements" 可以轻松保留该分离。

loader = UnstructuredMarkdownLoader(markdown_path, 
									mode="elements")
data = loader.load()

更多方法可以阅读此篇文章 LangChain - 文档加载_langchain自带页面来源文档展示部分-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

某了么数据获取脚本

某了么数据获取脚本 这段代码定义了一个名为 ElemeH5 的类,继承自 Base 类,用于处理与饿了么平台的API交互。该类包括了多种方法来进行网络请求、数据处理和API接口的动态生成。以下是对主要组成部分的详细解析: 类属性定义: fun…

2023陇剑杯-流量分析篇-wp

1.ez_web Q1:服务器自带的后门文件是什么? 常用http过滤命令:http.request.full_urihttp.request.methodPOST 查看第一个POST请求,发现关键点file_put_contents(备注:file_put_contents内置函数,用于将字…

2×24.5W、内置 DSP、低失真、高信噪比、I2S 输入 D 类音频功率放大器,完美替换TPA5805,晶豪,致盛,

ANT3825 是一款高集成度、高效率的双通道数字 输入功放。供电电压范围在 5V~18V,数字接口 电源支持 3.3V 或 1.8V。双通道 BTL 模式下输出 功率可以到 224.5W(4Ω,16V,THDN1%), 单通道 PBTL 模式下可以输出 37W&#x…

Rust里的Fn/FnMut/FnOnce和闭包匿名函数关系

闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使…

武汉星起航:策略升级,亚马逊平台销售额持续增长显实力

武汉星起航电子商务有限公司,一家致力于跨境电商领域的企业,于2023年10月30日在上海股权托管交易中心成功挂牌展示,这一里程碑事件标志着公司正式踏入资本市场,开启了新的发展篇章。公司董事长张振邦在接受【第一财经】采访时表示…

Java_从入门到JavaEE_09

一、构造方法/构造器 含义:和new一起是创建对象的功能 特点: 与类名相同的方法没有返回项 注意: 当类中没有写构造方法时,系统会默认添加无参构造(无参数的构造方法)构造方法可以重载的 有参构造好处&…

开源15T tokens!HuggingFace放出规模最大、质量最高预训练数据集 | 最新快讯

新智元报道 编辑:LRS FineWeb 是一个高质量的预训练数据集,包含 15T 个 tokens,主要包含英语文本;消融实验证明了 FineWeb 数据集的质量要高于其他开源数据集;数据清洗脚本也已开源。 Meta 最近开源的 Llama 3 模型再次…

vulnhub靶场之FunBox-2

一.环境搭建 1.靶场描述 Boot2Root ! This can be a real life scenario if rockies becomes admins. Easy going in round about 15 mins. Bit more, if you are find and stuck in the rabbit-hole first. This VM is created/tested with Virtualbox. Maybe it works with…

C#编程模式之外观模式

创作背景:给位伙伴,五一小长假结束,我们继续对C#编程之路进行探索。本文将继续编程模式的研究,主要介绍外观模式。外观模式也称为门面模式,是一种结构型设计模式,它的目的是为子系统中的一组接口提供一个统…

【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙

【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…

oracle 8i系统检查

oracle 8i系统检查 set echo on spool d:\bk\1.txt select sysdate from dual; --版本信息 select * from v$version; --安装的产品 col PARAMETER for a50; col value for a10; select * from v$option order by 2; --用户信息 set linesize 100 set pagesize 100 COL USE…

景源畅信:抖音运营做什么工作内容?

在如今这个信息爆炸的时代,抖音已经成为了人们生活中不可或缺的一部分。无论是消磨时间、获取信息还是展示自我,抖音都扮演着重要的角色。那么,作为抖音运营,他们需要做些什么呢? 一、内容策划与制作 抖音运营的首要任务就是内容…

爬虫Python库Requests

一、介绍 Requests 是一个强大的 Python 库,用于发送 HTTP 请求。它使得与 RESTful API 进行交互变得非常简单。Requests 可以通过 GET、POST、PUT、DELETE 等方法发送各种类型的请求,并且支持自定义 HTTP 头、请求参数、数据、cookies 等。 使用 Requ…

MCM箱模型实践技术应用与O3形成途径、生成潜势、敏感性分析

目前,大气臭氧污染成为我国“十四五”期间亟待解决的环境问题。臭氧污染不仅对气候有重要影响,而且对人体健康、植物生长均有严重损害。为了高效、精准地治理区域大气臭氧污染,需要了解臭氧生成的主要途径及其前体物。OBM箱模型可用于模拟光化…

武汉星起航:跨境电商领域国际竞争力卓越,引领行业再上新台阶

在全球化浪潮的推动下,跨境电商行业日益成为各国经济交流与合作的重要桥梁。武汉星起航电子商务有限公司,作为跨境电商领域的佼佼者,凭借其深厚的行业经验和前瞻性的战略视野,在国际市场上展现出强大的竞争力,为行业的…

优化理论复习——(二)

本篇主要介绍一下LP问题及其相关的解法和示例,主要是记住相关的方法和结论即可,不要求证明。 方法主要是单纯形法,同时对于初始基可行解确定方面使用了大M法和二阶段法。主体都是关于单纯形法的。 首先认识一下线性规划的一般问题形式&#x…

报错,java: 程序包sun.misc不存在

错误描述 down下来一个项目,编译的时候报错,提示sun.misc包不存在,通过百度得知,原来这是jdk8中的jar包,在后来的版本中被移除了(我用的jdk11,没有这个包) 结局方法 1.更换jdk版本&…

知识库工具:付费的HelpLook AI知识库比免费的牵牛易帮好在哪里

在知识管理的领域中,选择合适的知识库工具对于企业来说很重要。市面上有很多知识库产品,有付费的和免费的,但是还是有很多企业会选择使用付费的,而不是免费的。这是为什么呢?这就是今天要探讨的问题,下面就…

vs配置cplex12.10

1.创建c空项目 2.修改运行环境 为release以及x64 3.创建cpp文件 4.鼠标右键点击项目中的属性 5.点击c/c,点击第一项常规,配置附加库目录 5.添加文件索引,主要用于把路径导进来 6.这一步要添加的目录与你安装的cplex的目录有关系 F:\program…

idea2023.2.5的控制台动态配置当前环境

一、idea2023.2.5的控制台动态配置当前环境 1.1、idea版本 1.2、配置方式 1.2.1、方式一 1.2.2、方式二 1.3、参考 https://blog.csdn.net/xiaoheihai666/article/details/127757658