SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)

A função SPLIT_TEXT_MARKDOWN_HEADER divide um documento no formato Markdown em partes de texto estruturado com base em níveis de cabeçalho. A função retorna uma matriz de objetos, onde cada objeto contém a parte de texto e os cabeçalhos associados sob os quais essa parte se encontra.

Esta função é útil para preservar a estrutura do documento ao dividir o conteúdo para incorporação, geração aumentada de recuperação (RAG) ou indexação de pesquisa.

A função primeiro segmenta o texto de entrada usando os cabeçalhos Markdown especificados e depois divide recursivamente cada segmento usando separadores de texto simples padrão (por exemplo, ["nn", "n", " ", ""]) para produzir partes do tamanho desejado.

Sintaxe

SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER (
  '<text_to_split>',
  '<headers_to_split_on>',
  <chunk_size>,
  [ <overlap> ]
)
Copy

Argumentos

Obrigatório:

'text_to_split'

Uma string formatada em Markdown a ser dividida.

'headers_to_split_on'

Um mapa de chave-valor no qual as chaves são da sintaxe do cabeçalho Markdown (por exemplo, #, ##) e os valores são nomes de campos de metadados (por exemplo, header_1, header_2) para rotular as partes. Por exemplo:

{
  "#": "header_1",
  "##": "header_2"
}
Copy

Esta configuração dividirá o documento nos cabeçalhos # e ##. Na saída, os campos header_1 e header_2 conterão os valores de texto de cabeçalho correspondentes.

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 partes consecutivas. O padrão é 0 se não for fornecido.

A sobreposição é útil para manter o contexto entre as partes, o que pode melhorar o desempenho em tarefas de incorporação e recuperação.

Retornos

Retorna uma matriz de objetos. Cada objeto tem a seguinte estrutura:

  • chunk: uma string contendo o texto extraído.

  • headers: um dicionário contendo os valores do cabeçalho Markdown sob os quais a parte é aninhada. As chaves correspondem às fornecidas no mapa headers_to_split_on.

Limitações conhecidas

Para esta visualização, as mensagens de erro podem ser enigmáticas. Se você encontrar problemas, verifique se seus argumentos são válidos e formatados corretamente.

Exemplos

Uso simples

O exemplo a seguir divide uma string Markdown nos cabeçalhos # e ##, produz partes de até 12 caracteres e aplica uma sobreposição de 5 caracteres entre as partes.

SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
  '# HEADER 1\nthis is text in header 1\n## HEADER 2\nthis is a subheading',
  OBJECT_CONSTRUCT('#', 'header_1', '##', 'header_2'),
  12,
  5
);
Copy
[
  {
    "chunk": "this is text",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "text in",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "in header 1",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "this is a",
    "headers": {
      "header_1": "HEADER 1",
      "header_2": "HEADER 2"
    }
  },
  {
    "chunk": "subheading",
    "headers": {
      "header_1": "HEADER 1",
      "header_2": "HEADER 2"
    }
  }
]

Exemplo com formatação Markdown e nivelamento de resultados em linhas

O exemplo a seguir cria uma tabela markdown_docs contendo um pequeno documento Markdown em cada linha, então chama a função SPLIT_TEXT_MARKDOWN_HEADER para segmentar cada documento nos cabeçalhos Markdown “#” e “##”. Em seguida, a função divide cada segmento em partes de 20 caracteres cada, com uma sobreposição de 5 caracteres entre as partes.

CREATE OR REPLACE TABLE markdown_docs (doc VARCHAR);

INSERT INTO markdown_docs VALUES
('# Product Overview\nOur system is a high-performance data processing engine.\n\n## Architecture\nIt uses a distributed design optimized for analytics.\n\n## Key Benefits\n- Scalable\n- Cost-efficient\n- Secure'),
('# User Guide\nThis guide describes how to install and use the product.\n\n## Installation\nFollow the steps below to install.\n\n## Usage\nOnce installed, use the CLI or UI for operations.'),
('# FAQ\nHere are answers to commonly asked questions.\n\n## Pricing\nWe offer flexible pricing models.\n\n## Support\nContact our 24/7 support team anytime.');


SELECT
    c.value['chunk']::varchar as chunk,
    c.value['headers']::object as headers,
FROM
    markdown_docs,
    LATERAL FLATTEN(
        SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
        doc,
        OBJECT_CONSTRUCT('#', 'header_1', '##', 'header_2'),
        20,
        5
    )
    ) c;
Copy