SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX)¶
Die Funktion SPLIT_TEXT_RECURSIVE_CHARACTER teilt eine Zeichenfolge rekursiv in kürzere Zeichenfolgen auf, um den Text für die Verwendung mit Funktionen zur Texteinbettung oder Suchindizierung vorzuverarbeiten. Die Funktion gibt ein Array von Textblöcken zurück, wobei die Blöcke auf der Grundlage der angegebenen Eingabeparameter aus dem Originaltext abgeleitet werden.
Der Aufteilungsalgorithmus versucht, den Text an den Trennzeichen in der Reihenfolge aufzuteilen, in der sie bereitgestellt werden, entweder implizit als Standardwerte basierend auf dem Format oder explizit im Argument separators
. Die Aufteilung wird dann rekursiv auf jeden Block angewendet, der länger als die angegebene chunk_size
ist, bis alle Blöcke nicht mehr länger als die angegebene chunk_size
sind.
Wenn zum Beispiel das Format auf 'none'
eingestellt ist, teilt der Algorithmus zuerst an den Sequenzen „\n\n“ auf, die in den meisten Formaten Absatzumbrüche darstellen. Innerhalb eines resultierenden Blocks, der immer noch länger als chunk_size
ist, trennt die Funktion an den „\n“-Zeichen, die für Zeilenumbrüche stehen. Dieser Vorgang wird so lange wiederholt, bis jeder der Blöcke weniger als chunk_size
Zeichen enthält.
Syntax¶
SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
'<text_to_split>',
'<format>',
<chunk_size>,
[ <overlap> ],
[ <separators> ]
)
Argumente¶
Benötigt:
'text_to_split'
Der zu teilende Text.
'format'
Das Format Ihres Eingabetextes, das die Standardtrennzeichen im Aufteilungsalgorithmus bestimmt. Muss einer der folgenden sein:
none
: Keine formatspezifischen Trennzeichen. Nur die Trennzeichen im Feldseparators
werden für die Aufteilung verwendet.markdown
: Trennt in Kopfzeilen, Codeblöcken und Tabellen, zusätzlich zu allen Trennzeichen im Feld „Trennzeichen“.
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. Standardmäßig haben Blöcke keine Überschneidungen. Wenn
overlap
angegeben wird, muss es kleiner sein als das Argumentchunk_size
.Überschneidungen sind nützlich, um sicherzustellen, dass jeder Block einen gewissen Kontext zum vorherigen Block hat. Dies kann dazu beitragen, die Qualität der Suchergebnisse oder anderer Verarbeitungen zu verbessern.
separators
Eine geordnete Liste von Zeichenfolgen, die als Begrenzungen verwendet werden sollen, wenn bestimmt wird, wo der Text geteilt werden soll, zusätzlich zu allen Trennzeichen, die durch den Parameter
format
vorgegeben werden. Das letzte Element in dieser Liste sollte ein allgemeines Trennzeichen sein, z. B. eine leere Zeichenfolge (die eine Aufteilung zwischen zwei beliebigen Zeichen ermöglicht), sodass der Algorithmus garantiert in der Lage ist, den Text in Blöcke der gewünschten Größe aufzuteilen.Standard: [“\n\n“, „\n“, „ „, „“], d. h. ein Absatzumbruch, ein Zeilenumbruch, ein Leerzeichen und zwischen zwei beliebigen Zeichen (die leere Zeichenfolge).
Rückgabewerte¶
Gibt ein Array von Zeichenfolgen zurück, das Textblöcke enthält, die aus der Eingabezeichenfolge extrahiert wurden.
Bekannte Einschränkungen¶
Bei dieser Vorschau können die Fehlermeldungen kryptisch sein. Die meisten Fehlermeldungen beziehen sich auf eine fehlgeschlagene Argumentvalidierung. Als ersten Schritt der Fehlersuche sollten Sie sicherstellen, dass alle Ihre Argumente gültige Werte haben.
Beispiele¶
Einfache Nutzung¶
Das folgende Beispiel ruft direkt die Funktion SPLIT_TEXT_RECURSIVE_CHARACTER mit dem Eingabetext hello world are you here
auf. Die Funktion teilt den Text in Blöcke von je 15 Zeichen auf, mit einer Überlappung von 10 Zeichen zwischen den Blöcken.
SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
'hello world are you here',
'none',
15,
10
);
['hello world are', 'world are you', 'are you here']
Beispiel mit Markdown-Formatierung und Vereinfachung von Blöcken in Zeilen¶
Im folgenden Beispiel wird eine Tabelle sample_documents
erstellt, die in jeder Zeile ein kurzes Markdown-Dokument enthält, und dann die Funktion SPLIT_TEXT_RECURSIVE_CHARACTER aufgerufen, um jedes Dokument zu teilen. Die Funktion teilt den Text in Blöcke von je 25 Zeichen auf, mit einer Überlappung von 10 Zeichen zwischen den Blöcken.
-- Create sample markdown data table
CREATE OR REPLACE TABLE sample_documents (
doc_id INT AUTOINCREMENT, -- Monotonically increasing integer
document STRING
);
-- Insert sample data
INSERT INTO sample_documents (document)
VALUES
('### Heading 1\\nThis is a sample markdown document. It contains a list:\\n- Item 1\\n- Item 2\\n- Item 3\\n'),
('## Subheading\\nThis markdown contains a link [example](http://example.com) and some \**bold*\* text.'),
('### Heading 2\\nHere is a code snippet:\\n```\\ncode_block_here()\\n```\\nAnd some more regular text.'),
('## Another Subheading\\nMarkdown example with \_italic\_ text and a [second link](http://example.com).'),
('### Heading 3\\nText with an ordered list:\\n1. First item\\n2. Second item\\n3. Third item\\nMore text follows here.');
-- split text
SELECT
doc_id,
c.value
FROM
sample_documents,
LATERAL FLATTEN( input => SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
document,
'markdown',
25,
10
)) c;