llamaindex SimpleDirectoryReader的使用

SimpleDirectoryReader

概念解释

SimpleDirectoryReader 是 LlamaIndex 中加载本地文件数据的最简单方式。对于生产用例,你可能更倾向于使用 LlamaHub 上提供的众多读取器之一,但 SimpleDirectoryReader 是开始使用的好方法。

支持的文件类型

默认情况下,SimpleDirectoryReader 会尝试读取它找到的任何文件,并将它们都视为文本文件。除了纯文本之外,它还明确支持以下文件类型,这些文件类型是根据文件扩展名自动检测的:

  • .csv - 逗号分隔值
  • .docx - Microsoft Word
  • .epub - EPUB 电子书格式
  • .hwp - Hangul Word Processor
  • .ipynb - Jupyter Notebook
  • .jpeg, .jpg - JPEG 图像
  • .mbox - MBOX 电子邮件存档
  • .md - Markdown
  • .mp3, .mp4 - 音频和视频
  • .pdf - 便携式文档格式
  • .png - 便携式网络图形
  • .ppt, .pptm, .pptx - Microsoft PowerPoint

你可能期望在这里找到 JSON 文件类型;对于 JSON,我们建议你使用我们的 JSON 加载器。

使用方法

最基本的用法是传递一个 input_dir,它将加载该目录中的所有支持文件:

from llama_index.core import SimpleDirectoryReader

reader = SimpleDirectoryReader(input_dir="path/to/directory")
documents = reader.load_data()

如果从一个目录中加载许多文件,可以使用并行处理来加载文档。注意,在 Windows 和 Linux/MacOS 机器上使用多进程时存在差异,这在多进程文档中有解释(例如,参见这里)。最终,Windows 用户可能会看到较少或没有性能提升,而 Linux/MacOS 用户在加载相同的一组文件时会看到这些提升。

documents = reader.load_data(num_workers=4)
从子目录读取

默认情况下,SimpleDirectoryReader 只会读取目录顶层的文件。要从子目录读取文件,请设置 recursive=True

SimpleDirectoryReader(input_dir="path/to/directory", recursive=True)
迭代加载文件

你也可以使用 iter_data() 方法来迭代并处理加载的文件:

reader = SimpleDirectoryReader(input_dir="path/to/directory", recursive=True)
all_docs = []
for docs in reader.iter_data():
    # <对每个文件的文档进行处理>
    all_docs.extend(docs)
限制加载的文件

你可以传递一个文件路径列表,而不是加载所有文件:

SimpleDirectoryReader(input_files=["path/to/file1", "path/to/file2"])

或者你可以使用 exclude 传递一个要排除的文件路径列表:

SimpleDirectoryReader(
    input_dir="path/to/directory", exclude=["path/to/file1", "path/to/file2"]
)

你还可以设置 required_exts 为一个文件扩展名列表,只加载这些扩展名的文件:

SimpleDirectoryReader(
    input_dir="path/to/directory", required_exts=[".pdf", ".docx"]
)

并且你可以使用 num_files_limit 设置要加载的最大文件数:

SimpleDirectoryReader(input_dir="path/to/directory", num_files_limit=100)
指定文件编码

SimpleDirectoryReader 期望文件是 utf-8 编码的,但你可以使用 encoding 参数覆盖这一点:

SimpleDirectoryReader(input_dir="path/to/directory", encoding="latin-1")
提取元数据

你可以指定一个函数,该函数将读取每个文件并提取附加到每个文件的 Document 对象的元数据,方法是将该函数作为 file_metadata 传递:

def get_meta(file_path):
    return {"foo": "bar", "file_path": file_path}

SimpleDirectoryReader(input_dir="path/to/directory", file_metadata=get_meta)

该函数应接受一个参数(文件路径)并返回一个元数据字典。

扩展到其他文件类型

你可以通过传递一个文件扩展名到 BaseReader 实例的字典来扩展 SimpleDirectoryReader 以读取其他文件类型,作为 file_extractor。一个 BaseReader 应读取文件并返回一个 Document 列表。例如,添加对 .myfile 文件的自定义支持:

from llama_index.core import SimpleDirectoryReader
from llama_index.core.readers.base import BaseReader
from llama_index.core import Document

class MyFileReader(BaseReader):
    def load_data(self, file, extra_info=None):
        with open(file, "r") as f:
            text = f.read()
        # load_data 返回一个 Document 对象列表
        return [Document(text=text + "Foobar", extra_info=extra_info or {})]

reader = SimpleDirectoryReader(
    input_dir="./data", file_extractor={".myfile": MyFileReader()}
)

documents = reader.load_data()
print(documents)

注意,此映射将覆盖你指定的文件类型的默认文件提取器,因此如果你希望支持它们,需要将它们添加回来。

支持外部文件系统

与其他模块一样,SimpleDirectoryReader 接受一个可选的 fs 参数,可用于遍历远程文件系统。

这可以是任何由 fsspec 协议实现的文件系统对象。fsspec 协议有许多开源实现,支持各种远程文件系统,包括 AWS S3、Azure Blob & DataLake、Google Drive、SFTP 等。

以下是一个连接到 S3 的示例:

from s3fs import S3FileSystem

s3_fs = S3FileSystem(key="...", secret="...")
bucket_name = "my-document-bucket"

reader = SimpleDirectoryReader(
    input_dir=bucket_name,
    fs=s3_fs,
    recursive=True,  # 递归搜索所有子目录
)

documents = reader.load_data()
print(documents)

完整的示例笔记本可以在这里找到。

通过这些详细的解释和示例,希望你能更好地理解和使用 LlamaIndex 中的 SimpleDirectoryReader 功能。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Llamaindex是一个开源的搜索引擎,可以用于快速搜索和索引大型数据集。为了在本地部署Llamaindex,您需要按照以下步骤进行操作。 首先,您需要从Llamaindex的官方GitHub页面上下载源代码。确保您的计算机已安装了Git系统,然后使用命令行工具输入以下命令来克隆代码库: ``` git clone https://github.com/llama-lab/llamaindex.git ``` 下载完成后,进入项目文件夹并创建一个Python虚拟环境。使用以下命令可以创建一个虚拟环境: ``` python3 -m venv llama-env ``` 然后需要激活虚拟环境。在Mac和Linux系统下,使用以下命令: ``` source llama-env/bin/activate ``` 在Windows系统下,使用以下命令: ``` llama-env\Scripts\activate ``` 接下来,安装Llamaindex的依赖项。在虚拟环境中运行以下命令: ``` pip install -r requirements.txt ``` 等待依赖项安装完成后,可以开始配置Llamaindex。编辑`config.yaml`文件,根据您的需求进行相应的修改。您可以设置数据集的路径、索引文件的位置和其他相关参数。 完成配置后,运行以下命令来创建索引: ``` python3 llama.py -f path/to/dataset ``` 上述命令中的`path/to/dataset`应替换为实际的数据集路径。运行该命令后,Llamaindex会开始索引数据集。 当索引完成后,您可以使用以下命令来搜索索引中的数据: ``` python3 llama.py -s "your search query" ``` 您可以将`"your search query"`替换为实际的搜索关键字。Llamaindex将返回与关键字匹配的结果。 以上就是在本地部署Llamaindex的步骤。祝您在使用Llamaindex时取得成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值