SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)¶
La fonction SPLIT_TEXT_MARKDOWN_HEADER divise un document au format Markdown en morceaux de texte structuré en fonction des niveaux d’en-tête. La fonction renvoie un tableau d’objets, où chaque objet contient le morceau de texte et les en-têtes associés auxquels ce morceau appartient.
Cette fonction est utile pour préserver la structure du document lors du découpage de contenu à des fins d’intégration, de génération augmentée par la récupération (RAG) ou d’indexation pour la recherche.
La fonction segmente d’abord le texte d’entrée en utilisant les en-têtes Markdown spécifiés, puis divise récursivement chaque segment en utilisant des séparateurs de texte brut par défaut (par exemple, ["nn", "n", " ", ""]
) afin de produire des morceaux de la taille souhaitée.
Syntaxe¶
SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER (
'<text_to_split>',
'<headers_to_split_on>',
<chunk_size>,
[ <overlap> ]
)
Arguments¶
Obligatoire :
'text_to_split'
Chaîne au format Markdown à diviser.
'headers_to_split_on'
Une carte clé-valeur dans laquelle les clés sont des syntaxes d’en-tête Markdown (par exemple,
#
,##
) et les valeurs sont des noms de champs de métadonnées (par ex.,header_1
,header_2
) pour étiqueter les morceaux. Par exemple :{ "#": "header_1", "##": "header_2" }
Cette configuration divisera le document en en-têtes
#
et##
. Dans la sortie, les champsheader_1
etheader_2
contiendront les valeurs correspondantes du texte d’en-tête.chunk_size
Nombre entier spécifiant le nombre maximum de caractères dans chaque fragment. La valeur doit être supérieure à zéro.
Facultatif :
overlap
Nombre entier spécifiant le nombre de caractères de chevauchement entre des fragments consécutifs. La valeur par défaut est 0 si non fourni.
Le chevauchement est utile pour maintenir le contexte entre les morceaux, ce qui peut améliorer les performances des tâches d’intégration et de récupération.
Renvoie¶
Renvoie un tableau d’objets. Chaque objet a la structure suivante :
chunk
: Une chaîne contenant le texte extrait.headers
: Un dictionnaire contenant les valeurs d’en-tête Markdown sous lesquelles le morceau est imbriqué. Les clés correspondent à celles fournies dans la carteheaders_to_split_on
.
Limitations connues¶
Pour cet aperçu, les messages d’erreur peuvent être énigmatiques. Si vous rencontrez des problèmes, vérifiez que vos arguments sont valides et correctement formatés.
Exemples¶
Utilisation simple¶
L’exemple suivant divise une chaîne Markdown sur les en-têtes #
et ##
, produit des morceaux de 12 caractères maximum et applique un chevauchement de 5 caractères entre les morceaux.
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"
}
}
]
Exemple de formatage Markdown et d’aplatissement des résultats en lignes¶
L’exemple suivant crée une table markdown_docs
contenant un court document Markdown dans chaque ligne, puis appelle la fonction SPLIT_TEXT_MARKDOWN_HEADER pour fractionner chaque document en fonction des en-têtes “#” et “##”. La fonction divise ensuite chaque segment en morceaux de 20 caractères chacun, avec un chevauchement de 5 caractères entre les morceaux.
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;