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> ]
)
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" }
Esta configuração dividirá o documento nos cabeçalhos
#
e##
. Na saída, os camposheader_1
eheader_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 mapaheaders_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
);
[
{
"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;