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> ]
)
Copy

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"
}
Copy

Mit dieser Konfiguration wird das Dokument auf #- und ##-Header aufgeteilt. In der Ausgabe enthalten die Felder header_1 und header_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 der headers_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
);
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"
    }
  }
]

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