要从磁盘加载文件到LangChain的Document对象。LangChain提供了一个叫DirectoryLoader的工具,用于从文件系统读取不同类型的文件。我来详细总结一下我的具体步骤。

基础加载

首先,我们来看看最基本的加载方法。这时候,我们使用DirectoryLoader来读取markdown文件:

from langchain_community.document_loaders import DirectoryLoader

# 使用glob参数指定文件类型
loader = DirectoryLoader("../", glob="**/*.md")
docs = loader.load()
print(f"总共加载了 {len(docs)} 个文档")
# 打印第一个文档的前100个字符
print(docs[0].page_content[:100])

显示进度条

有时候,文件加载过程可能比较慢,显示一个进度条能让我们更直观地了解进度。这时候只需要安装tqdm库并设置show_progress参数:

# 确保已经安装 tqdm: pip install tqdm
loader = DirectoryLoader("../", glob="**/*.md", show_progress=True)
docs = loader.load()

多线程加载

当文件数量非常多时,单线程读取文件可能效率不高。我们可以启用多线程以提升速度:

loader = DirectoryLoader("../", glob="**/*.md", use_multithreading=True)
docs = loader.load()

自定义加载器类

默认情况下,DirectoryLoader使用UnstructuredLoader,它能够处理多种文件类型。但有时候我们需要自定义加载方式,比如只加载纯文本文件,可以这样做:

from langchain_community.document_loaders import TextLoader

loader = DirectoryLoader("../", glob="**/*.md", loader_cls=TextLoader)
docs = loader.load()
print(docs[0].page_content[:100])

注意:TextLoader不会像UnstructuredLoader那样解析Markdown标题。

加载Python源代码

如果你的目的是解析Python代码文件,这里有专门的PythonLoader

from langchain_community.document_loaders import PythonLoader

loader = DirectoryLoader("../../../../../", glob="**/*.py", loader_cls=PythonLoader)
docs = loader.load()

处理文件编码问题

文件编码不同可能造成读取错误。DirectoryLoader可以帮助解决这些问题,通过使用TextLoader来处理文件编码:

# 处理非UTF8编码文件
path = "../../../../libs/langchain/tests/unit_tests/examples/"
loader = DirectoryLoader(path, glob="**/*.txt", loader_cls=TextLoader)
docs = loader.load()

使用上述这些方法,就能轻松地从不同来源、不同类型的文件中提取出所需的文档,并且能够根据具体需求进行定制。


大气的卤蛋
1 声望0 粉丝