SPLIT_TEXT_RECURSIVE_CHARACTER (SNOWFLAKE.CORTEX)¶
SPLIT_TEXT_RECURSIVE_CHARACTER 함수는 텍스트 임베딩 또는 검색 인덱스 함수과 함께 사용할 텍스트를 전처리하기 위해 문자열을 재귀적으로 더 짧은 문자열로 분할합니다. 이 함수는 입력된 매개 변수에 따라 원본 텍스트에서 청크가 파생되는 텍스트 청크 배열을 반환합니다.
분할 알고리즘은 형식에 따라 기본값으로 암시적으로 또는 separators
인자에 명시적으로 제공된 순서대로 구분 기호에 있는 텍스트를 분할하려고 시도합니다. 그런 다음 지정된 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'
입력 텍스트의 형식으로, 분할 알고리즘의 기본 구분 기호를 결정합니다. 다음 중 하나에 해당해야 합니다.
none
: 형식별 구분 기호 없음.separators
필드의 구분 기호만 분할에 사용됩니다.markdown
: 헤더, 코드 블록, 테이블의 구분 기호 및 구분 기호 필드의 모든 구분 기호를 구분합니다.
chunk_size
각 청크의 최대 문자 수를 지정하는 정수입니다. 이 값은 0보다 커야 합니다.
선택 사항:
overlap
연속된 청크 사이에 겹칠 문자 수를 지정하는 정수입니다. 기본적으로 청크는 겹치지 않습니다.
overlap
을 지정하는 경우chunk_size
인자보다 작아야 합니다.겹침은 각 청크에 이전 청크에 대한 컨텍스트가 있는지 확인하는 데 유용합니다. 이렇게 하면 검색 결과 또는 기타 처리 품질을 개선하는 데 도움이 될 수 있습니다.
separators
format
매개 변수에 의해 지정된 구분 기호 외에 텍스트를 분할할 위치를 결정할 때 경계로 사용할 문자 시퀀스의 정렬된 목록입니다. 이 목록의 마지막 항목은 빈 문자열(두 문자 사이를 분할할 수 있음)과 같은 일반 구분 기호여야 알고리즘이 텍스트를 원하는 크기의 청크로 분할할 수 있습니다.기본값: [”\n\n”, “\n”, “ “, “”](단락 나누기, 줄 바꿈, 공백 및 두 문자 사이(빈 문자열)를 의미).
반환¶
입력 문자열에서 추출한 텍스트 청크가 포함된 문자열 배열을 반환합니다.
알려진 제한 사항¶
이 미리 보기에서는 오류 메시지가 난해할 수 있습니다. 대부분의 오류 메시지는 인자 유효성 검사 실패와 관련이 있습니다. 디버깅의 첫 단계로 모든 인자에 유효한 값이 있는지 확인하십시오.
예¶
간단한 사용법¶
다음 예제는 입력 텍스트 hello world are you here
을 사용하여 SPLIT_TEXT_RECURSIVE_CHARACTER 함수를 직접 호출합니다. 이 함수는 텍스트를 각각 15자씩의 청크로 분할하며, 청크 사이에는 10자가 겹칩니다.
SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER (
'hello world are you here',
'none',
15,
10
);
['hello world are', 'world are you', 'are you here']
마크다운 형식과 청크 배열을 행으로 플랫화하는 예제입니다¶
다음 예제는 각 행에 짧은 마크다운 설명서가 포함된 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;