66 lines
5.5 KiB
Markdown
66 lines
5.5 KiB
Markdown
## 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`函数处理后的结果,其中输入文本被分割成了三段,每段文本作为列表的一个元素返回。
|
||
***
|