鱼C论坛

 找回密码
 立即注册
查看: 17|回复: 1

[AI工作流] 23. LangChain组件——Document loaders:文档加载器

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 什么是文档加载器,有什么用?
文档加载器提供了一套标准接口,用于将不同来源(如CSV、PDF 或JSON等)的数据读取为LangChain的文档格式。
这确保了无论数据来源如何,都能对其进行一致性处理。
注:
  • 文档加载器均继承于BaseLoader类
  • 返回Document类型的对象







2. 常见的文件类型加载实战
①CSV Loader
  1. # 方式1: 一次性批量加载

  2. from langchain_community.document_loaders import CSVLoader


  3. loader = CSVLoader(
  4. file_path="E:/data/stu.csv", # 按实际情况修改文件地址
  5. csv_args={
  6. "delimiter": ",", # 指定分隔符
  7. "quotechar": '"', # 指定带有分隔符文本的引号包围是单引号还是双引号
  8. # 如果数据原本有表头,就不要下面的代码,如果没有可以使用
  9. "fieldnames": ['name', 'age', 'gender', '爱好']
  10. },
  11. encoding="utf-8" # 指定编码为UTF-8
  12. )

  13. # 批量加载 .load() -> [Document, Document, ...]
  14. documents = loader.load()
  15. #print(documents)

  16. for document in documents:
  17. print(type(document), document)



  18. # 方式2: 懒加载,延迟流式传输文档,对大型数据集很有用,避免内存溢出。
  19. from langchain_community.document_loaders import CSVLoader


  20. loader = CSVLoader(
  21. file_path="E:/P3_LangChainRAG开发/data/stu.csv", #按实际情况修改文件地址
  22. csv_args={
  23. "delimiter": ",", # 指定分隔符
  24. "quotechar": '"', # 指定带有分隔符文本的引号包围是单引号还是双引号
  25. # 如果数据原本有表头,就不要下面的代码,如果没有可以使用
  26. "fieldnames": ['name', 'age', 'gender', '爱好']
  27. },
  28. encoding="utf-8" # 指定编码为UTF-8
  29. )



  30. #懒加载 .lazy_load() 迭代器[Document]

  31. for document in loader.lazy_load():
  32. print(document)
复制代码


②Json Loader
下载 (42).png
下载 (43).png
  1. from langchain_community.document_loaders import JSONLoader

  2. loader = JSONLoader(
  3. file_path="E:/data/stu_json_lines.json",
  4. jq_schema=".name",
  5. text_content=False, # 告知JSONLoader 我抽取的内容不是字符串
  6. json_lines=True # 告知JSONLoader 这是一个JSONLines文件(每一行都是一个独立的标准JSON)
  7. )

  8. document = loader.load()
  9. print(document)
复制代码


③text Loader
下载 (44).png
  1. from langchain_community.document_loaders import TextLoader
  2. from langchain_text_splitters import RecursiveCharacterTextSplitter

  3. # pip install langchain_text_splitters

  4. loader = TextLoader("E:/data/Python基础语法.txt", encoding="utf-8")

  5. docs = loader.load()        # [Document]

  6. splitter = RecursiveCharacterTextSplitter(
  7.     chunk_size=500,         # 分段的最大字符数
  8.     chunk_overlap=50,       # 分段之间允许重叠字符数
  9.     # 文本自然段落分隔的依据符号
  10.     separators=["\n\n", "\n", "。", "!", "?", ".", "!", "?", " ", ""],
  11.     length_function=len,    # 统计字符的依据函数
  12. )

  13. split_docs = splitter.split_documents(docs)
  14. print(len(split_docs))
  15. for doc in split_docs:
  16.     print("="*20)
  17.     print(doc)
  18.     print("="*20)
复制代码



④PyPDFLoader
下载 (45).png
  1. from langchain_community.document_loaders import PyPDFLoader

  2. loader = PyPDFLoader(
  3.     file_path="E:/data/pdf2.pdf",
  4.     #mode="single",        # 默认是page模式,每个页面形成一个Document文档对象,
  5.                         # single模式,不管有多少页,只返回1个Document对象
  6.     password="itheima"
  7. )

  8. i = 0
  9. for doc in loader.lazy_load():
  10.     i += 1
  11.     print(doc)
  12.     print("="*20, i)
复制代码









本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
什么是文档加载器?

简单来说,文档加载器就是把各种格式的文件(比如CSV、PDF、TXT)里的内容,“加载”成LangChain能看懂的统一格式(Document 对象)。这样不管你原来的数据是表格还是文章,LangChain都能用同样的方法来处理它们。

核心作用: 统一数据入口,方便后续处理(如文本分割、向量化等)。

注意:
  • 所有的文档加载器都基于 BaseLoader 类。
  • 它们最终都会返回一个或多个 Document 对象。


常见文件加载实战

① CSV 文件加载
有两种加载模式:

  • 批量加载 (.load()): 一次性把整个文件读入内存。
  • 懒加载 (.lazy_load()): 按需一行行读取,对于大文件可以节省内存,避免程序崩溃。


  1. from langchain_community.document_loaders import CSVLoader

  2. # 方式1: 一次性批量加载
  3. loader = CSVLoader(
  4.     file_path="E:/data/stu.csv", # 你的文件路径
  5.     csv_args={
  6.         "delimiter": ",",   # 指定分隔符为逗号
  7.         "quotechar": '"',   # 指定文本引号
  8.     },
  9.     encoding="utf-8"
  10. )
  11. documents = loader.load() # 一次性全部加载
  12. for doc in documents:
  13.     print(doc)

  14. print("-" * 40)

  15. # 方式2: 懒加载(迭代器)
  16. loader2 = CSVLoader(file_path="E:/data/stu.csv", encoding="utf-8")
  17. for doc in loader2.lazy_load(): # 用for循环迭代,一次返回一个文档
  18.     print(doc)
复制代码


② JSON 文件加载
使用 jq_schema 参数来指定你想提取JSON中的哪个部分。

  1. from langchain_community.document_loaders import JSONLoader

  2. loader = JSONLoader(
  3.     file_path="E:/data/stu_json_lines.json",
  4.     jq_schema=".name", # 提取每个JSON对象里的"name"字段
  5.     text_content=False, # 告诉加载器,提取的内容不是纯文本字符串(这里提取的是字段值)
  6.     json_lines=True # 告知这是JSON Lines格式(每行一个独立JSON)
  7. )
  8. documents = loader.load()
  9. print(documents)
复制代码


③ 文本 (TXT) 文件加载与分割
文本文件加载后,通常需要分割成小块,以便AI模型处理。

  1. from langchain_community.document_loaders import TextLoader
  2. from langchain_text_splitters import RecursiveCharacterTextSplitter

  3. # 加载文本
  4. loader = TextLoader("E:/data/Python基础语法.txt", encoding="utf-8")
  5. docs = loader.load() # 得到一个Document列表

  6. # 创建文本分割器
  7. splitter = RecursiveCharacterTextSplitter(
  8.     chunk_size=500,      # 每个文本块的最大长度
  9.     chunk_overlap=50,    # 块与块之间重叠的字符数(保持上下文连贯)
  10.     length_function=len, # 计算文本长度的函数
  11. )

  12. # 执行分割
  13. split_docs = splitter.split_documents(docs)
  14. print(f"原始文档数:{len(docs)}, 分割后块数:{len(split_docs)}")
  15. for doc in split_docs:
  16.     print("="*20)
  17.     print(doc.page_content) # 打印分割后的文本内容
  18.     print("="*20)
复制代码


④ PDF 文件加载
可以按页加载,也可以将整个PDF作为一个文档加载。

  1. from langchain_community.document_loaders import PyPDFLoader

  2. loader = PyPDFLoader(
  3.     file_path="E:/data/pdf2.pdf",
  4.     # mode="single", # 默认是'page',每页一个Document。设为'single'则整个PDF为一个Document。
  5.     password="itheima" # 如果PDF有密码,在这里填写
  6. )

  7. # 使用懒加载按页读取
  8. i = 0
  9. for doc in loader.lazy_load():
  10.     i += 1
  11.     print(f"第 {i} 页内容:")
  12.     print(doc.page_content[:100]) # 打印每页的前100个字符作为预览
  13.     print("="*20)
复制代码


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-8 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表