引言
在处理大量文件时,自动化读取和解析过程变得尤为重要。LangChain的DirectoryLoader提供了强大的功能,可以将文件系统中的文件加载为LangChain的Document对象。本篇文章将展示如何使用DirectoryLoader从文件系统加载文档,包括使用通配符模式、多线程I/O、自定义加载器处理特定文件类型、以及如何处理解码错误。
主要内容
使用通配符加载文件
通过glob参数可以控制加载哪些文件。例如,仅加载Markdown文件:
from langchain_community.document_loaders import DirectoryLoader
loader = DirectoryLoader("../", glob="**/*.md")
docs = loader.load()
print(f"Loaded {len(docs)} documents")
显示加载进度条
为了实时查看加载进度,可以安装tqdm库并设置show_progress参数:
# !pip install tqdm
loader = DirectoryLoader("../", glob="**/*.md", show_progress=True)
docs = loader.load()
使用多线程加速加载
对于大量文件,可开启多线程:
loader = DirectoryLoader("../", glob="**/*.md", use_multithreading=True)
docs = loader.load()
自定义加载器
若需解析特定格式文件,可通过loader_cls参数指定自定义加载器。例如,加载Python源代码文件:
from langchain_community.document_loaders import PythonLoader
loader = DirectoryLoader("../../../../../", glob="**/*.py", loader_cls=PythonLoader)
docs = loader.load()
解码错误处理
在加载过程中可能会遇到解码错误,DirectoryLoader提供了多种处理方式。
默认行为
默认情况下,解码错误会抛出异常:
try:
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader)
docs = loader.load()
except RuntimeError as e:
print(f"Error: {e}")
静默失败
通过silent_errors参数,可以跳过不能加载的文件:
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader, silent_errors=True)
docs = loader.load()
自动检测编码
通过autodetect_encoding参数自动检测文件编码:
text_loader_kwargs = {"autodetect_encoding": True}
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs)
docs = loader.load()
代码示例
完整的代码示例展示如何使用DirectoryLoader加载Markdown文件,并处理解码错误:
from langchain_community.document_loaders import DirectoryLoader
path = "../../data/"
loader = DirectoryLoader(path, glob="**/*.md", use_multithreading=True, show_progress=True)
# 自动检测编码
text_loader_kwargs = {"autodetect_encoding": True}
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs, silent_errors=True)
docs = loader.load()
for doc in docs:
print(doc.page_content[:100]) # 仅打印前100个字符
常见问题和解决方案
- 解码错误:开启自动编码检测或使用
silent_errors跳过错误文件。 - 性能问题:使用多线程加速文件加载。
总结和进一步学习资源
通过DirectoryLoader,我们可以高效加载和解析文件系统中的文档,同时能够处理多种格式和编码问题。若想深入了解,还可以参考官方文档和API手册。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---