# 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
'Study (Data Science) > NLP' 카테고리의 다른 글
Langchain / Retriever (0) | 2024.05.23 |
---|---|
Langchain / Splitter (1) | 2024.05.23 |
데이터를 많이 줄래, 에포크를 많이 줄래? (0) | 2024.05.21 |
PDF file - RAG (0) | 2024.05.21 |
프롬프트 엔지니어링 Book Summary (저자: 반병현) (0) | 2023.12.06 |
댓글