AI开发-python-langchain框架(3-2-文本文档加载器 )
AI开发-python-langchain框架3-2-文本文档加载器在AI开发中数据是模型的基础而文本文档则是最常见的数据来源之一。Langchain框架提供了强大的文档加载器Document Loaders帮助我们轻松读取各种格式的文本文件并将其转换为标准化的文档对象。本文将循序渐进地介绍文本文档加载器的核心概念、基础用法和高级技巧带你掌握数据加载的关键技能。## 什么是文本文档加载器文本文档加载器是Langchain中用于从各种文件格式如TXT、PDF、Word、CSV等中提取文本内容的工具。它简化了文件读取过程自动处理编码、格式解析等细节输出统一的Document对象每个对象包含page_content文本内容和metadata元数据如文件名、来源等。为什么需要加载器因为原始文件可能包含复杂的结构如PDF中的表格、Word中的样式直接读取会破坏数据完整性。加载器封装了这些处理逻辑让开发者专注于后续的文本分割、向量化等任务。## 基础用法加载TXT文件我们先从最简单的文本文件开始。TXT文件没有复杂格式适合理解加载器的基本流程。### 安装Langchain首先确保安装了langchain及其依赖库bashpip install langchain### 示例1使用TextLoader加载TXT文件python# 导入TextLoaderfrom langchain_community.document_loaders import TextLoader# 创建加载器实例指定文件路径loader TextLoader(example.txt, encodingutf-8)# 加载文档返回Document对象列表documents loader.load()# 输出文档内容for doc in documents: print(f内容: {doc.page_content}) print(f元数据: {doc.metadata}) print(- * 50)代码解释-TextLoader是专门处理TXT文件的加载器。-encoding参数指定文件编码避免乱码问题。-load()方法返回一个列表每个元素是一个Document对象。- 每个Document包含page_content文本内容字符串和metadata字典如{source: example.txt}。运行结果示例假设example.txt内容为Hello, Langchain!内容: Hello, Langchain!元数据: {source: example.txt}## 进阶用法加载PDF文件PDF是日常工作中常见的文档格式但直接读取文本会丢失格式或出现乱码。Langchain提供了PyPDFLoader来解析PDF。### 安装依赖需要额外安装pypdf库bashpip install pypdf### 示例2使用PyPDFLoader加载PDF文件pythonfrom langchain_community.document_loaders import PyPDFLoader# 创建PDF加载器loader PyPDFLoader(report.pdf)# 加载文档PDF可能包含多页每页作为一个Documentdocuments loader.load()# 遍历每一页for i, doc in enumerate(documents): print(f第{i1}页内容:) print(doc.page_content[:200]) # 只显示前200字符 print(f元数据: {doc.metadata}) print(- * 50)# 统计总页数print(f总共加载了 {len(documents)} 页)代码解释-PyPDFLoader自动分割PDF的每一页为独立的Document。- 每个Document的metadata包含页码page和源文件路径source。- 使用enumerate可以跟踪页码便于后续处理。注意PDF中的扫描件图片形式需要OCR技术PyPDFLoader无法处理此时可考虑使用PyMuPDFLoader或搭配其他OCR工具。## 高级用法加载CSV文件与自定义元数据CSV文件是结构化数据的代表每行对应一个记录每列对应一个字段。Langchain的CSVLoader可以将其转换为文档并支持自定义元数据。### 示例3使用CSVLoader加载CSV文件pythonfrom langchain_community.document_loaders import CSVLoader# 创建CSV加载器指定每一行作为一个文档loader CSVLoader( file_pathdata.csv, csv_args{ delimiter: ,, # 分隔符 quotechar: , # 引号字符 fieldnames: [id, name, description] # 自定义列名 }, source_columnname # 将name列的值作为元数据中的来源)documents loader.load()# 输出前3个文档for doc in documents[:3]: print(f内容: {doc.page_content}) print(f元数据: {doc.metadata}) print(- * 30)代码解释-csv_args允许自定义CSV解析参数如分隔符、列名等。-source_column参数指定将CSV中的某一列值作为metadata中的source字段便于追踪数据来源。- 每个文档的page_content是整行文本默认格式为列名: 值的键值对字符串。假设data.csv内容如下1,产品A,这是一个AI产品2,产品B,用于数据分析输出结果内容: id: 1name: 产品Adescription: 这是一个AI产品元数据: {source: 产品A, row: 0}## 高级用法批量加载与异步处理在实际项目中可能需要对整个文件夹中的所有文本文件进行批量加载。Langchain支持目录加载器也可以结合异步操作提高效率。### 示例4使用DirectoryLoader批量加载pythonfrom langchain_community.document_loaders import DirectoryLoader, TextLoader# 指定文件夹路径和加载器类型loader DirectoryLoader( path./my_docs, # 文件夹路径 glob**/*.txt, # 匹配所有子文件夹中的TXT文件 loader_clsTextLoader, # 使用TextLoader处理每个文件 loader_kwargs{encoding: utf-8} # 传递给TextLoader的参数)# 加载所有匹配的文档documents loader.load()# 输出文档数量print(f共加载了 {len(documents)} 个文档)# 显示每个文件的来源for doc in documents[:5]: print(f来源: {doc.metadata[source]})代码解释-DirectoryLoader遍历指定目录根据glob模式匹配文件。-loader_cls指定每个文件使用的加载器类型这里用TextLoader处理TXT文件。-loader_kwargs传递额外参数如编码给子加载器。- 支持递归扫描子文件夹使用**通配符。## 总结文本文档加载器是Langchain数据管线的起点它让我们能够轻松地从各种格式的文件中提取文本。本文从基础到高级逐步介绍了1.基础概念什么是加载器、Document对象的结构。2.TXT文件加载最简单的TextLoader理解核心流程。3.PDF文件加载PyPDFLoader处理多页PDF自动分割文档。4.CSV文件加载CSVLoader支持结构化数据自定义元数据。5.批量加载DirectoryLoader实现文件夹级自动化处理。掌握这些加载器后你可以灵活处理不同格式的文档为后续的文本分割、嵌入、向量存储等步骤奠定数据基础。在实际开发中建议先测试加载器输出确保数据完整性再进入下游处理。随着项目复杂度增加还可以探索UnstructuredFileLoader支持更多格式和自定义加载器来满足特殊需求。