Skip to content

Latest commit

 

History

History
163 lines (121 loc) · 6.08 KB

File metadata and controls

163 lines (121 loc) · 6.08 KB

文档切分(DocSplitter)

简介

文档切分组件(DocSplitter)可以用于对文档进行段落切分。

功能介绍

对解析后的文档,支持将文档划分为多个段落,便于后续处理和分析。 目前支持的文档切分类型splitter_type如下:

  • split_by_chunk:按照最大段落大小,对文档进行切分
  • split_by_title:按照文档的title标识层级进行段落切分

特色优势

组件对文档分隔段落,准确高效,且有多种可选策略,代码简单可快速上手,是后续大模型使用文档信息的基础。

应用场景

对解析后的各类型文档进行分段,用于后续任务的输入。

基本用法


参考tests目录下的test_doc_splitter.py,可快速搭建自己的文档切分用例。

以下是DocSplitter快速开始的一个示例。

DocSplitter示例:

import os
import requests
from appbuilder.core.components.doc_parser.doc_parser import DocParser
from appbuilder.core.components.doc_splitter.doc_splitter import DocSplitter
from appbuilder.core.message import Message

# 请前往千帆AppBuilder官网创建密钥,流程详见:https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5
os.environ["APPBUILDER_TOKEN"] = "..."

# 先解析
file_url = "https://agi-dev-platform-bos.bj.bcebos.com/ut_appbuilder/test.pdf?authorization=bce-auth-v1/e464e6f951124fdbb2410c590ef9ed2f/2024-01-25T12%3A56%3A15Z/-1/host/b54178fea9be115eafa2a8589aeadfcfaeba20d726f434f871741d4a6cb0c70d"
file_data = requests.get(file_url).content
file_path = "./test.pdf"
with open(file_path, "wb") as f:
    f.write(file_data)

msg = Message(file_path)

parser = DocParser()
parse_result = parser(msg, return_raw=True)

# 基于parser的结果切分段落
splitter = DocSplitter(splitter_type="split_by_chunk")
res_paras = splitter(parse_result)

# 打印结果
print(res_paras.content)

参数说明

鉴权说明

使用组件之前,请首先申请并设置鉴权参数,可参考组件使用流程

# 设置环境中的TOKEN,以下示例略
os.environ["APPBUILDER_TOKEN"] = "bce-YOURTOKEN"

初始化参数

splitter_type(str): 切分器的类型,支持split_by_chunksplit_by_title两种方式,必选参数

调用参数

  • message(Message): 上游docparser的文档解析结果
  • 备注: 文档解析时,parser(msg, return_raw=True)函数的参数return_raw必须为True
参数名称 参数类型 是否必须 描述 示例值
splitter_type String 文本提取器类型, 目前支持split_by_chunk, split_by_title DocSplitter(splitter_type="split_by_chunk")

响应参数

参数名称 参数类型 描述 示例值
res_paras Message 返回结果 [{段落1}, {段落2}]

响应示例

Message(name=msg, content={'paragraphs': [{'text': '第十节其他重要事项'}]})

错误码

DocSplitter高级用法

示例:

import os
import requests
from appbuilder.core.components.doc_parser.doc_parser import DocParser
from appbuilder.core.components.doc_splitter.doc_splitter import DocSplitter
from appbuilder.core.message import Message

# 请前往千帆AppBuilder官网创建密钥,流程详见:https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5
os.environ["APPBUILDER_TOKEN"] = "..."

# 先解析
file_url = "https://agi-dev-platform-bos.bj.bcebos.com/ut_appbuilder/test.pdf?authorization=bce-auth-v1/e464e6f951124fdbb2410c590ef9ed2f/2024-01-25T12%3A56%3A15Z/-1/host/b54178fea9be115eafa2a8589aeadfcfaeba20d726f434f871741d4a6cb0c70d"
file_data = requests.get(file_url).content
file_path = "./test.pdf"
with open(file_path, "wb") as f:
    f.write(file_data)

msg = Message(file_path)

parser = DocParser()
parse_result = parser(msg, return_raw=True)

# 基于parser的结果切分段落
doc_splitter = DocSplitter(splitter_type="split_by_chunk",
                           separators=["。", "!", "?", ".", "!", "?", "……", "|\n"],
                           max_segment_length=800,
                           overlap=0)
res_paras = doc_splitter(parse_result)

# 打印结果
print(res_paras.content)

参数说明:

鉴权配置

使用组件之前,请首先申请并设置鉴权参数,可参考组件使用流程

# 设置环境中的TOKEN,以下示例略
os.environ["APPBUILDER_TOKEN"] = "bce-YOURTOKEN"

调用参数

  • message(Message): 上游docparser的文档解析结果
  • 备注: 文档解析时,parser(msg, return_raw=True)函数的参数return_raw必须为True
  • 备注: splitter_typesplit_by_title时,max_segment_length, separators, overlap, join_symbol参数不起作用
参数名称 参数类型 是否必须 描述 示例值
splitter_type String 文本提取器类型, 目前支持split_by_chunk, split_by_title DocSplitter(splitter_type="split_by_chunk")
max_segment_length Integer 切分时段落的最大长度 800
separators List 固定字数时,段落最后截断的分隔符 ["。", "!", "?", ".", "!", "?", "……", "
overlap Integer 分隔的段落间重叠的内容字数 200
join_symbol String 组成固定字数段落时,文本块段落间的链接符 空字符

响应参数

参数名称 参数类型 描述 示例值
res_paras Message 返回结果 [{段落1}, {段落2}]

响应示例

Message(name=msg, content={'paragraphs': [{'text': '第十节其他重要事项'}]})

更新记录和贡献

  • 文档分隔 (2023-12)