CharacterTextSplitter

텍스트 분할

효율적인 문서 청킹을 위한 다양한 텍스트 분할 전략을 다룬다.

AI
RAG
LangChain
저자

Kwangmin Kim

공개

2024년 12월 31일

이 방법은 가장 간단한 방식입니다.

기본적으로 "\n\n" 을 기준으로 문자 단위로 텍스트를 분할하고, 청크의 크기를 문자 수로 측정합니다.

  1. 텍스트 분할 방식: 단일 문자 기준
  2. 청크 크기 측정 방식: 문자 수 기준
# data/appendix-keywords.txt 파일을 열어서 f라는 파일 객체를 생성합니다.
with open("./data/appendix-keywords.txt") as f:
    file = f.read()  # 파일의 내용을 읽어서 file 변수에 저장합니다.

파일로부터 읽은 파일의 일부 내용을 출력합니다.

# 파일으로부터 읽은 내용을 일부 출력합니다.
print(file[:500])

1 CharacterTextSplitter를 사용하여 분할

CharacterTextSplitter를 사용하여 텍스트를 청크(chunk)로 분할하는 코드에 대해 설명합니다.

  • separator: 분할할 기준을 설정합니다. 기본값은 "\n\n"입니다.
  • chunk_size: 각 청크의 최대 크기를 설정합니다. 예: 250자
  • chunk_overlap: 인접한 청크 간 중복을 허용합니다. 예: 50자
  • length_function: 텍스트의 길이를 계산하는 함수를 지정합니다. 예: len
from langchain_text_splitters import CharacterTextSplitter

# CharacterTextSplitter를 사용하여 텍스트를 청크(chunk)로 분할하는 코드
text_splitter = CharacterTextSplitter(
    # 텍스트를 분할할 때 사용할 구분자를 지정합니다. 기본값은 "\n\n"입니다.
    separator="\n\n",
    # 분할된 텍스트 청크의 최대 크기를 지정합니다 (문자 수).
    chunk_size=210,
    # 분할된 텍스트 청크 간의 중복되는 문자 수를 지정합니다.
    chunk_overlap=0,
    # 텍스트의 길이를 계산하는 함수를 지정합니다.
    length_function=len,
)
  • text_splitter를 사용하여 file 텍스트를 문서 단위로 분할합니다.
  • 분할된 문서 리스트 중 첫 번째 문서(texts[0])를 출력합니다.
# 텍스트를 청크로 분할합니다.
texts = text_splitter.create_documents([file])
print(len(texts[0].page_content))  # 분할된 문서의 개수를 출력합니다.
print(texts[0])  # 분할된 문서 중 첫 번째 문서를 출력합니다.

다음은 문서와 함께 메타데이터를 전달하는 예시입니다.

메타데이터가 문서와 함께 분할되는 점에 주목해 주세요.

  • create_documents 메서드는 텍스트 데이터와 메타데이터 리스트를 인자로 받습니다.
metadatas = [
    {"document": 1},
    {"document": 2},
]  # 문서에 대한 메타데이터 리스트를 정의합니다.
documents = text_splitter.create_documents(
    [
        file,
        file,
    ],  # 분할할 텍스트 데이터를 리스트로 전달합니다.
    metadatas=metadatas,  # 각 문서에 해당하는 메타데이터를 전달합니다.
)
print(documents[0])  # 분할된 문서 중 첫 번째 문서를 출력합니다.
len(documents)
documents[1].metadata

split_text() 메서드를 사용하여 텍스트를 분할합니다.

  • text_splitter.split_text(file)[0]file 텍스트를 text_splitter를 사용하여 분할한 후, 분할된 텍스트 조각 중 첫 번째 요소를 반환합니다.
# text_splitter를 사용하여 file 텍스트를 분할하고, 분할된 텍스트의 첫 번째 요소를 반환합니다.
text_splitter.split_text(file)[0]
text_splitter.split_documents([file])

Subscribe

Enjoy this blog? Get notified of new posts by email: