본문 바로가기
Study (Data Science)/NLP

Langchain / Document_loader

by 콜라찡 2024. 5. 23.
# pdf or docx를 확장자 기준으로 나눠 한번에 로드하는 코드

from langchain_community.document_loaders import Docx2txtLoader, PyPDFLoader
from langchain.document_loaders import DirectoryLoader

def doc_loader(file_path):
  _, file_ext = os.path.splitext(file_path)

  if file_ext.lower() == 'docx':
    txt_loader = DirectoryLoader(os.path.dirname(file_path), glob=os.path.basename(file_path), loader_cls=Docx2txtLoader)
    documents = txt_loader.load()
    print("Successfully extracted DOCX file")
    return documents
  
  elif file_ext.lower() == '.pdf':
    pdf_loader = DirectoryLoader(os.path.dirname(file_path), glob=os.path.basename(file_path), loader_cls=PyPDFLoader)
    documents = pdf_loader.load()
    print("Successfully extracted PDF file")
    return documents
  
  else:
    documents = []
    print("Unsupported file format")

documents = doc_loader("파일경로")

 

Langchain으로 뒤에 연결하려면 document_loaders를 쓰는게 좋다. 

PDF 문서라서 목차별로 끊어 임베딩 하려고 시도했었지만, 뒤에 RecursiveCharacterSplitter가 안먹는다.

왜냐하면 document_loader로 로드해야 Document라는 타입의 input 형성이 가능하다.

Document 타입이 아니라 list 나 text 형식은 뒤에 splitter가 안먹음.

  • Document : 데이터와 메타데이터를 하나로 표현하는 방식.
    • page_content : 데이터의 내용
    • metadata : 데이터의 메타 정보를 나타냄
728x90

댓글