36.RAG开发-23-CSVLoader

Documentloaders文档加载器

文档加载器提供了一套标准接口,用于将不同来源(如CSV、PDF_或JSON等)的数据读取为LangChain的文档格式。这确保了无论数据来源如何,都能对其进行一致性处理。
文档加载器(内置或自行实现)需实现BaseLoader接口。

ClassDocument,是Langchain内文档的统一载体,所有文档加载器最终返回此类的实例。
一个基础的Document类实例,基于如下代码创建:

from langchain_core.documents import Document

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

可以看到,Document类其核心记录了:

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

不同的文档加载器可能定义了不同的参数,但是其都实现了统一的接口(方法)。

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

一个简单的CsVLoader的使用示例如下:

from langchain_community.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(
    ...  # 初始化参数
)

# 一次性加载全部文档
documents = loader.load()

# 对于大数据集,分段返回文档
for document in loader.lazy_load():
    print(document)

Langchain内置了许多文档加载器,详细参见官方文档:
https://docs.langchain.com/oss/python/integrations/document_loaders
我们简单的学习如下几个常用的文档加载器:

  • CSVLoader
  • JSONLoader
  • PDFLoader
from langchain_community.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(file_path="./xxx.csv")

data = loader.load()

print(data)

自定义CSV文件的解析和加载

# 导入CSVLoader类,用于加载CSV文件
from langchain_community.document_loaders.csv_loader import CSVLoader

# 初始化CSVLoader,指定文件路径和CSV解析参数
loader = CSVLoader(
    file_path="./xxx.csv",  # CSV文件的路径
    csv_args={
        "delimiter": ",",  # 指定字段分隔符为逗号
        "quotechar": '"',  # 指定字符串的引号包裹字符
        "fieldnames": ["name", "age", "gender"],  # 指定CSV文件的字段名(无表头时使用,有表头则首行作为数据)
    },
)

# 加载CSV文件中的数据
data = loader.load()

# 打印加载的数据
print(data)

stu.csv

name,age,gender,hobby
王梓涵,25,男,"吃饭,rap"
刘若曦,22,女,"睡觉,rap"
陈俊宇,20,男,"吃饭,rap"
赵思瑶,28,女,"睡觉,rap"
黄浩然,15,男,"吃饭,rap"
林雨桐,20,女,"唱跳,rap"
周博文,20,男,"吃饭,rap"
吴诗琪,24,女,"吃饭,rap"
马子轩,22,男,"睡觉,rap"
孙悦然,27,女,"吃饭,rap"
from langchain_community.document_loaders import CSVLoader

loader = CSVLoader(
    "./data/stu.csv", # CSV文件路径
    csv_args={
        "delimiter": ",", # 字段分隔符
        "quotechar": '"', #指定带有分隔符文本的引号包围是单引号还是双引号
        #如果数据原本有表头,就不要下面的代码,如果没有可以使用
        "fieldnames": ["name", "age", "gender", "hobby"], # 字段名列表
    },
    # 其他参数...
    encoding="utf-8", # 编码为utf-8,确保正确读取中文
)

# # 加载文档
# docs = loader.load()
# print(docs)

# 懒加载文档
for document in loader.lazy_load():
    print(document)

page_content='name: name
age: age
gender: gender
hobby: hobby' metadata={'source': './data/stu.csv', 'row': 0}
page_content='name: 王梓涵
age: 25
gender: 男,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 1}
page_content='name: 刘若曦
age: 22
gender: 女,"睡觉,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 2}
page_content='name: 陈俊宇
age: 20
gender: 男,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 3}
page_content='name: 赵思瑶
age: 28
gender: 女,"睡觉,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 4}
page_content='name: 黄浩然
age: 15
gender: 男,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 5}
page_content='name: 林雨桐
age: 20
gender: 女,"唱跳,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 6}
page_content='name: 周博文
age: 20
gender: 男,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 7}
page_content='name: 吴诗琪
age: 24
gender: 女,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 8}
page_content='name: 马子轩
age: 22
gender: 男,"睡觉,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 9}
page_content='name: 孙悦然
age: 27
gender: 女,"吃饭,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 10}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容