SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX)

A função SPLIT_TEXT_RECURSIVE_CHARACTER divide uma cadeia de caracteres em cadeia de caracteres mais curtas, recursivamente, para pré-processamento de texto a ser usado com funções de incorporação de texto ou de indexação de pesquisa. A função retorna uma matriz de blocos de texto, em que os blocos são derivados do texto original com base nos parâmetros de entrada fornecidos.

O algoritmo de divisão tenta dividir o texto em separadores na ordem em que são fornecidos, seja implicitamente como padrão com base no formato ou explicitamente no argumento separators. Em seguida, a divisão é aplicada a cada parte mais longa do que o chunk_size especificado, de forma recursiva, até que todas as partes não sejam mais longas do que o chunk_size especificado.

Por exemplo, se o formato for definido como 'none', o algoritmo primeiro divide as sequências «\n\n», que representam quebras de parágrafo na maioria dos formatos. Em qualquer parte resultante que ainda seja maior do que os caracteres de chunk_size, a função se divide nos caracteres «\n», que representam quebras de linha. Este processo se repete até que cada um dos blocos tenha menos de chunk_size caracteres.

Sintaxe

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

Argumentos

Obrigatório:

'text_to_split'

O texto a ser dividido.

'format'

O formato do texto de entrada, que determina os separadores padrão no algoritmo de divisão. Deve ser uma das seguintes opções:

  • none: nenhum separador específico de formato. Somente os separadores no campo separators são usados para a divisão.

  • markdown: separa em cabeçalhos, blocos de código e tabelas, além de quaisquer separadores no campo separadores.

chunk_size

Um número inteiro que especifica o número máximo de caracteres em cada parte. O valor deve ser maior que zero.

Opcional:

overlap

Um número inteiro que especifica o número de caracteres a serem sobrepostos entre blocos consecutivos. Por padrão, os blocos não têm sobreposição. Se overlap for especificado, ele deverá ser menor que o argumento chunk_size.

A sobreposição é útil para garantir que cada parte tenha algum contexto sobre o parte anterior. Isso pode ajudar a melhorar a qualidade dos resultados de pesquisa ou de outros processamentos.

separators

Uma lista ordenada de sequências de caracteres a serem usadas como limites ao determinar onde o texto deve ser divido, além de quaisquer separadores ditados pelo parâmetro format. O último item desta lista deve ser um separador geral, como uma cadeia de caracteres vazia (que permite que uma divisão seja feita entre dois caracteres quaisquer), de modo que o algoritmo tenha a garantia de poder dividir o texto em blocos do tamanho desejado.

Padrão: [»\n\n», «\n», « «, «»], o que significa uma quebra de parágrafo, uma quebra de linha, um espaço e entre dois caracteres quaisquer (a cadeia de caracteres vazia).

Retornos

Retorna uma matriz de cadeias de caracteres que contém blocos de texto extraídos da cadeia de caracteres de entrada.

Limitações conhecidas

Para esta visualização, as mensagens de erro podem ser enigmáticas. A maioria das mensagens de erro está relacionada a falhas na validação de argumentos. Como primeira etapa da depuração, certifique-se de que todos os seus argumentos tenham valores válidos.

Exemplos

Uso simples

O exemplo a seguir chama diretamente a função SPLIT_TEXT_RECURSIVE_CHARACTER com o texto de entrada hello world are you here. A função divide o texto em partes de 15 caracteres cada, com uma sobreposição de 10 caracteres entre as partes.

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']

Exemplo com formatação Markdown e nivelamento da matriz de partes em linhas

O exemplo a seguir cria uma tabela sample_documents contendo um documento Markdown curto em cada linha e, em seguida, chama a função SPLIT_TEXT_RECURSIVE_CHARACTER para dividir cada documento. A função divide o texto em partes de 25 caracteres cada, com uma sobreposição de 10 caracteres entre as partes.

-- 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