前言
以下我们对于常见的文本数据的加载方式,进行一一解析,掌握好这几个常见的加载器,为我们以后的文本分割打好基础。
加载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中的图片中的文字。