引言
在处理大量文档时,快速有效地加载文件至自动化工具中是一个常见挑战。LangChain的DirectoryLoader
通过将文件从磁盘读取为LangChainDocument
对象提供了解决方案。本篇文章旨在介绍如何利用DirectoryLoader
高效地加载文档,包括使用通配符、多线程、自定义加载器,以及处理文件解码错误。
主要内容
使用文件系统加载
DirectoryLoader
允许通过简单的文件路径和通配符模式来选择加载特定类型的文件。
from langchain_community.document_loaders import DirectoryLoader
# 仅加载Markdown文件
loader = DirectoryLoader("../", glob="**/*.md")
docs = loader.load()
print(f"Loaded {len(docs)} documents.")
显示加载进度条
通过安装tqdm
库并设置show_progress
参数,我们可以在加载过程中看到进度条。
# 安装tqdm后启用进度条
loader = DirectoryLoader("../", glob="**/*.md", show_progress=True)
docs = loader.load()
使用多线程进行文件I/O
多线程可以显著提高文件读取速度。设置use_multithreading
参数即可启用。
loader = DirectoryLoader("../", glob="**/*.md", use_multithreading=True)
docs = loader.load()
更改加载器类
默认情况下,UnstructuredLoader
用于解析一般格式。我们可以通过loader_cls
参数自定义加载器,例如TextLoader
。
from langchain_community.document_loaders import TextLoader
loader = DirectoryLoader("../", glob="**/*.md", loader_cls=TextLoader)
docs = loader.load()
自动检测文件编码
当处理非UTF8编码文件时,TextLoader
可以配置为自动检测编码以防止加载失败。
text_loader_kwargs = {"autodetect_encoding": True}
loader = DirectoryLoader(
"../../../../libs/langchain/tests/unit_tests/examples/",
glob="**/*.txt",
loader_cls=TextLoader,
loader_kwargs=text_loader_kwargs
)
docs = loader.load()
代码示例
以下是一个完整的代码示例,展示了如何配置和使用DirectoryLoader
来加载文档。
from langchain_community.document_loaders import DirectoryLoader
from langchain_community.document_loaders import TextLoader
# 配置多线程和自动编码检测
loader = DirectoryLoader(
path="../../../../libs/langchain/tests/unit_tests/examples/",
glob="**/*.txt",
loader_cls=TextLoader,
use_multithreading=True,
loader_kwargs={"autodetect_encoding": True}
)
docs = loader.load()
for doc in docs:
print(doc.metadata["source"], doc.page_content[:100])
常见问题和解决方案
- 文件解码错误:如果遇到解码错误,请确保使用
autodetect_encoding
。 - 慢速加载:启用
use_multithreading
可以加快速度。 - 不显示进度条:确认已安装
tqdm
并设置show_progress=True
。
总结和进一步学习资源
通过DirectoryLoader
,我们可以灵活有效地从文件系统中加载文档。建议阅读LangChain文档以深入了解更多的功能和扩展。
参考资料
- LangChain 官方文档
- tqdm文档
- Python多线程教程
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—