Advertisement

(17-2-03)检索增强生成(RAG):JSON加载器(JSONLoader)、Office加载器

阅读量:

5.2.5 JSON加载器(JSONLoader)

JSON采用通用规范的形式作为文件与数据交换的标准。该格式通过易懂的形式存储与传输包含属性-值对以及数组(或其他可序列化数据)的数据对象。对于LangChain框架来说,默认配置通常会利用jq库来进行JSON文件解析。为了获取并安装jq库,请执行以下命令:

pip install jq

1. 加载JSON文件

查看以下代码 snippet,请注意以下是如何通过调用JSONLoader加载名为 facebook_chat.json 的 JSON 文件,并成功提取了其中的消息内容。

复制代码
 loader = JSONLoader(

    
     file_path='./example_data/facebook_chat.json',
    
     jq_schema='.messages[].content',
    
     text_content=False
    
 )
    
 data = loader.load()
    
 pprint(data)

2. 加载JSON Lines文件

JSON Lines是一种常见的文件格式,在每一行中都存储着一个有效的JSON值。要从包含多行JSON数据的JSON Lines文件中加载文档内容,则需配置json_lines=True,并通过jq_schema参数指定从单个JSON对象中提取page_content字段的操作。参考以下代码示例:将参数json_lines设为True,并配置加载指定的JSON Lines文件路径即可完成操作。

复制代码
 from langchain_community.document_loaders import JSONLoader

    
 from pprint import pprint
    
  
    
 # 创建 JSONLoader 实例,指定 JSON Lines 文件的路径和提取内容的 jq_schema
    
 loader = JSONLoader(
    
     file_path='./example_data/facebook_chat_messages.jsonl',
    
     jq_schema='.content',
    
     text_content=False,
    
     json_lines=True
    
 )
    
  
    
 # 加载文档并存储在 data 中
    
 data = loader.load()
    
  
    
 # 使用 pprint 函数打印加载的数据
    
 pprint(data)

在上述代码中,配置jq_schema参数指定为".content"以解析JSON Lines文件中的内容。解析完成后将结果存放在变量data中,并调用pprint函数输出解析后的数据内容。

3. 提取元数据

在日常应用中常见情况下会致力于将JSON文件中的元数据整合到从内容创建的文档中例如下述代码展示了利用JSONLoader提取元数据的操作流程:

复制代码
 # 定义元数据提取函数

    
 def metadata_func(record: dict, metadata: dict) -> dict:
    
     metadata["sender_name"] = record.get("sender_name")
    
     metadata["timestamp_ms"] = record.get("timestamp_ms")
    
     return metadata
    
  
    
 loader = JSONLoader(
    
     file_path='./example_data/facebook_chat.json',
    
     jq_schema='.messages[]',
    
     content_key="content",
    
     metadata_func=metadata_func
    
 )
    
 data = loader.load()
    
  
    
 pprint(data)

在上述代码中, metadata_func 是一个自定义函数, 负责从每条记录中提取元数据. 当创建 JSONLoader 实例时, 将 metadata_func 参数配置为指定的元数据提取函数. 加载后的文档及其相关的**元数据存储于 data 中, 并通过 pprint 函数打印输出加载的内容.

4. 常见的JSON结构和jq模式

为了更好地满足大家从多个JSON文件中高效提取数据的需求,在下文中详细说明了不同JSON格式及其对应的jq命令和功能内容。

复制代码
 JSON        -> [{"text": ...}, {"text": ...}, {"text": ...}]

    
 jq_schema   -> ".[].text"
    
  
    
 JSON        -> {"key": [{"text": ...}, {"text": ...}, {"text": ...}]}
    
 jq_schema   -> ".key[].text"
    
  
    
 JSON        -> ["...", "...", "..."]
    
 jq_schema   -> ".[]"

由此可见,JSONLoader支持多样化的JSON数据处理方式,并非单一固定模式。不论其结构如何复杂或简单变化的形式都能有效提取所需的内容与元数据信息。通过采用JQ语法模式以及可选的自定义元数据函数,开发者因此能够精确掌控从JSON文件中解析出Document对象的具体流程与细节参数设置。

5.2.6 Markdown加载器(UnstructuredMarkdownLoader)

Markdown 是一种简洁高效的格式化工具。它使得用户能够在不使用图形界面的情况下生成结构化的文本内容。在 LangChain 中,UnstructuredMarkdownLoader 负责将 Markdown 文档转换为适用于后续处理的文档格式。

UnstructuredMarkdownLoader加载器支持读取 Markdown 文件,并将文件中的内容以纯文本的形式存储于 Document 对象的 page_content 属性中。例如,请查看以下示例:通过调用 UnstructuredMarkdownLoader 的方法来处理 Markdown 文件并获得文档对象实例。

复制代码
 from langchain_community.document_loaders import UnstructuredMarkdownLoader

    
  
    
 # 指定 Markdown 文件的路径
    
 markdown_path = "../../../../../README.md"
    
 # 创建 UnstructuredMarkdownLoader 实例
    
 loader = UnstructuredMarkdownLoader(markdown_path)
    
  
    
 # 加载文档
    
 data = loader.load()
    
  
    
 # 输出加载的文档对象
    
 print(data)

运行该代码块后,在data变量中会存储一个文档集合的形式。每一个文档对象均包含着对应Markdown文件的内容以及相关的元数据信息。

在内部结构中, UnstructuredMarkdownLoader 会生成各自的"元素", 这些元素通常会合并在一起形成完整的Markdown结构。当加载Markdown文档时,可以选择保留文本块之间的分隔信息, 这可以通过设置 mode='elements' 来实现这一功能。来看一段代码示例: 使用UnstructuredMarkdownLoader加载Markdown文档, 并设置 mode='elements', 这样就能选择性地保留各文本块之间的分隔信息。接着, 使用 loader.load() 方法来加载该Markdown文件, 并将其结果存储在变量 data 中完成整个操作流程的最后一站就是打印数据中第一个文档对象完成整个操作流程的最后一站就是打印数据中第一个文档对象完成整个操作流程的最后一站就是打印数据中第一个文档对象.

复制代码
 loader = UnstructuredMarkdownLoader(markdown_path, mode="elements")

    
 data = loader.load()
    
 # 输出第一个文档对象
    
 print(data[0])

5.2.7 Office加载器

在LangChain框架中,通过Azure AI Document Intelligence Loader这一服务,在LangChain框架中可以高效处理常见的Office文档类型。作为基于机器学习的服务,在数字PDF或扫描图像的基础上(包括数字文档、图像文件以及结构化数据),Azure AI Document Intelligence能够自动识别并提取出丰富的信息内容。该服务不仅能够从PDF和图像中提取信息内容,在结合其他类型的常见办公文件格式时也表现优异。此外,在广泛支持以下文件格式方面:PDF、JPEG/JPG、PNG、BMP、TIFF、HEIF等图形图像文件格式以及常见办公应用相关的 DOCX 电子文档类型等。

目前可以通过 Document Intelligence来进行批量处理内容并将它们生成 LangChain 文档。该系统默认采用 markdown 格式作为输出格式并且能够轻松地与 MarkdownHeaderTextSplitter 集成以实现按语义进行文档分块处理。除此之外除了标准的 markdown 输出模式外还可以通过调节相关参数设置来实现对输出格式的不同需求满足多样化的工作场景需求。
具体来说可以根据实际需求对 mode 参数进行调整从而实现不同类型的输出模式如通过设置 mode="single" 可以得到完整的纯文本内容而通过设置 mode="page" 则能够将文档按照页面划分生成独立的小文档供后续处理使用。

从 langchain_community.document_loaders 模块导入 AzureAIDocumentIntelligenceLoader 并配置其必要的参数设置之后,在实例化该加载器后即可进行文档加载操作。具体而言,在初始化 AzureAIDocumentIntelligenceLoader 实例时需要提供以下关键配置项:终端节点 URL、API 密钥以及待处理的文件路径等信息。在完成这些配置步骤后,在调用 load 方法时将成功地将指定文件内容转换为相应的数据结构并存储于对应的文档对象中。

复制代码
 from langchain_community.document_loaders import AzureAIDocumentIntelligenceLoader

    
  
    
 # 文件路径、终端节点和密钥
    
 file_path = "<filepath>"
    
 endpoint = "<endpoint>"
    
 key = "<key>"
    
  
    
 # 创建 AzureAIDocumentIntelligenceLoader 实例
    
 loader = AzureAIDocumentIntelligenceLoader(
    
     api_endpoint=endpoint, 
    
     api_key=key, 
    
     file_path=file_path, 
    
     api_model="prebuilt-layout"
    
 )
    
  
    
 # 加载文档
    
 documents = loader.load()

在上述代码中,请将 分别设置为你实际使用的文件路径、Azure AI Document Intelligence 终端节点 URL 以及对应的 API 密钥。同时,还需遵守 Azure AI Document Intelligence 服务的各项使用条款及法律法规要求。此途径能够将 Office 文档中的信息转化为规范化的文档结构,并便于后续的文本解析与分析工作

未完待续

全部评论 (0)

还没有任何评论哟~