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 SQL Reference

본문

문법

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;

더 알아보기