SPLIT_TEXT_MARKDOWN_HEADER
SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)
SPLIT_TEXT_MARKDOWN_HEADER 함수는 Markdown 형식의 문서를 헤더 수준을 기준으로 구조화된 텍스트 청크로 분할해요. 이 함수는 객체의 배열을 반환하는데, 각 객체는 텍스트 청크와 그 청크가 속하는 관련 헤더를 포함해요.
이 함수는 임베딩, 검색 증강 생성(RAG), 검색 인덱싱을 위해 콘텐츠를 청킹할 때 문서 구조를 보존하는 데 유용해요.
이 함수는 먼저 지정된 Markdown 헤더를 사용해 입력 텍스트를 세그먼트로 나누고, 그런 다음 기본 일반 텍스트 구분자(예: ["nn", "n", " ", ""])를 사용해 각 세그먼트를 재귀적으로 분할해 원하는 크기의 청크를 만들어요.
본문
구문
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;
더 알아보기
- String & binary functions (AI Functions) — AI 문자열 함수 모음
- SNOWFLAKE.CORTEX 네임스페이스 — Cortex 함수