使用LangChain的JSON Loader
- 结构化文档特点:JSON、网页、Markdown等文档具有数据结构,解析时应尽量保留原有结构信息
- 基本用法:通过JSONLoader加载JSON文件,配合jq_schema指定解析规则
- 输出格式:解析结果包含metadata和page_content两部分,metadata记录来源信息,page_content包含提取的字段内容
代码示例:
1 | from langchain_community.document_loaders import TextLoader |
执行结果,输出内容:
1 | === TextLoader 加载结果 === |
- 文件结构:包含gameTitle、basicInfo、mainCharacter、supportCharacters等结构化字段
- 解析目标:需要分门别类提取主角信息和配角信息
- 局限性:将所有内容堆叠在同一个page_content中,无法区分不同字段
- 问题:需要手动解析字符串,难以准确定位特定字段内容
json loader与jq schema
由于上述问题,我们需要进行数据处理,因此使用jq schema:
- jq schema作用:指定需要提取的字段及其格式
- 优势:
- 自动将不同角色解析为独立document
- 保留sequence number等元数据
- 实现数据切片功能
安装包
1 | pip install -qU jq |
示例代码
1 | from langchain_community.document_loaders import JSONLoader |
执行结果,输出内容:
1 | === JSONLoader 加载结果 === |
使用LangChain的网页加载器

- WebBaseLoader:基于urllib和BeautifulSoup,适合基本网页抓取
- UnstructuredLoader:支持复杂网页结构,保留元素间关系
- RecursiveURLLoader:递归抓取子链接,适合大规模站点
- SitemapLoader:通过站点地图快速获取所有页面
- FirecrawlLoader:API服务,适合实时抓取应用
WebBaseLoader
- 基本用法:指定URL即可抓取网页内容
- 优化技巧:
- 使用bs4.SoupStrainer限定解析范围(如只解析bodyContent)
- 调整bs_get_text_kwargs参数控制输出格式
- 输出内容:包含source、title、language等metadata
示例代码:
1 | import bs4 |
执行结果,输出内容:
1 | {'source': 'https://zh.wikipedia.org/wiki/黑神话:悟空'} |
UnstructuredLoader
- 核心功能:解析网页元素类型(Title、ListItem等)和父子关系
- 关键应用:
- 通过parent_id保持内容与标题的关联
- 避免信息切片时丢失上下文关系
- 典型场景:处理参考资料列表时确保每个条目与”参考资料”标题保持关联
示例代码
1 | from langchain_unstructured import UnstructuredLoader |
执行结果,输出内容:
1 | Title: 黑神话:悟空 |
Markdown文档的解析—UnstructuredMarkdownLoader
- 解析模式:使用mode=”elements”参数解析文档结构
- 关键metadata:
- category_depth:标题层级深度
- parent_id:父元素标识
- element_id:当前元素唯一标识
- 重要性:保持标题与内容的关联关系,确保检索结果不丢失上下文
示例代码
1 | from langchain_community.document_loaders import UnstructuredMarkdownLoader |
执行结果,输出内容
1 | 黑神话:悟空 🐵 |