背景描述

LangChain 提供了丰富的文档加载器生态,这些加载器针对不同数据源进行了专门优化,能够满足各种场景下的文档处理需求。

主要加载器类型

  1. TextLoader - 最基础的文本加载器,支持从本地文件系统、远程URL等多种来源加载纯文本数据。可以处理.txt、.md等格式,支持自定义编码设置。

  2. CSVLoader - 专门用于处理结构化表格数据,能够自动识别CSV文件中的分隔符,支持指定加载特定列。

  3. UnstructuredFileLoader - 智能文件处理加载器,采用Unstructured开源库作为后端,能够自动识别和处理200+种文件格式,包括Word(.docx)、Excel(.xlsx)、PPT(.pptx)等。

  4. DirectoryLoader - 批量文件加载器,可以递归扫描指定目录下的所有文件,支持通过glob模式进行文件过滤。

  5. UnstructuredHTMLLoader - 专业的HTML解析器,能够智能识别网页中的主要内容区域。

  6. JSONLoader - 支持深度解析JSON数据结构,可以指定JSONPath来提取特定字段。

  7. PyPDFLoader - PDF文档专用加载器,基于PyPDF2库实现,支持提取文本内容和元数据。

  8. 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])