SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)¶
Die SPLIT_TEXT_MARKDOWN_HEADER-Funktion teilt ein Markdown-formatiertes Dokument basierend auf den Kopfzeilenebenen in strukturierte Textblöcke auf. Die Funktion gibt ein Array von Objekten zurück, wobei jedes Objekt den Textblock und die zugehörigen Kopfzeilen enthält, unter die dieser Block fällt.
Diese Funktion ist nützlich, um die Dokumentstruktur beizubehalten, wenn Inhaltsblöcke für die Einbettung, Retrieval-Augmented Generation (RAG) oder die Suchindizierung erstellt werden.
Die Funktion segmentiert zunächst den Eingabetext unter Verwendung der angegebenen Markdown-Headers und teilt dann rekursiv jedes Segment mithilfe von Standard-Trennzeichen für Klartext auf (z. B. ["nn", "n", " ", ""]
), um Blöcke der gewünschten Größe zu erzeugen.
Syntax¶
SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER (
'<text_to_split>',
'<headers_to_split_on>',
<chunk_size>,
[ <overlap> ]
)
Argumente¶
Benötigt:
'text_to_split'
Eine Markdown-formatierte Zeichenfolge, die aufgeteilt werden soll.
'headers_to_split_on'
Eine Schlüssel-Wert-Zuordnung, in der die Schlüssel Markdown-Header-Syntax (z. B.
#
,##
) und die Werte Metadaten-Feldnamen (z. B.header_1
,header_2
) sind, um die Blöcke zu kennzeichnen. Beispiel:{ "#": "header_1", "##": "header_2" }
Mit dieser Konfiguration wird das Dokument auf
#
- und##
-Header aufgeteilt. In der Ausgabe enthalten die Felderheader_1
undheader_2
die entsprechenden Header-Textwerte.chunk_size
Eine Ganzzahl, die die maximale Anzahl von Zeichen in jedem Block angibt. Der Wert muss größer als Null sein.
Optional:
overlap
Eine Ganzzahl, die die Anzahl der Zeichen angibt, die zwischen aufeinanderfolgenden Blöcken überlappen sollen. Der Standardwert ist 0, wenn nicht angegeben.
Überschneidungen sind nützlich, um den Kontext blockübergreifend aufrechtzuerhalten, was die Leistung bei Einbettungs- und Abrufaufgaben verbessern kann.
Rückgabewerte¶
Gibt ein Array von Objekten zurück. Jedes Objekt hat die folgende Struktur:
chunk
: Eine Zeichenfolge, die den extrahierten Text enthält.headers
: Ein Dictionary mit den Markdown-Header-Werten, unter denen der Block verschachtelt ist. Die Schlüssel stimmen mit den in derheaders_to_split_on
-Zuordnung angegebenen Schlüsseln überein.
Bekannte Einschränkungen¶
Bei dieser Vorschau können die Fehlermeldungen kryptisch sein. Wenn Sie Probleme feststellen, überprüfen Sie, ob Ihre Argumente gültig und ordnungsgemäß formatiert sind.
Beispiele¶
Einfache Nutzung¶
Das folgende Beispiel teilt eine Markdown-Zeichenfolge auf #
- und ##
-Header auf, erzeugt Blöcke mit bis zu 12 Zeichen und wendet eine 5-Zeichen-Überlappung zwischen Blöcken an.
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"
}
}
]
Beispiel mit Markdown-Formatierung und Vereinfachung von Ergebnissen in Zeilen¶
Im folgenden Beispiel wird eine Tabelle markdown_docs
erstellt, die in jeder Zeile ein kurzes Markdown-Dokument enthält, und dann die Funktion SPLIT_TEXT_MARKDOWN_HEADER aufgerufen, um jedes Dokument an den Markdown-Headern ‚#‘ und ‚##‘ zu segmentieren. Die Funktion teilt dann jedes Segment in Blöcke von je 20 Zeichen auf, mit einer Überlappung von 5 Zeichen zwischen den Blöcken.
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;