当前位置:   article > 正文

项目实训第十二周:实现文本分割_chineserecursivetextsplitter

chineserecursivetextsplitter

前言:在RAG的实现中,需要对上传的辅助数据进行分句操作,也即将文本分成多个chunk片段,在检索过程中会以chunk为单位进行检索和匹配,以chunk为单位而不是以整篇文章为单位是因为每篇文章一般都由几个语义段构成,每个片段的内容和知识有较大的差距,同时也是为了保证匹配到的知识更加准确。

首先要对文本进行分割,上面这个函数的功能使用正则表达式从文本末尾开始分割文本。

该类的功能是对中文文本进行递归分割。

ChineseRecursiveTextSplitter类继承自RecursiveCharacterTextSplitter,专门用于处理中文文本的递归分割。它允许用户自定义分隔符列表,以及控制是否保留分隔符和分隔符是否按正则表达式处理。默认的分隔符列表包括常见的中文和英文句子结束符号,如句号、问号、感叹号等。此类通过递归调用`_split_text`方法,能够有效地将长文本分割成更小的片段,同时保证分割后的文本片段不会过长或过短,适合进一步的文本处理或分析。

参数:

- text: 需要被分割的文本,类型为str。

- separators: 用于分割文本的分隔符列表,类型为List[str]。

代码描述:

`_split_text`函数首先确定使用哪个分隔符来分割文本。它通过遍历`separators`列表并检查每个分隔符是否存在于文本中来实现。一旦找到第一个匹配的分隔符,函数就使用这个分隔符来分割文本,并将后续的分隔符列表更新为新的`new_separators`列表,用于后续的递归分割。

分割文本的实际操作是通过调用`_split_text_with_regex_from_end`函数完成的,该函数使用正则表达式从文本末尾开始分割文本。这一步骤允许保留或移除分隔符,具体取决于`_keep_separator`的值。

接下来,函数会检查分割后的每个文本块的长度。如果文本块的长度小于设定的`_chunk_size`,则将其添加到结果列表中。对于长度超过`_chunk_size`的文本块,函数会尝试使用`new_separators`列表中的下一个分隔符递归地分割这些文本块。

最后,函数返回一个经过清理的文本块列表,其中移除了所有空白文本块,并将连续的换行符替换为单个换行符。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/990270
推荐阅读
相关标签
  

闽ICP备14008679号