Document Loader
- PDF, TXT, CSV, 웹페이지 등의 문서를 불러와서 텍스트로 변환하는 도구.
주요 역할
- 다양한 형식의 문서를 읽고 처리 가능
- 텍스트를 추출하여 RAG 시스템에서 활용
- Vectorstore에 저장할 데이터를 준비
📌 즉, Document Loader는 "문서를 AI가 처리할 수 있도록 불러오는 도구" 🚀
주요 사용하는 종류
🔹PyPDFLoader
PDF 파일로부터 텍스트를 추출하는 데 사용.
PDF 문서의 텍스트를 읽고, 분석하거나 데이터로 변환할 때 필요합니다.
💫 예제
from PyPDF2 import PdfReader
reader = PdfReader("example.pdf")
page = reader.pages[0]
text = page.extract_text() print(text)
🔹WebBaseLoader
웹 페이지로부터 HTML이나 XML 같은 웹 콘텐츠를 로드할 때 사용.
웹 크롤링이나 데이터 스크레이핑 작업에 필요합니다.
💫 예제
import requests
from bs4 import BeautifulSoup
response = requests.get("https://example.com")
soup = BeautifulSoup(response.content, "html.parser")
title = soup.find("h1").text
print(title)
🔹TextLoader
로컬 시스템이나 원격 서버에서 텍스트 파일을 로드할 때 사용됩니다. 텍스트 기반 데이터를 분석하거나 처리하기 위한 기초 작업입니다.
💫 예제
import pandas as pd
data = pd.read_csv("data.csv")
print(data.head())
RAG란?
- Retrieval Augmented Generation
- LLM 답변에 외부 데이터 참조하는 프레임워크
- 랭체인의 Retrieval
- RAG의 대부분 구성 요소 아우름
- 구성 요소 하나하나 ➡️ RAG 품질에 중요한 영향을 미침
[순서]
1. Langchain의 Document Loaders : 문서 불러오기
2. Langchain의 Text Splitters : 문서 텍스트 분할
3. Langchain의 Vector Embeddings : 임베딩 모델을 통해 수치화된 값들을 벡터에 저장
4. 수치화된 텍스트 데이터 ➡️ 벡터 저장소에 저장
5. Langchain의 Retrievers : 사용자 질문과 가장 유사한 문장을 검색
6. Langchain의 Chain : LLM이 문장을 생성
Document Loaders?
- 다양한 형태의 문서를 RAG 전용 객체로 불러들이는 모듈
- Document Loaders로 불러오면 갖게 되는 구조
- Page_content : 문서 내용
- Metadata : 문서 위치, 제목, 페이지 넘버, ...
- Document Loaders로 불러오면 갖게 되는 구조
실습: Documnet Loaders
실습 코드 : Documnet Loaders 기초.ipynb
필수 라이브러리 설치
- langchain
- unstructured
- pypdf
- pdf2image
- docx2txt
- pdfminer
- langchain-community
!pip install langchain unstructured pypdf pdf2image docx2txt pdfminer
!pip install -U langchain-community
Document Loaders
다양한 형식의 문서 불러오기 & Langchain에 결합하기 쉬운 텍스트 형태로 변환
txt, pdf, word, ppt, xlsx, csv 등의 거의 모든 형식 문서를 기반으로 LLM 구동 가능
URL Document Loader
웹에 기록된 글도 텍스트 형식으로 가져와 LLM에 활용 가능
ex) WebBaseLoader, UnstructuredURLLoader
- WebBaseLoader
from langchain.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://n.news.naver.com/mnews/article/092/0002307222?sid=105")
data = loader.load()
print(data[0].page_content)
...
- UnstructuredURLLoader
from langchain.document_loaders import UnstructuredURLLoader
urls = [
"https://n.news.naver.com/mnews/article/092/0002307222?sid=105",
"https://n.news.naver.com/mnews/article/052/0001944792?sid=105"
]
loader = UnstructuredURLLoader(urls=urls)
data = loader.load()
data
PDF Document Loader
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("/content/drive/MyDrive/NLP톺아보기/file/BOK이슈노트제2023-26호_수출입경로를 통한 해외 기후변화 물리적 리스크의 국내 파급영향.pdf")
pages = loader.load_and_split()
- 첫 번째 페이지만 확인
pages[0]
- 전체 페이지
pages
- page_conent로 첫번째 페이지 확인하기
print(pages[1].page_content)
Word Document Loader
from langchain.document_loaders import Docx2txtLoader
loader = Docx2txtLoader("/content/drive/MyDrive/NLP톺아보기/file/1등_통계+바로쓰기+공모전+수상작.docx")
data = loader.load()
data
- metadata 확인
data[0].metadata
- page_content로 내용 확인
data[0].page_content
CSV Document Loader
- delimiter : 필드(열) 구분자 지정
- quotechar : 텍스트를 어떻게 묶을 것인지
ex) " : 큰따옴표로 묶인 텍스트를 하나의 값으로 처리 - fieldnames : 열 이름 설정
from langchain.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(file_path='/content/drive/MyDrive/NLP톺아보기/file/mlb_teams_2012.csv', csv_args={
'delimiter': ',',
'quotechar': '"',
# 'fieldnames': ['ID', 'Name', 'Position', 'Height', 'Weight', 'Sponsorship Earnings', 'Shoe Sponsor', 'Career Stage', 'Age']
'fieldnames' : ['Team', 'Payroll (millions)', 'Wins']
})
data = loader.load()
data[:10]