SPLIT_TEXT_MARKDOWN_HEADER

SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)

SPLIT_TEXT_MARKDOWN_HEADER 함수는 Markdown 형식의 문서를 헤더 수준을 기준으로 구조화된 텍스트 청크로 분할해요. 이 함수는 객체의 배열을 반환하는데, 각 객체는 텍스트 청크와 그 청크가 속하는 관련 헤더를 포함해요.

이 함수는 임베딩, 검색 증강 생성(RAG), 검색 인덱싱을 위해 콘텐츠를 청킹할 때 문서 구조를 보존하는 데 유용해요.

이 함수는 먼저 지정된 Markdown 헤더를 사용해 입력 텍스트를 세그먼트로 나누고, 그런 다음 기본 일반 텍스트 구분자(예: ["nn", "n", " ", ""])를 사용해 각 세그먼트를 재귀적으로 분할해 원하는 크기의 청크를 만들어요.

출처: Snowflake SQL Reference - SPLIT_TEXT_MARKDOWN_HEADER

본문

구문

SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
  '<text_to_split>',
  '<headers_to_split_on>',
  <chunk_size>,
  [ <overlap> ]
)

인자

필수:

'<text_to_split>'

분할할 Markdown 형식의 문자열이에요.

'<headers_to_split_on>'

키가 Markdown 헤더 구문(예: #, ##)이고 값이 청크에 라벨을 붙일 메타데이터 필드 이름(예: header_1, header_2)인 키-값 맵이에요. 예를 들어:

{
  "#": "header_1",
  "##": "header_2"
}

이 구성은 문서를 #와 ## 헤더에서 분할해요. 출력에서 header_1과 header_2 필드는 해당 헤더 텍스트 값을 포함해요.

chunk_size

각 청크의 최대 문자 수를 지정하는 정수예요. 값은 0보다 커야 해요.

선택:

overlap

연속된 청크 사이에 겹칠 문자 수를 지정하는 정수예요. 제공하지 않으면 기본값은 0이에요.

Overlap은 청크 간 컨텍스트를 유지하는 데 유용하며, 임베딩 및 검색 작업의 성능을 향상시킬 수 있어요.

반환 값

객체의 배열을 반환해요. 각 객체는 다음 구조를 가져요:

  • chunk: 추출된 텍스트를 포함하는 문자열.
  • headers: 청크가 중첩되는 Markdown 헤더 값을 포함하는 사전. 키는 headers_to_split_on 맵에 제공된 키와 일치해요.

예시

간단한 사용

다음 예시는 Markdown 문자열을 #와 ## 헤더 둘 다에서 분할하고, 최대 12자 크기의 청크를 만들고, 청크 사이에 5자의 겹침을 적용해요.

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
);
[
  {
    "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"
    }
  }
]

Markdown 형식 지정 및 결과를 행으로 평탄화하는 예시

다음 예시는 각 행에 짧은 Markdown 문서를 포함하는 markdown_docs 테이블을 만들고, SPLIT_TEXT_MARKDOWN_HEADER 함수를 호출해 각 문서를 Markdown 헤더 '#'와 '##'에서 세그먼트화해요. 그런 다음 함수는 각 세그먼트를 청크 사이에 5자의 겹침을 두고 각각 20자 크기의 청크로 분할해요.

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;

더 알아보기