如何用Python-LangChain框架实现的文本文档加载器?

摘要:上节讲如何将文本进行向量化,本节讲讲如何将文本文件加载到程序中,进行下一步处理,langchain 的 TextLoader提供了这个功能。 langchain 的 TextLoader 并非支持所有文本格式,它的核心作用是读取「纯文本类文
上节讲如何将文本进行向量化,本节讲讲如何将文本文件加载到程序中,进行下一步处理,langchain 的 TextLoader提供了这个功能。 langchain 的 TextLoader 并非支持所有文本格式,它的核心作用是读取「纯文本类文件」,对非纯文本格式(如带格式的文档、二进制文件)无法直接解析,需搭配对应专用 Loader。 一、TextLoader 支持的主要文本类型(可直接读取) 纯文本文件:.txt(最常用,无任何格式,直接读取文本内容); 简单标记 / 配置文件:.md(Markdown,仅读取文本内容,忽略格式标记)、.json(读取完整文本字符串,不解析 JSON 结构)、.yaml/.yml(同 JSON,仅读取文本,不解析配置); 代码文件:.py(Python 代码)、.java、.js 等,读取代码文本内容(不执行、不解析代码逻辑); 其他纯文本类文件:.csv(读取为纯文本,不解析表格结构)、.log(日志文件,纯文本形式直接读取)。 二、TextLoader 不支持的文本格式(需专用 Loader) 以下格式无法用 TextLoader 直接读取,需使用 langchain 对应专用 Loader(如 UnstructuredLoader、PyPDFLoader 等): 带格式文档:.docx(Word)、.pptx(PPT)、.xlsx(Excel); PDF 文件:.pdf(需用 PyPDFLoader、PDFMinerLoader 等); 二进制文件:.png(图片)、.mp3(音频)、.mp4(视频); 加密 / 压缩文件:.zip、.rar、加密文档等。 三、关键补充 TextLoader 的核心逻辑是「按字符读取文件内容」,无论文件后缀是什么,只要是纯文本编码(UTF-8、GBK 等) 的文件,都能读取;但如果文件包含非文本编码(如二进制、特殊格式标记),读取后会出现乱码,失去实际意义。 简单总结:TextLoader 只适用于「无复杂格式的纯文本类文件」,复杂格式需搭配对应专用 Loader。 代码部分: # pip install unstructured # 安装unstructured库,用于处理非结构化文档 from langchain_community.document_loaders import TextLoader, DirectoryLoader, JSONLoader import os # ==================== 获取当前文件路径 ==================== # os.path.abspath(__file__) 获取当前脚本的绝对路径 # os.path.dirname() 获取路径的目录部分 current_dir = os.path.dirname(os.path.abspath(__file__)) print('---------当前路径') print(current_dir) # 打印当前脚本所在的目录路径 # ==================== 加载单个TXT文件 ==================== print('---------txt文件加载') # TextLoader: 用于加载文本文件的加载器 # "./txt/1.txt": 相对路径下的txt文件 # encoding="utf8": 指定文件编码为UTF-8,防止中文乱码 loader = TextLoader("./txt/1.txt", encoding="utf8") doc = loader.load() # load()方法执行实际的文件读取操作 print(doc) # 打印加载的文档内容 # ==================== 加载单个HTML文件 ==================== print('---------html文件加载') # 虽然文件是HTML格式,但TextLoader会将其作为纯文本读取 loader1 = TextLoader("./txt/Color-management.html", encoding="utf8") doc1 = loader1.load() print(doc1) # ==================== 目录加载器 ==================== # Windows系统需要先安装: pip install python-magic-bin # Linux系统需要先安装: pip install python-magic print('---------目录加载器 一个目录下所有文件加载') # DirectoryLoader: 用于加载整个目录下的所有文件 # './file': 指定要加载的目录路径 # 默认会加载目录下的所有文件(包括子目录) loader = DirectoryLoader('./file') texts = loader.load() # 加载目录中的所有文件 print(texts) # 打印所有加载的文档 # ==================== 使用glob参数筛选特定文件 ==================== print('---------我们可以使用 glob 参数来控制加载哪些文件。请注意,此处它只加载.json 文件。') # DirectoryLoader 的高级用法: # glob="**/*.json": 使用glob模式匹配所有.json文件 # ** 表示任意层级的子目录 # *.json 表示所有以.json结尾的文件 # loader_cls=TextLoader: 指定使用TextLoader来加载匹配到的文件 # loader_kwargs={'encoding': 'gbk'}: 传递给TextLoader的参数,指定使用GBK编码 # 因为有些JSON文件可能使用GBK编码(常见于中文Windows系统) loader = DirectoryLoader( './txt', # 要扫描的根目录 glob="**/*.json", # 只加载JSON文件 loader_cls=TextLoader, # 使用文本加载器 loader_kwargs={'encoding': 'gbk'} # 指定编码为GBK ) josntxt = loader.load() # 加载所有匹配的JSON文件 print(josntxt) # 打印加载的JSON文件内容 执行结果: D:\ProgramData\Anaconda3\envs\llm\python.exe D:/pythonProject2025/LLmProject/3/2-文本文档加载器.py ---------当前路径 D:\pythonProject2025\LLmProject\3 ---------txt文件加载 [Document(page_content=' 文本切割是自然语言处理中的基础操作,主要用于将较长的文本内容拆解为更小的、可处理的单...... ---------html文件加载 [Document(page_content='<!DOCTYPE html>\n<html lang="zh">\n\n<head>\n\t<meta charset="utf-8">\n\t<base href="..... ---------目录加载器 一个目录下所有文件加载 [Document(page_content='文本切割是自然语言处理中的基础操作,主要用于将较长的文本内容拆解为更小的、可处理的单元,.... ---------我们可以使用 glob 参数来控制加载哪些文件。请注意,此处它只加载.json 文件。 [Document(page_content='{\n\t"code": 200,\n\t"success": true,\n\t"obj": {\n\t\t"dataList": [\n\t\t\t{\n\t\t\t\t.... 更多学习资料尽在 老虎网盘资源