LlamaIndex项目中的SimpleDirectoryReader使用指南
概述
在LlamaIndex项目中,SimpleDirectoryReader
是一个简单而强大的工具,用于从本地文件系统加载各种格式的文档数据。作为数据加载的基础组件,它为开发者提供了便捷的文档处理入口,特别适合快速原型开发和小规模数据处理场景。
核心功能特性
多格式文件支持
SimpleDirectoryReader
内置支持多种常见文档格式,通过文件扩展名自动识别并处理:
- 办公文档:Word(.docx)、PowerPoint(.ppt/.pptx)、Hangul(.hwp)
- 电子书:EPUB(.epub)
- 结构化数据:CSV(.csv)
- 编程相关:Jupyter Notebook(.ipynb)、Markdown(.md)
- 多媒体:JPEG(.jpeg/.jpg)、PNG(.png)、MP3/MP4
- 其他格式:PDF(.pdf)、MBOX邮箱归档(.mbox)
值得注意的是,JSON文件建议使用专门的JSON加载器处理,这是出于性能和功能专业化的考虑。
基础使用方法
基本加载方式
最简单的使用方式是加载整个目录下的文件:
from llama_index.core import SimpleDirectoryReader
reader = SimpleDirectoryReader(input_dir="data/")
documents = reader.load_data()
并行处理优化
对于包含大量文件的目录,可以使用多进程并行加载提升效率:
documents = reader.load_data(num_workers=4)
注意:由于操作系统差异,Windows用户可能无法获得与Linux/MacOS用户相同的性能提升。
高级配置选项
目录遍历控制
# 递归读取子目录
reader = SimpleDirectoryReader(input_dir="data/", recursive=True)
文件筛选机制
- 指定特定文件:
reader = SimpleDirectoryReader(input_files=["data/file1.pdf", "data/file2.docx"])
- 排除特定文件:
reader = SimpleDirectoryReader(input_dir="data/", exclude=["temp/", "backup/"])
- 按扩展名过滤:
reader = SimpleDirectoryReader(input_dir="data/", required_exts=[".pdf", ".docx"])
- 数量限制:
reader = SimpleDirectoryReader(input_dir="data/", num_files_limit=100)
编码设置
reader = SimpleDirectoryReader(input_dir="data/", encoding="gb2312")
元数据处理
默认元数据字段
每个加载的文档都会自动附加包含以下信息的元数据字典:
file_path
:完整文件路径file_name
:文件名(含扩展名)file_type
:MIME类型file_size
:文件大小(字节)- 时间戳信息(创建、修改、访问时间)
自定义元数据
def custom_metadata(file_path):
return {
"custom_field": "value",
"file_size": os.path.getsize(file_path)
}
reader = SimpleDirectoryReader(
input_dir="data/",
file_metadata=custom_metadata
)
扩展功能
支持新文件类型
通过实现BaseReader
接口可以扩展支持新的文件格式:
class CustomFileReader(BaseReader):
def load_data(self, file, extra_info=None):
# 实现自定义解析逻辑
return [Document(text=parsed_content)]
reader = SimpleDirectoryReader(
input_dir="data/",
file_extractor={".custom": CustomFileReader()}
)
远程文件系统支持
通过fsspec
协议可以连接各种远程存储系统:
from s3fs import S3FileSystem
s3_fs = S3FileSystem(key="your-key", secret="your-secret")
reader = SimpleDirectoryReader(
input_dir="your-bucket",
fs=s3_fs,
recursive=True
)
最佳实践建议
-
生产环境考虑:对于生产环境,建议评估LlamaHub中更专业的Reader实现
-
性能优化:
- 大文件目录使用
num_workers
参数 - 合理设置
num_files_limit
避免内存溢出
- 大文件目录使用
-
错误处理:
- 添加异常捕获处理损坏文件
- 对非UTF-8编码文件显式指定编码
-
元数据利用:
- 充分利用自动生成的文件元数据
- 考虑添加业务相关的自定义元数据
SimpleDirectoryReader
作为LlamaIndex生态中的数据入口组件,通过灵活的配置选项和扩展能力,为开发者提供了处理本地文档的强大工具集。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考