SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX)

SPLIT_TEXT_RECURSIVE_CHARACTER 函数递归地将字符串拆分为较短的字符串,以便预处理文本,以与文本嵌入或搜索索引函数一起使用。该函数返回一个文本块数组,其中块是根据提供的输入参数从原始文本派生。

拆分算法尝试按照分隔符的提供顺序在分隔符上拆分文本,要么默认根据格式隐式拆分,要么以 separators 实参显式分割。然后,以递归方式对长度超过指定 chunk_size 的每个块应用拆分,直到所有块都不超过指定 chunk_size 为止。

例如,如果格式设置为 'none',则算法首先按大多数格式中表示分段符的“\n\n”序列进行拆分。在任何仍长于 chunk_size 字符的结果块中,函数会按表示换行符的“\n”字符进行拆分。重复此过程,直到每个块的字符数都少于 chunk_size

语法

SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
  '<text_to_split>',
  '<format>',
  <chunk_size>,
  [ <overlap> ],
  [ <separators> ]
)
Copy

实参

必填:

'text_to_split'

要拆分的文本。

'format'

输入文本的格式,决定拆分算法中的默认分隔符。必须是以下其中一项:

  • none:没有格式特定的分隔符。只有 separators 字段中的分隔符用于拆分。

  • markdown:除分隔符字段中的任何分隔符外,对标题、代码块和表进行分隔。

chunk_size

一个整数,指定每个块中的最大字符数。该值必须大于零。

可选:

overlap

一个整数,指定连续块之间要重叠的字符数。默认情况下,块没有重叠。如果已指定 overlap,则它必须小于 chunk_size 实参。

重叠对于确保每个块都有与前一个块有关的一些上下文很有用。这有助于提高搜索结果或其他处理的质量。

separators

一个有序的字符序列列表,除 format 参数规定的任何分隔符外,在确定文本拆分位置时用作边界。此列表中的最后一项应该是通用分隔符,例如空字符串(允许在任意两个字符之间进行拆分),这样算法才能保证将文本拆分成所需大小的块。

默认:["\n\n", "\n", " ", ""],表示任意两个字符(空字符串)之间的分段符、分行符和空格。

返回

返回一个字符串数组,包含从输入字符串中提取的文本块。

已知限制

在此预览中,错误消息可能很隐秘。大多数错误消息与实参验证失败有关。作为调试的第一步,确保所有实参都有有效值。

示例

简单用法

以下示例使用输入文本 hello world are you here 直接调用 SPLIT_TEXT_RECURSIVE_CHARACTER 函数。该函数将文本拆分为 15 个字符的块,块之间有 10 个字符的重叠。

SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
   'hello world are you here',
   'none',
   15,
   10
);
Copy
['hello world are', 'world are you', 'are you here']

使用 Markdown 格式化并将块数组展平成行的示例

以下示例创建表 sample_documents,每行都包含简短的 Markdown 文档,然后调用 SPLIT_TEXT_RECURSIVE_CHARACTER 函数拆分每个文档。该函数将文本拆分为 25 个字符的块,块之间有 10 个字符的重叠。

-- Create sample markdown data table
CREATE OR REPLACE TABLE sample_documents (
   doc_id INT AUTOINCREMENT, -- Monotonically increasing integer
   document STRING
);

-- Insert sample data
INSERT INTO sample_documents (document)
VALUES
   ('### Heading 1\\nThis is a sample markdown document. It contains a list:\\n- Item 1\\n- Item 2\\n- Item 3\\n'),
   ('## Subheading\\nThis markdown contains a link [example](http://example.com) and some \**bold*\* text.'),
   ('### Heading 2\\nHere is a code snippet:\\n```\\ncode_block_here()\\n```\\nAnd some more regular text.'),
   ('## Another Subheading\\nMarkdown example with \_italic\_ text and a [second link](http://example.com).'),
   ('### Heading 3\\nText with an ordered list:\\n1. First item\\n2. Second item\\n3. Third item\\nMore text follows here.');

-- split text
SELECT
   doc_id,
   c.value
FROM
   sample_documents,
   LATERAL FLATTEN( input => SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
      document,
      'markdown',
      25,
      10
   )) c;
Copy
语言: 中文