[개발] 옵시디언 노트 기반 RAG 시스템 구축하기 2steemCreated with Sketch.

in #kr-dev2 months ago (edited)

이전 글


이전 글에서는 Obsidian 노트를 로드하고 처리하는 방법에 대해 설명했습니다. 이번에는 옵시디언 문서를 효과적으로 분할하는 방법에 대해 살펴보겠습니다. 문서의 분할은 정보 검색 및 처리의 효율성을 크게 향상시킬 수 있으며, 특히 대규모 노트 보관함에서는 더욱 중요합니다.

옵시디언 문서 청크 분할하기

문서를 청크 단위로 분할하는 것은 정보를 보다 세분화하여 관리할 수 있게 하며, 특정 주제나 세부 사항을 찾을 때 시간을 절약할 수 있습니다. 이 과정에서 마크다운 형식의 제목을 기준으로 텍스트를 분할하고, 필요에 따라 추가적인 문자 수준에서의 분할을 수행할 것입니다.

마크다운 문서 청크 분할

마크다운 형식의 문서는 제목이나 섹션 구분자를 기준으로 자연스럽게 구조화될 수 있습니다. 이를 통해 각 섹션 또는 주제별로 문서를 분할하면 정보를 보다 효율적으로 관리하고 접근할 수 있습니다.

from langchain.text_splitter import MarkdownTextSplitter

markdown_splitter = MarkdownTextSplitter()
markdown_split_docs = markdown_splitter.split_documents(docs)

위 코드는 MarkdownTextSplitter를 사용하여 문서를 마크다운 제목에 따라 분할합니다. 이 방법은 문서의 구조를 유지하면서도 세부적인 정보 단위로 나누는 이상적인 방식을 제공합니다.

문자 수준 분할

때로는 문서의 특정 부분을 더 작은 단위로 나누어야 할 필요가 있습니다. 이는 특히 긴 문서에서 특정 내용을 더욱 세밀하게 처리하고자 할 때 유용합니다.

from langchain.text_splitter import RecursiveCharacterTextSplitter

chunk_size = 500
chunk_overlap = 30
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=chunk_size, chunk_overlap=chunk_overlap
)

char_split_docs = text_splitter.split_documents(markdown_split_docs)

RecursiveCharacterTextSplitter를 사용하여 문서를 지정된 크기의 문자 단위로 분할합니다. 여기서 chunk_size는 각 분할의 문자 수를, chunk_overlap은 분할 간의 겹치는 문자 수를 지정합니다. 이 방법은 텍스트의 특정 부분을 세부적으로 분석할 수 있게 하며, 문맥을 유지하면서 정보를 처리하는 데 도움을 줍니다.

문서의 효율적인 분할은 정보의 관리와 검색을 간소화하고, 노트 보관함의 규모가 커짐에 따른 도전을 해결하는 데 중요한 역할을 합니다. 다음 글에서는 이렇게 분할된 문서를 기반으로 한 검색 및 연결 과정에 대해 논의할 예정입니다.

Posted using Obsidian Steemit plugin

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.28
TRX 0.12
JST 0.032
BTC 61497.86
ETH 2992.94
USDT 1.00
SBD 3.69