LangChain으로 PDF·CSV·HTML 문서 불러오기와 벡터 임베딩 활용 가이드

GoGoComputer·2024년 10월 27일
0

LangChain Basics

목록 보기
12/40
post-thumbnail

안녕하세요! 이번 섹션에서는 모델의 입력과 출력을 다양한 데이터 소스와 연결하는 방법에 대해 자세히 알아보겠습니다. 특히, PDF, CSV, HTML 파일 등 다양한 유형의 문서를 로드하고, 이를 벡터 임베딩으로 변환하여 저장하고, 모델을 통해 쿼리하는 방법을 배우게 됩니다.


📌 주요 학습 내용

  1. 문서 로더 사용법 이해

    • LangChain이 제공하는 다양한 문서 로더를 사용하여 여러 형식의 파일을 내부 문서 객체로 로드하는 방법을 학습합니다.
    • PDF, CSV, HTML 등 각 파일 형식에 따라 필요한 라이브러리가 있으며, 이를 사전에 설치해야 합니다.
  2. 벡터 임베딩과 벡터 스토어

    • 로드된 문서를 벡터 임베딩으로 변환하여 벡터 스토어에 저장하는 방법을 배웁니다.
    • 저장된 벡터를 사용하여 모델과 상호 작용하고 쿼리를 수행할 수 있습니다.
  3. 문서 로더의 종류와 사용법

    • CSVLoader, BSHTMLLoader, PyPDFLoader 등 다양한 로더의 사용법을 알아봅니다.
    • 각 로더의 특징과 사용 시 주의사항을 이해합니다.
  4. 문제 해결 및 디버깅

    • 로더 사용 시 발생할 수 있는 문제를 파악하고 해결하는 방법을 학습합니다.
    • 특히, PDF 파일의 복잡한 구조로 인한 문제 해결 방법을 다룹니다.

📝 문서 로더 자세히 알아보기

1. 문서 로더란?

  • LangChain은 다양한 유형의 파일을 내부 문서 객체로 빠르게 로드할 수 있는 내장 로더 도구를 제공합니다.
  • 로더는 파일을 읽어들여 모델이 이해할 수 있는 형식으로 변환합니다.

2. 로더 사용 시 주의사항

  • 대부분의 로더는 추가적인 라이브러리를 필요로 합니다.
    • 예: PDF 로더는 pypdf 라이브러리가 필요합니다.
    • 예: HTML 로더는 beautifulsoup4 라이브러리가 필요합니다.
  • 로더를 사용하기 전에 필요한 라이브러리를 설치해야 합니다.
  • 필요한 라이브러리가 설치되지 않은 경우, 로더는 오류 메시지를 통해 알려줍니다.

🔍 문서 로더 예제 살펴보기

예제를 통해 CSV, HTML, PDF 파일을 로드해보겠습니다.

파일 폴더 구조

1. CSV 파일 로드하기

  • CSVLoader를 사용하여 CSV 파일을 로드합니다.
from langchain.document_loaders import CSVLoader

# 로더 인스턴스 생성
csv_loader = CSVLoader(file_path='data/penguins.csv')

# 문서 로드
csv_documents = csv_loader.load()

# 로드된 문서 확인
print("CSV 문서 내용:")
print(csv_documents[0].page_content)
print(csv_documents[0].metadata)

설명:

  • CSVLoader는 CSV 파일을 행 단위로 읽어들입니다.
  • 각 행은 하나의 문서 객체로 반환됩니다.
  • page_content에는 행의 내용이 문자열로 저장됩니다.
  • metadata에는 파일 소스 정보 등이 저장됩니다.

2. HTML 파일 로드하기

  • BSHTMLLoader를 사용하여 HTML 파일을 로드합니다.
  • BeautifulSoup 라이브러리가 필요합니다.
from langchain.document_loaders import BSHTMLLoader

# 로더 인스턴스 생성
html_loader = BSHTMLLoader(file_path='data/example.html')

# 문서 로드
html_documents = html_loader.load()

# 로드된 문서 확인
print("\nHTML 문서 내용:")
print(html_documents[0].page_content)
print(html_documents[0].metadata)

설명:

  • BSHTMLLoader는 HTML 파일을 파싱하여 텍스트를 추출합니다.
  • 주로 웹 스크래핑에 사용되며, 웹 페이지의 내용을 모델에 입력할 때 유용합니다.

3. PDF 파일 로드하기

  • PyPDFLoader를 사용하여 PDF 파일을 로드합니다.
  • pypdf 라이브러리가 필요합니다.
from langchain.document_loaders import PyPDFLoader

# 로더 인스턴스 생성
pdf_loader = PyPDFLoader(file_path='data/report.pdf')

# 문서 로드
pdf_documents = pdf_loader.load()

# 로드된 문서 확인
print("\nPDF 문서 내용:")
print(pdf_documents[0].page_content)
print(pdf_documents[0].metadata)

설명:

  • PyPDFLoader는 PDF 파일을 페이지 단위로 읽어들입니다.
  • PDF 파일은 구조가 복잡할 수 있으므로, 로딩 시 문제가 발생할 수 있습니다.
  • 텍스트 추출이 잘 되지 않을 경우, 다른 PDF 로더를 시도하거나 텍스트 처리를 통해 해결할 수 있습니다.

4. 텍스트 정제하기

  • PDF 로딩 시 줄바꿈이 의도치 않게 포함될 수 있습니다.
  • 이러한 경우 텍스트 정제를 통해 내용을 깨끗하게 만들 수 있습니다.
# 불필요한 줄 바꿈 제거
cleaned_pdf_content = pdf_documents[0].page_content.replace('\n', ' ')

print("\n정제된 PDF 문서 내용:")
print(cleaned_pdf_content)

⚙️ 전체 실습 코드

아래는 위에서 설명한 내용을 모두 포함한 전체 실습 코드입니다.

필요한 라이브러리 설치

pip install langchain openai unstructured pypdf beautifulsoup4 python-dotenv

.env 파일 설정

프로젝트 루트 디렉토리에 .env 파일을 생성하고 다음 내용을 추가합니다:

OPENAI_API_KEY=your_openai_api_key_here

파이썬 코드

import os
from langchain.document_loaders import CSVLoader, PyPDFLoader, BSHTMLLoader
from dotenv import load_dotenv

# .env 파일에서 환경 변수 로드
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

# CSV 파일 로드
csv_loader = CSVLoader(file_path='data/penguins.csv') # data 폴더에 penguins.csv 파일이 있어야 함
csv_documents = csv_loader.load()

# CSV 문서 내용 출력
print("CSV 문서 내용:")
print(csv_documents[0].page_content)
print(csv_documents[0].metadata)

# HTML 파일 로드
html_loader = BSHTMLLoader(file_path='data/example.html') # data 폴더에 example.html 파일이 있어야 함
html_documents = html_loader.load()

# HTML 문서 내용 출력
print("\nHTML 문서 내용:")
print(html_documents[0].page_content)
print(html_documents[0].metadata)

# PDF 파일 로드
pdf_loader = PyPDFLoader(file_path='data/report.pdf') # data 폴더에 report.pdf 파일이 있어야 함
pdf_documents = pdf_loader.load()

# PDF 문서 내용 출력
print("\nPDF 문서 내용:")
print(pdf_documents[0].page_content)
print(pdf_documents[0].metadata)

# 텍스트 정제 (줄바꿈 제거)
cleaned_pdf_content = pdf_documents[0].page_content.replace('\n', ' ')
print("\n정제된 PDF 문서 내용:")
print(cleaned_pdf_content)

📌 추가 설명

  • 라이브러리 임포트 및 환경 변수 설정

    • dotenv 라이브러리를 사용하여 .env 파일에서 OPENAI_API_KEY를 가져옵니다.
    • OpenAI API를 사용하는 경우 이 키가 필요합니다.
  • 각 로더의 역할

    • CSVLoader: CSV 파일을 행 단위로 읽어들여 문서 객체로 반환합니다.
    • BSHTMLLoader: HTML 파일을 파싱하여 텍스트를 추출합니다.
    • PyPDFLoader: PDF 파일을 페이지 단위로 읽어들여 문서 객체로 반환합니다.
  • 문서 객체 구조

    • page_content: 문서의 텍스트 내용이 저장됩니다.
    • metadata: 문서의 메타데이터(예: 파일 경로, 페이지 번호 등)가 저장됩니다.
  • 문제 해결

    • PDF 파일 로딩 시 텍스트 추출이 잘 되지 않으면 다른 로더를 시도하거나 텍스트 전처리를 수행합니다.
    • 필요에 따라 줄바꿈 제거, 불필요한 공백 제거 등의 처리를 합니다.

🔗 참고 자료

  • LangChain 공식 문서: Document Loaders
    • 다양한 문서 로더와 그 사용법에 대한 자세한 정보를 확인할 수 있습니다.

✅ 마무리

이번 섹션에서는 LangChain의 문서 로더를 사용하여 다양한 형식의 문서를 로드하고, 이를 활용하는 방법에 대해 학습했습니다. 로드한 문서를 벡터 임베딩으로 변환하고 벡터 스토어에 저장하여 모델과 상호 작용하는 방법은 다음 강의에서 자세히 다룰 예정입니다.

다양한 문서 형식을 다루면서 발생할 수 있는 문제를 해결하는 방법도 함께 알아보았습니다. 실제 프로젝트에서 이러한 기술을 활용하여 모델의 성능을 향상시킬 수 있을 것입니다.


profile
IT를 좋아합니다.

0개의 댓글