【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中的图片中的文字。

相关推荐
打小就很皮...1 小时前
基于 Python + LangChain + React 实现智能发票识别与验真系统实战
前端·react.js·langchain·ocr·发票识别
颜酱14 小时前
让 Agent 不再失忆:LangChain 短期记忆实战
langchain·agent
装不满的克莱因瓶16 小时前
了解 LangChain 中的 LLM 与 ChatModel 的差异
人工智能·python·ai·langchain·llm·agent·chatmodel
颜酱16 小时前
LangChain 工具调用:从原理、入门到落地
langchain·llm
swipe17 小时前
别再把关系库和向量库拆开了:PostgreSQL 搭建 AI 长期记忆层实战
面试·langchain·llm
喵叔哟21 小时前
Week 3 -- Day 1:LangGraph 入门
langchain
wuhen_n1 天前
RAG 实战:语义检索 + 大模型生成精准问答
前端·langchain·ai编程
秦jh_1 天前
【LangChain核心组件】少样本提示(示例选择器)
人工智能·python·langchain
VipSoft1 天前
LangChain 入门 Memory 会话记忆
langchain