Langchain-Chatchat/markdown_docs/text_splitter/ali_text_splitter.md

66 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ClassDef AliTextSplitter
**AliTextSplitter**: AliTextSplitter类的功能是对文本进行分割特别是针对PDF文档或其他文本可以选择是否使用文档语义分割模型进行更加精确的文本分割。
**属性**:
- `pdf`: 布尔值指示是否对PDF文档进行特殊处理默认为False。
- `**kwargs`: 接收可变数量的关键字参数这些参数将传递给父类CharacterTextSplitter的构造函数。
**代码描述**:
AliTextSplitter类继承自CharacterTextSplitter类提供了对文本进行分割的功能。在初始化时可以通过`pdf`参数指定是否对PDF文档进行特殊处理。如果`pdf`为True会对文本进行预处理包括合并多余的换行符和空格以及移除连续的换行符以便于后续的文本分割处理。
在`split_text`方法中,首先根据`pdf`参数的值对文本进行预处理。然后尝试导入`modelscope.pipelines`模块,如果导入失败,会抛出`ImportError`异常,提示用户需要安装`modelscope`包。
使用`modelscope.pipelines`的`pipeline`函数创建一个文档分割任务,模型选择为`damo/nlp_bert_document-segmentation_chinese-base`并指定设备为CPU。通过调用`pipeline`对象的方法对文本进行分割,得到的结果是一个包含分割后文本的列表。
**注意**:
- 使用此类之前,需要确保已安装`modelscope`包,特别是如果要进行文档语义分割,需要安装`modelscope[nlp]`。
- 文档语义分割模型`damo/nlp_bert_document-segmentation_chinese-base`是基于BERT的中文文档分割模型对于中文文本有较好的分割效果。
- 在低配置的GPU环境下由于模型较大建议将设备设置为CPU进行文本分割处理以避免可能的性能问题。
**输出示例**:
```python
['这是第一段文本。', '这是第二段文本,包含多个句子。', '这是第三段文本。']
```
此输出示例展示了`split_text`方法返回的分割后的文本列表,每个元素代表文档中的一段文本。
### FunctionDef __init__(self, pdf)
**__init__**: 此函数的功能是初始化AliTextSplitter类的实例。
**参数**:
- `pdf`: 一个布尔值用于指定是否处理PDF文件默认值为False。
- `**kwargs`: 接收一个可变数量的关键字参数,这些参数将传递给父类的初始化方法。
**代码描述**:
此初始化函数是`AliTextSplitter`类的构造函数,用于创建类的实例时设置初始状态。它接受一个名为`pdf`的参数和多个关键字参数`**kwargs`。`pdf`参数用于指示`AliTextSplitter`实例是否将用于处理PDF文件其默认值为False表示默认不处理PDF文件。如果需要处理PDF文件则在创建`AliTextSplitter`实例时将此参数设置为True。
此外,通过`**kwargs`参数,此函数支持接收额外的关键字参数,这些参数不在函数定义中直接声明。这些额外的参数通过`super().__init__(**kwargs)`语句传递给父类的初始化方法。这种设计允许`AliTextSplitter`类在不修改其构造函数签名的情况下,灵活地扩展或修改其父类的行为。
**注意**:
- 在使用`AliTextSplitter`类时,应根据实际需求决定是否将`pdf`参数设置为True。如果您的应用场景中需要处理PDF文件则应将此参数设置为True。
- 通过`**kwargs`传递给父类的参数应确保与父类的初始化方法兼容,避免传递无效或不相关的参数,以免引发错误。
***
### FunctionDef split_text(self, text)
**split_text**: 该函数的功能是对文本进行语义分割。
**参数**:
- text: 需要进行分割的文本数据类型为字符串str
**代码描述**:
`split_text`函数主要用于对给定的文本进行语义上的分割。它首先检查是否存在`self.pdf`属性如果存在会对文本进行预处理包括合并过多的换行符、将所有空白字符替换为单个空格以及删除连续的换行符。这一步骤旨在清理PDF文档中常见的格式问题以便于后续的文档分割。
接下来,函数尝试导入`modelscope.pipelines`模块,该模块提供了一个`pipeline`函数用于加载并执行特定的NLP任务。如果导入失败会抛出`ImportError`异常,提示用户需要安装`modelscope`包。
在成功导入`modelscope.pipelines`后,函数使用`pipeline`函数创建一个文档分割任务,指定使用的模型为`damo/nlp_bert_document-segmentation_chinese-base`并将计算设备设置为CPU。这个模型基于BERT由阿里巴巴达摩院开源专门用于中文文档的语义分割。
最后,函数将输入文本传递给模型进行分割,并将分割结果(一个包含分割后文本的列表)返回。分割结果是通过将模型输出的文本按`\n\t`分割,并过滤掉空字符串后得到的。
**注意**:
- 使用该函数前,需要确保已经安装了`modelscope[nlp]`包。可以通过执行`pip install "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html`来安装。
- 由于使用了基于BERT的模型进行文档分割对计算资源有一定要求。默认情况下模型会在CPU上运行但如果有足够的GPU资源可以通过修改`device`参数来加速计算。
**输出示例**:
```python
['欢迎使用文档分割功能', '这是第二段文本', '这是第三段文本']
```
此输出示例展示了`split_text`函数处理后的结果,其中输入文本被分割成了三段,每段文本作为列表的一个元素返回。
***