【LangChain基础系列】深入全面掌握文本加载器

前言

以下我们对于常见的文本数据的加载方式,进行一一解析,掌握好这几个常见的加载器,为我们以后的文本分割打好基础。

加载Text 文件

python 复制代码
from langchain_community.document_loaders import TextLoader

loader = TextLoader("D:\\111.txt", "utf-8")

data = loader.load()
print(data)
# 返回的数据式一个列表,列表中包含一个Document对象
# Document对象包含两个属性,metadata和page_content
# metadata是一个字典,page_content是一个字符串,字符串中包含了文件的内容。
# [Document(metadata={'source': 'D:\\111.txt'}, page_content='111\n222\n333')]

返回的数据式一个列表,列表中包含一个Document对象

Document对象包含两个属性,metadata和page_content

metadata是一个字典,page_content是一个字符串,字符串中包含了文件的内容。

[Document(metadata={'source': 'D:\\111.txt'}, page_content='111\n222\n333')]

注意:声明loader一定要指定编码格式为:utf-8,否则中文会出现乱码!

加载 CSV 文件

python 复制代码
from langchain_community.document_loaders import CSVLoader


loader = CSVLoader(
    "E:\\dev\\langchain\\loaders\\data.csv",
)

data = loader.load()
print(data)

Document(metadata={'source': 'E:\\\\dev\\\\langchain\\\\loaders\\\\data.csv', 'row': 0}, page_content='name: dongchenxu\\nage: 35'), Document(metadata={'source': 'E:\\\\dev\\\\langchain\\\\loaders\\\\data.csv', 'row': 1}, page_content='name: zhangli\\nage: 25')

从结果来看,解析到数据表示一行数据一个Document,可以遍历这个Document列表来获取每一行的数据。

加载 JSON 文件

data.json:

{

"name": "langchain基础系列",

"version": "1.0.0",

"description": "",

"author": "",

"license": "ISC",

"chapters": [

{ "title": "LangChain基础", "path": "langchain基础.md", "description": "LangChain基础" },

{ "title": "LangChain进阶", "path": "langchain进阶.md", "description": "LangChain进阶"},

{ "title": "LangChain实战", "path": "langchain实战.md", "description": "LangChain实战" }

]

}

python 复制代码
from langchain_community.document_loaders import JSONLoader

# 可以通过metadata_func来修改metadata,进而修改Document对象的metadata属性。
def metadata_func(record: dict, metadata: dict) -> dict:
    metadata['name'] = record.get('name')
    return metadata

loader = JSONLoader(
    "D:\\data.json", 
    jq_schema='.chapters[] | {title, description}', 
    text_content=False,
    metadata_func= metadata_func,
)

data = loader.load()
print(data)

jq_schema字段指定获取json数据的范围:

1、jq_schema='.' 表示获取全部

2、jq_schema='.name':表示获取name字段

3、jq_schema='.chapters[]':表示获取chapters数组

4、jq_schema='.chapters[].title':表示获取chapters中的title

5、jq_schema='.chapters[] | {title, description}':表示获取chapters中的titledescription

当输出的page_content不是text时,text_content字段要设置为False,否则会报错,建议这个字段总是设置为False,即可以接收text,也可以接收json

加载 Markdown 文件

python 复制代码
from langchain_community.document_loaders import UnstructuredMarkdownLoader

loader = UnstructuredMarkdownLoader(
    file_path="E:\\dev\\langchain\\loaders\\data.md", 
    mode="elements",
)

data = loader.load()
print(data)

其中mode参数很重要:

1、mode为空或者设置为single,表示整个文档是一个Document

2、mode为elements,表示按照元素拆分为多个Document

加载 PDF 文件

提取出来的数据是Document的数组,每一页都是一个Document。

python 复制代码
from langchain_community.document_loaders import PyPDFLoader
from pydantic import FilePath

loader = PyPDFLoader(
    file_path = "E:\\dev\\langchain\\loaders\\data.pdf", 
    extract_images=True,
)
# pdf的每一页都被视为一个Document对象,每个Document对象都包含一个metadata属性,
# metadata属性是一个字典,包含了pdf的一些元数据,比如pdf的页数,pdf的文件名,pdf的路径等等。
# 每个Document对象都包含一个page_content属性,page_content属性是一个字符串,
# 字符串中包含了pdf的内容。

# extract_images=True, 表示提取pdf中的图片中的文字
# 如果pdf是扫描的,那么需要设置extract_images=True,否则无法提取内容
data = loader.load()
print(data)

对于加载pdf的场景,最好是设置extract_images=True, 表示提取pdf中的图片中的文字。

相关推荐
金汐脉动2 小时前
实践指南:从零开始搭建RAG驱动的智能问答系统
langchain
MrGaoGang20 小时前
AI应用开发:LangGraph+MCP
前端·人工智能·langchain
西部荒野子1 天前
LangChain.js 中的 Runnable 系统
langchain
大尾巴青年1 天前
06 一分钟搞懂langchain的Agent是如何工作的
langchain·llm
敲键盘的小夜猫2 天前
LangChain核心之Runnable接口底层实现
langchain
疯狂的小强呀2 天前
基于langchain的简单RAG的实现
python·langchain·rag检索增强
用户711283928472 天前
LangChain(三) LCEL
人工智能·langchain
啾啾大学习2 天前
LangChain快速筑基(带代码)P3-连续对话Memory
langchain
啾啾大学习2 天前
LangChain快速筑基(带代码)P0-DeepSeek对话与联网搜索
langchain
啾啾大学习2 天前
LangChain快速筑基(带代码)P7-LLM外部数据检索Retrievers
langchain