36.RAG開發(fā)-23-CSVLoader

Documentloaders文檔加載器

文檔加載器提供了一套標(biāo)準(zhǔn)接口,用于將不同來源(如CSV、PDF_或JSON等)的數(shù)據(jù)讀取為L(zhǎng)angChain的文檔格式。這確保了無論數(shù)據(jù)來源如何,都能對(duì)其進(jìn)行一致性處理。
文檔加載器(內(nèi)置或自行實(shí)現(xiàn))需實(shí)現(xiàn)BaseLoader接口。

ClassDocument,是Langchain內(nèi)文檔的統(tǒng)一載體,所有文檔加載器最終返回此類的實(shí)例。
一個(gè)基礎(chǔ)的Document類實(shí)例,基于如下代碼創(chuàng)建:

from langchain_core.documents import Document

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

可以看到,Document類其核心記錄了:

  • page_content:文檔內(nèi)容
  • metadata:文檔元數(shù)據(jù)(字典)

不同的文檔加載器可能定義了不同的參數(shù),但是其都實(shí)現(xiàn)了統(tǒng)一的接口(方法)。

  • load():一次性加載全部文檔
  • lazy_load():延遲流式傳輸文檔,對(duì)大型數(shù)據(jù)集很有用,避免內(nèi)存溢出。

一個(gè)簡(jiǎn)單的CsVLoader的使用示例如下:

from langchain_community.document_loaders.csv_loader import CSVLoader

loader = CSVLoader(
    ...  # 初始化參數(shù)
)

# 一次性加載全部文檔
documents = loader.load()

# 對(duì)于大數(shù)據(jù)集,分段返回文檔
for document in loader.lazy_load():
    print(document)

Langchain內(nèi)置了許多文檔加載器,詳細(xì)參見官方文檔:
https://docs.langchain.com/oss/python/integrations/document_loaders
我們簡(jiǎn)單的學(xué)習(xí)如下幾個(gè)常用的文檔加載器:

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

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

data = loader.load()

print(data)

自定義CSV文件的解析和加載

# 導(dǎo)入CSVLoader類,用于加載CSV文件
from langchain_community.document_loaders.csv_loader import CSVLoader

# 初始化CSVLoader,指定文件路徑和CSV解析參數(shù)
loader = CSVLoader(
    file_path="./xxx.csv",  # CSV文件的路徑
    csv_args={
        "delimiter": ",",  # 指定字段分隔符為逗號(hào)
        "quotechar": '"',  # 指定字符串的引號(hào)包裹字符
        "fieldnames": ["name", "age", "gender"],  # 指定CSV文件的字段名(無表頭時(shí)使用,有表頭則首行作為數(shù)據(jù))
    },
)

# 加載CSV文件中的數(shù)據(jù)
data = loader.load()

# 打印加載的數(shù)據(jù)
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"
孫悅?cè)?27,女,"吃飯,rap"
from langchain_community.document_loaders import CSVLoader

loader = CSVLoader(
    "./data/stu.csv", # CSV文件路徑
    csv_args={
        "delimiter": ",", # 字段分隔符
        "quotechar": '"', #指定帶有分隔符文本的引號(hào)包圍是單引號(hào)還是雙引號(hào)
        #如果數(shù)據(jù)原本有表頭,就不要下面的代碼,如果沒有可以使用
        "fieldnames": ["name", "age", "gender", "hobby"], # 字段名列表
    },
    # 其他參數(shù)...
    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: 孫悅?cè)?age: 27
gender: 女,"吃飯,rap"
hobby: None' metadata={'source': './data/stu.csv', 'row': 10}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容