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
各チャンクの最大文字数を指定する整数。値はゼロよりも大きくする必要があります。
オプション:
overlap
連続するチャンク間で重複する文字数を指定する整数。指定されていない場合のデフォルトは0です。
重複は、チャンク全体でコンテキストを維持するために役立ちます。埋め込みタスクや取得タスクのパフォーマンスを向上させることができます。
戻り値¶
オブジェクトの配列を返します。各オブジェクトの構造は次のとおりです。
chunk
:抽出されたテキストを含む文字列。headers
:チャンクがネストされているMarkdownヘッダー値を含むディクショナリ。キーは、:samp:`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ドキュメントを含むテーブル:code:`markdown_docs`を作成し、SPLIT_TEXT_MARKDOWN_HEADER関数を呼び出して各ドキュメントをMarkdownヘッダー#と##で分割しています。この関数は、テキストを15文字ずつのチャンクに分割します(チャンク間で5文字が重複します)。
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;