AI的学习之路_8_文档加载器

文档加载器提供一套标准接口,用于不同来源(CSV、PDF等)的数据读取为LangChain的文档格式
文档加载器需要继承实现BaseLoader接口

Document loaders

Class DocumentLangChain内文档的统一载体,所有文档加载器最终返回此类的示例
首先看一下简单的使用

from langchain_community.documents import Document

document = Document(
	page_content = "Hello, world!", metadata = {"source": "https://example.com"}
)

其中

  • page_content: 是文档内容
  • metadata:是文档元数据(字典)

无论是那种类型的文档加载器都有统一的接口,例如:

  • load() 一次性加载全部文档
  • lazy_load() 延迟流式传输文档,对大型数据集很有用,避免内存溢出

CSVLoader

CSV文件加载器
看一个简单的CSV加载器的代码

from langchain_community.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(
    file_path= "./data/测试.csv", # 文件路径
    encoding= 'utf-8',  # 指定编码格式
    csv_args={
        "delimiter": ",",   # 指定分隔符
        "quotechar": '"',   # 指定字符串的引号包裹
        #"fieldnames": ["name", "age", "gender"],    # 字段列表(无表头的时候使用,不然第一行会被当成数据)
    },
)

data = loader.load()

print(data)

文件的内容如图所示
image
运行后得到如下结果
image

JSONLoader

以以下json文件为例,读取加载以下

{
  "name": "小明",
  "age": "18",
  "hobby": ["打游戏", "听歌"],
  "other": {
    "addr": "北京",
    "tel": "11885253058"
  }
}

代码抽取以下name属性

from langchain_community.document_loaders.json_loader import JSONLoader

loader = JSONLoader(
    file_path="./data/测试.json",    # 路径
    jq_schema=".name",  # jq schema语法
    text_content=True, # 抽取的是否为字符串 默认true
    json_lines=False # 是否为jsonLines文件,就是每一行都是json文件 默认false
)

doc = loader.load()
print(doc)

结果如下
image

如果jq_schema如果只是.就会获得如下结果
image
想加载other下的addr需要写成.other.addr

抽取hobby需要指明text_content为false

在看一个这样的json

[
  {"name": "11", "age": "18"},
  {"name": "22", "age": "21"},
  {"name": "33", "age": "25"},
  {"name": "44", "age": "41"}
]

抽取json中的名字

from langchain_community.document_loaders.json_loader import JSONLoader

loader = JSONLoader(
    file_path="./data/测试s.json",    # 路径
    jq_schema=".[].name",  # jq schema语法
    text_content=False, # 抽取的是否为字符串 默认true
)

doc = loader.load()
print(doc)

image
其中.表示json根 []表示元素 再.表示其下的元素,和cpp类似
看看最后一个json文件

{"name": "11", "age": "18"}
{"name": "22", "age": "21"}
{"name": "33", "age": "25"}
{"name": "44", "age": "41"}

这个json每一行都是一个json
读一下每个name

from langchain_community.document_loaders.json_loader import JSONLoader

loader = JSONLoader(
    file_path="./data/测试s.json",    # 路径
    jq_schema=".name",  # jq schema语法
    text_content=False, # 抽取的是否为字符串 默认true
    json_lines=True # 是否为jsonLines文件,就是每一行都是json文件 默认false
)

doc = loader.load()
print(doc)

image

TextLoader

加载一个txt文档放入一个doc对象中
看一个txt文件

这是第一段。
这是第二段.
这是一个问号段落?
这是一个叹号段落!
这个一个无后缀段落
这才是最后一段

注意观察换行符等符号哦
读它

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter # 字符分割器

loader = TextLoader(
    "./data/测试.txt",
    encoding="utf-8"
)

# 读取文档
doc = loader.load()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, # 分段的最大字符数
    chunk_overlap=50,   # 分段之间允许重叠的字符数
    # 文本分段依据
    separators=["\n\n", "\n", ".", "。", "?", "!", " ", ""],
    # 字符统计依据(函数)
    length_function=lambda x: len(x),
)

split_docs = splitter.split_documents(doc)

for split_doc in split_docs:
    print(split_doc)

image

这里用到了一个叫做文档分割器的东西哦

PyPDFLoader

尝试读取一个pdf文件

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader(
    file_path="./data/测试.pdf",
    mode='page',    # 读取模式,page按页读取 single一整个读取
    # password='password' # 文件密码
)

doc = loader.load()

for page in doc:
    print(page)

image

posted @ 2026-04-01 21:58  灵垚克府  阅读(1)  评论(0)    收藏  举报