【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 天前
LangChain构建大模型应用之问答系统(五)
人工智能·python·langchain
yibuapi_com2 天前
Embedding 的数学特性与可视化解析
chatgpt·架构·langchain·embedding·claude·向量数据库·中转api
为啥全要学3 天前
vLLM部署Qwen2-7B模型推理
python·langchain·vllm
满怀10153 天前
【LangChain全栈开发指南】从LLM集成到智能体系统构建
人工智能·python·langchain·ai编程·智能体开发
进取星辰5 天前
21. LangChain金融领域:合同审查与风险预警自动化
金融·langchain·自动化
tangjunjun-owen6 天前
第三章:langchain加载word文档构建RAG检索教程(基于FAISS库为例)
langchain·llm·word·faiss·rag
Ven%6 天前
LangChain:大语言模型应用的“瑞士军刀”入门指南
人工智能·语言模型·langchain
yibuapi_com6 天前
开源智能体MetaGPT记忆模块解读
python·ai·语言模型·chatgpt·架构·langchain·claude
一切皆有可能!!6 天前
2025年LangChain(V0.3)开发与综合案例
语言模型·langchain