카테고리 없음
4. RAG를 위한 LangChain의 핵심 구성 요소 및 실습[Document Loader]
조찬국
2024. 10. 31. 23:58
728x90
1. Document Loader의 대한 개념
: 주어진 무서를 Rag에서 활용하기 용이한 형태(Document 객체)로 변환하는 역할을 하는게 LangChain의 Document Loader라고 할 수 있다.
Document 객체는 문서의 내용을 담은 Page_content와 메타데이터로 이뤄진 Dictionary이다.
1.1. Page_content
Pdf 데이터에 들어있는 텍스트들이 전부 여기에 들어간다.
1.2. metadata
PDF 파일에 대한 정보이다. 예를들어 쪽별로 분할했을시 이러한 정보에 관한 내용이 들어간다.
2. 실습
2.1. PyPDF Loader
쪽별로 Page_content확인
쪽별로 메타 데이터 확인
전체 page에 대한 정보
2.2 OCR 기능 활용하여 이미지-텍스트 혼합 페이지 내 텍스트 추출하기
<파일의 6페이지 내용>
#OCR기능 위해 설치
!pip install rapidocr-onnxruntime
#PyPDFLoader 불러오기
from langchain_community.document_loaders import PyPDFLoader
# PDF파일 불러올 객체 PyPDFLoader 선언(extract_images 매개변수로 OCR 수행)
loader = PyPDFLoader(r"/content/drive/MyDrive/마소캠퍼스/[이슈리포트 2022-2호] 혁신성장 정책금융 동향.pdf", extract_images=True)
# PDF파일 로드 및 페이지별로 자르기
pages = loader.load_and_split()
print(pages[5].page_content)
OCR은 이미지내의 텍스트를 읽으므로 딥러닝 모델에서 갖고올 때 실행시간이 굉장히 오래 걸린다.
결과
2.3 OCR 기능 활용하여 페이지 내 테이블 추출하기
<파일의 4페이지>
결과
2.4 Office file Loaders
#docx2txt 설치
!pip install --upgrade --quiet docx2txt
#Docx2txtLoader 불러오기
from langchain_community.document_loaders import Docx2txtLoader
#Docx2txtLoader로 워드 파일 불러오기(경로 설정)
loader = Docx2txtLoader(r"/content/drive/MyDrive/마소캠퍼스/[삼성전자] 사업보고서(일반법인) (2021.03.09).docx")
#페이지로 분할하여 불러오기
data = loader.load_and_split()
data[0]
#첫번째 페이지 출력하기
print(data[12].page_content[:500])
print(data[12].metadata)
결과
2.5 CSV 파일 불러오기
from langchain_community.document_loaders.csv_loader import CSVLoader
loader = CSVLoader(file_path=r"/content/drive/MyDrive/마소캠퍼스/mlb_teams_2012.csv")
data = loader.load()
data[0]
결과
2.6 인터넷 정보 로드하기, WebBaseLoader
from langchain_community.document_loaders import WebBaseLoader
#텍스트 추출할 URL 입력
loader = WebBaseLoader("https://www.espn.com/")
#ssl verification 에러 방지를 위한 코드
loader.requests_kwargs = {'verify':False}
data = loader.load()
data
"verify: False" 는 ssl인증을 하지 않는다.
2.6.1 Top Headlines만 가져오기
import bs4
from langchain_community.document_loaders import WebBaseLoader
#텍스트 추출할 URL 입력
loader = WebBaseLoader("https://www.espn.com/",
bs_kwargs=dict(
parse_only=bs4.SoupStrainer(
class_=("headlineStack top-headlines")
)
)
)
#ssl verification 에러 방지를 위한 코드
loader.requests_kwargs = {'verify':False}
data = loader.load()
data
Beautiful Soup Keyword:bs4 => 해당 url의 css 클래스만 지정해서 가져온다.
2.7 특정 경로내의 모든 파일 불러오기, DirectoryLoader
pip install unstructured[pdf]
pip install --upgrade nltk
OSError: No such file or directory: '/root/nltk_data/tokenizers/punkt/PY3_tab'
이 에러가 발생되면 nltk를 업그레이드 하면 정상적으로 실행된다
from langchain_community.document_loaders import DirectoryLoader
#첫번째 매개변수로 경로 입력, glob에 해당 경로에서 불러들일 파일의 형식 지정
#*는 모든 문자를 표현하는 와일드카드로, .pdf로 끝나는 모든 파일을 의미함
loader = DirectoryLoader(r'/content/drive/MyDrive/마소캠퍼스', glob="*.pdf")
docs = loader.load()
[i.metadata['source'] for i in docs]
glob: 어떤 형식의 파일확장자를 가져올지에 대한 설정
<결과>
2.7 특정 경로내의 모든 파일 불러오기, DirectoryLoader
#pthon-pptx 패키지 설치
!pip install -q python-pptx unstructured
#UnstructuredPowerPointLoader 불러오기
from langchain_community.document_loaders import UnstructuredPowerPointLoader
#mode=elements를 통해 pptx의 요소별로 Document 객체로 가져오기
loader = UnstructuredPowerPointLoader(r"/content/drive/MyDrive/마소캠퍼스/Copilot-scenarios-for-Marketing.pptx", mode="elements")
#pptx 파일을 분할 로드하기
data = loader.load_and_split()
data[1]
<결과>
728x90