langChain 构建 RAG01 - 加载数据

本文介绍 langchain 加载不同类型文档的方法

使用 langchain 的文档加载器,从各类数据源加载数据,加载后的数据变为一个 Document 对象,对象内部包含一段文本及相关元数据

文档加载器提供函数 load 及 lazy_load 加载数据为 Document 对象,前者立马加载数据到内存,后者延迟加载

Text、. Md 文件

1
2
3
4
5
from langchain.document_loaders import TextLoader

# 定义文本加载器,指定读取的文件路径
loader = TextLoader("./documents/三国演义.txt")
documents=loader.load()

Pdf 文档

使用第三方库 pypdf 实现

1
2
3
4
5
6
7
8
9
10
from langchain.document_loaders import PyPDFLoader

# 创建一个 PyPDFLoader Class 实例,输入为待加载的pdf文档路径
loader = PyPDFLoader("docs/matplotlib/第一回:Matplotlib初相识.pdf")

# 调用 PyPDFLoader Class 的函数 load对pdf文件进行加载
pages = loader.load()

print(type(pages)) # <class 'list'>
print(len(pages)) # 3

YouTube 音频

首先,我们将构建一个 GenericLoader 实例来对 Youtube 视频的下载到本地并加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from langchain.document_loaders.generic import GenericLoader
from langchain.document_loaders.parsers import OpenAIWhisperParser
from langchain.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader

url="https://www.youtube.com/watch?v=_PHdzsQaDgw"
save_dir="docs/youtube-zh/"

# 创建一个 GenericLoader Class 实例
loader = GenericLoader(
#将链接url中的Youtube视频的音频下载下来,存在本地路径save_dir
YoutubeAudioLoader([url],save_dir),

#使用OpenAIWhisperPaser解析器将音频转化为文本
OpenAIWhisperParser()
)

# 调用 GenericLoader Class 的函数 load对视频的音频文件进行加载
pages = loader.load()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[youtube] Extracting URL: https://www.youtube.com/watch?v=_PHdzsQaDgw
[youtube] _PHdzsQaDgw: Downloading webpage
[youtube] _PHdzsQaDgw: Downloading ios player API JSON
[youtube] _PHdzsQaDgw: Downloading android player API JSON
[youtube] _PHdzsQaDgw: Downloading m3u8 information


WARNING: [youtube] Failed to download m3u8 information: HTTP Error 429: Too Many Requests


[info] _PHdzsQaDgw: Downloading 1 format(s): 140
[download] docs/youtube-zh//【2023年7月最新】ChatGPT注册教程,国内详细注册流程,支持中文使用,chatgpt 中国怎么用?.m4a has already been downloaded
[download] 100% of 7.72MiB
[ExtractAudio] Not converting audio docs/youtube-zh//【2023年7月最新】ChatGPT注册教程,国内详细注册流程,支持中文使用,chatgpt 中国怎么用?.m4a; file is already in target format m4a
Transcribing part 1!

网页文档

1
2
3
4
5
6
7
8
9
10
11
12
13
from langchain.document_loaders import WebBaseLoader


# 创建一个 WebBaseLoader Class 实例
url = "https://github.com/datawhalechina/d2l-ai-solutions-manual/blob/master/docs/README.md"
header = {'User-Agent': 'python-requests/2.27.1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept': '*/*',
'Connection': 'keep-alive'}
loader = WebBaseLoader(web_path=url,header_template=header)

# 调用 WebBaseLoader Class 的函数 load对文件进行加载
pages = loader.load()

CSV

1
2
3
4
5
6
from langchain.document_loaders.csv_loader import CSVLoader

# 定义文本加载器,指定读取的文件路径
loader = CSVLoader("./documents/京东笔记本销售数据.csv")
documents=loader.load()
print(documents[0].metadata)

HTML

1
2
3
4
5
6
from langchain.document_loaders import UnstructuredHTMLLoader

# 定义文本加载器,指定读取的文件路径
loader = UnstructuredHTMLLoader("./documents/如何加载HTML-LangChain中文.html")
documents=loader.load()
print(documents[0].metadata)

Json

1
2
3
4
5
6
from langchain.document_loaders import JSONLoader

# 定义文本加载器,指定读取的文件路径
loader = JSONLoader("./documents/facebook_chat.json",jq_schema='.messages[].content',text_content=False)
documents=loader.load()
print(documents[0].metadata)

Markdown

1
2
3
4
5
6
from langchain.document_loaders import UnstructuredMarkdownLoader

# 定义文本加载器,指定读取的文件路径
loader = UnstructuredMarkdownLoader("./documents/读书-零秒执行力.md")
documents=loader.load()
print(documents[0].metadata)

Doc、xml 文件

依赖 Azure AI 文档智能 (以前称为 Azure Form Recognizer) 云服务,需要 key,暂不记录