背景描述
LangChain 提供了丰富的文档加载器生态,这些加载器针对不同数据源进行了专门优化,能够满足各种场景下的文档处理需求。
主要加载器类型
-
TextLoader - 最基础的文本加载器,支持从本地文件系统、远程URL等多种来源加载纯文本数据。可以处理.txt、.md等格式,支持自定义编码设置。
-
CSVLoader - 专门用于处理结构化表格数据,能够自动识别CSV文件中的分隔符,支持指定加载特定列。
-
UnstructuredFileLoader - 智能文件处理加载器,采用Unstructured开源库作为后端,能够自动识别和处理200+种文件格式,包括Word(.docx)、Excel(.xlsx)、PPT(.pptx)等。
-
DirectoryLoader - 批量文件加载器,可以递归扫描指定目录下的所有文件,支持通过glob模式进行文件过滤。
-
UnstructuredHTMLLoader - 专业的HTML解析器,能够智能识别网页中的主要内容区域。
-
JSONLoader - 支持深度解析JSON数据结构,可以指定JSONPath来提取特定字段。
-
PyPDFLoader - PDF文档专用加载器,基于PyPDF2库实现,支持提取文本内容和元数据。
-
ArxivLoader - 学术论文专用加载器,可以直接通过论文ID或搜索关键词从arXiv获取论文。
安装依赖
pip install -qU langchain-core langchain-openai
加载Text
from langchain_community.document_loaders import TextLoader
loader = TextLoader("./index.md")
data = loader.load()
print(data)
加载CSV
from langchain_community.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(file_path='./example_data/mlb_teams_2012.csv')
data = loader.load()
print(data)
加载目录
from langchain_community.document_loaders import DirectoryLoader
loader = DirectoryLoader('../', glob="**/*.md")
docs = loader.load()
print(docs)
# 显示进度条
loader = DirectoryLoader('../', glob="**/*.md", show_progress=True)
# 多线程加载
loader = DirectoryLoader('../', glob="**/*.md", use_multiprocessing=True)
# 自动检测编码
text_loader_kwargs={'autodetect_encoding': True}
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs)
加载HTML
from langchain_community.document_loaders import UnstructuredHTMLLoader
from langchain_community.document_loaders import BSHTMLLoader
loader = UnstructuredHTMLLoader("example_data/fake-content.html")
data = loader.load()
print(data)
# 使用BeautifulSoup4解析
loader = BSHTMLLoader("example_data/fake-content.html")
data = loader.load()
print(data)
加载JSON
from langchain_community.document_loaders import JSONLoader
import json
from pathlib import Path
from pprint import pprint
# 使用JSONLoader
loader = JSONLoader(
file_path='./example_data/facebook_chat.json',
jq_schema='.messages[].content',
text_content=False)
data = loader.load()
pprint(data)
加载JSON Lines
from langchain_community.document_loaders import JSONLoader
file_path = './example_data/facebook_chat_messages.jsonl'
pprint(Path(file_path).read_text())
loader = JSONLoader(
file_path='./example_data/facebook_chat_messages.jsonl',
jq_schema='.content',
text_content=False,
json_lines=True)
data = loader.load()
pprint(data)
加载Markdown
from langchain_community.document_loaders import UnstructuredMarkdownLoader
markdown_path = "../../../../../README.md"
loader = UnstructuredMarkdownLoader(markdown_path)
data = loader.load()
加载PDF
安装依赖
pip install pypdf
pip install rapidocr-onnxruntime
编写代码
from langchain_community.document_loaders import PyPDFLoader
# 加载PDF
loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()
print(pages[0])
# 将图片转化为文字
loader = PyPDFLoader("https://arxiv.org/pdf/2103.15348.pdf", extract_images=True)
pages = loader.load()
pages[4].page_content
向量化数据(简单例子)
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings())
docs = faiss_index.similarity_search("How will the community be engaged?", k=2)
for doc in docs:
print(str(doc.metadata["page"]) + ":", doc.page_content[:300])