Document & Document Loaders

문서 로더

다양한 형식의 문서를 LangChain으로 로드하는 방법을 다룬다.

AI
RAG
LangChain
저자

Kwangmin Kim

공개

2024년 12월 31일

참고

1 실습에 활용한 문서

소프트웨어정책연구소(SPRi) - 2023년 12월호

  • 저자: 유재흥(AI정책연구실 책임연구원), 이지수(AI정책연구실 위촉연구원)
  • 링크: https://spri.kr/posts/view/23669
  • 파일명: SPRI_AI_Brief_2023년12월호_F.pdf

2 Document

LangChain 의 기본 문서 객체입니다.

속성 - page_content: 문서의 내용을 나타내는 문열입니다. - metadata: 문서의 메타데이터를 나타내는 딕셔너리입니다.

from langchain_core.documents import Document

document = Document(page_content="안녕하세요? 이건 랭체인의 도큐먼드 입니다")
# 도큐먼트의 속성 확인
document.__dict__

metadata 에 속성 추가

# 메타데이터 추가
document.metadata["source"] = "TeddyNote"
document.metadata["page"] = 1
document.metadata["author"] = "Teddy"
# 도큐먼트의 속성 확인
document.metadata

3 Document Loader

다양한 파일의 형식으로부터 불러온 내용을 문서(Document) 객체로 변환하는 역할을 합니다.

3.1 주요 Loader

  • PyPDFLoader: PDF 파일을 로드하는 로더입니다.
  • CSVLoader: CSV 파일을 로드하는 로더입니다.
  • UnstructuredHTMLLoader: HTML 파일을 로드하는 로더입니다.
  • JSONLoader: JSON 파일을 로드하는 로더입니다.
  • TextLoader: 텍스트 파일을 로드하는 로더입니다.
  • DirectoryLoader: 디렉토리를 로드하는 로더입니다.
# 예제 파일 경로
FILE_PATH = "./data/SPRI_AI_Brief_2023년12월호_F.pdf"
from langchain_community.document_loaders import PyPDFLoader

# 로더 설정
loader = PyPDFLoader(FILE_PATH)

3.2 load()

  • 문서를 로드하여 반환합니다.
  • 반환된 결과는 List[Document] 형태입니다.
# PDF 로더
docs = loader.load()

# 로드된 문서의 수 확인
len(docs)
# 첫번째 문서 확인
docs[5]

3.3 load_and_split()

  • splitter 를 사용하여 문서를 분할하고 반환합니다.
  • 반환된 결과는 List[Document] 형태입니다.
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 문열 분할기 설정
text_splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=0)

# 예제 파일 경로
FILE_PATH = "./data/SPRI_AI_Brief_2023년12월호_F.pdf"

# 로더 설정
loader = PyPDFLoader(FILE_PATH)

# 문서 분할
split_docs = loader.load_and_split(text_splitter=text_splitter)

# 로드된 문서의 수 확인
print(f"문서의 길이: {len(split_docs)}")

# 첫번째 문서 확인
split_docs[10]

3.4 lazy_load()

  • generator 방식으로 문서를 로드합니다.
loader.lazy_load()
# generator 방식으로 문서 로드
for doc in loader.lazy_load():
    print(doc.metadata)

3.5 aload()

  • 비동기(Async) 방식의 문서 로드
# 문서를 async 방식으로 로드
adocs = loader.aload()
# 문서 로드
await adocs

Subscribe

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