SPLIT_TEXT_RECURSIVE_CHARACTER
SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX)
SPLIT_TEXT_RECURSIVE_CHARACTER 함수는 텍스트 임베딩이나 검색 인덱싱 함수에 사용할 텍스트를 전처리하기 위해 문자열을 더 짧은 문자열로 재귀적으로 분할해요. 이 함수는 입력 파라미터를 기반으로 원본 텍스트에서 파생된 텍스트 청크(chunk)의 배열을 반환해요.
분할 알고리즘은 형식(format)을 기반으로 한 기본값으로 암시적으로 제공되거나 separators 인자로 명시적으로 제공된 순서대로 텍스트를 구분자(separator)에서 분할하려고 시도해요. 그런 다음 지정된 chunk_size보다 긴 각 청크에 분할을 재귀적으로 적용해, 모든 청크가 지정된 chunk_size 이하가 될 때까지 반복해요.
예를 들어 형식이 'none'으로 설정되면 알고리즘은 먼저 대부분의 형식에서 문단 나눔을 나타내는 "\n\n" 시퀀스에서 분할해요. 그 결과 청크 중 여전히 chunk_size보다 긴 청크에서는 줄바꿈을 나타내는 "\n" 문자에서 분할해요. 각 청크가 chunk_size보다 작아질 때까지 이 과정을 반복해요.
본문
문법
SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
'<text_to_split>',
'<format>',
<chunk_size>,
[ <overlap> ],
[ <separators> ]
)
인자
필수: text_to_split, format, chunk_size
선택: overlap, separators
반환
입력 문자열에서 추출한 텍스트 청크를 담은 문자열 배열을 반환해요.
예제
간단한 사용
다음 예제는 입력 텍스트 hello world are you here와 함께 SPLIT_TEXT_RECURSIVE_CHARACTER 함수를 직접 호출해요. 이 함수는 텍스트를 각각 15자씩, 청크 사이 10자 겹침(overlap)으로 분할해요.
SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
'hello world are you here',
'none',
15,
10
);
['hello world are', 'world are you', 'are you here']
Markdown 형식 예시와 청크 배열의 행 평탄화
다음 예제는 각 행에 짧은 Markdown 문서가 담긴 sample_documents 테이블을 만든 뒤, SPLIT_TEXT_RECURSIVE_CHARACTER 함수를 호출해 각 문서를 분할해요. 이 함수는 텍스트를 각각 25자씩, 청크 사이 10자 겹침으로 분할해요.
-- 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;