LlamaIndex

LlamaIndex로 PDF 문서 검색

Pro.Dev 2025. 1. 22. 11:22
반응형

Python과 LlamaIndex로 PDF 문서 검색 애플리케이션 만들기

PDF 파일에서 필요한 정보를 빠르게 검색할 수 있는 애플리케이션은 많은 분야에서 유용합니다. 이번 글에서는 LlamaIndex를 활용해 PDF 파일을 인덱싱하고, 효율적으로 검색하는 Python 애플리케이션을 구축하는 방법을 다룹니다.


1. 프로젝트 개요

목표

  1. PDF 문서를 읽어와 데이터를 추출하고 인덱싱합니다.
  2. 사용자가 자연어로 입력한 질문에 대해 관련 정보를 검색합니다.

주요 기능

  • PDF 파일 텍스트 추출
  • LlamaIndex를 활용한 데이터 인덱싱 및 검색
  • 자연어 기반 질의 처리

2. 개발 환경 준비

2.1 필수 라이브러리 설치

PDF 데이터를 처리하고 LlamaIndex를 활용하기 위해 필요한 라이브러리를 설치합니다.

pip install llama-index openai PyPDF2

참고: OpenAI API를 사용하려면 API 키가 필요합니다.

2.2 기본 설정

Python 3.8 이상의 환경을 권장합니다. 가상 환경(venv, Conda 등)을 활용해 프로젝트 환경을 설정하세요.


3. PDF 문서 검색 애플리케이션 구현

3.1 PDF 텍스트 추출 함수 작성

PyPDF2 라이브러리를 사용해 PDF 파일에서 텍스트를 추출합니다.

import os
from PyPDF2 import PdfReader
from llama_index import GPTSimpleVectorIndex, Document

# PDF 파일에서 텍스트 추출 함수
def extract_text_from_pdf(file_path):
    reader = PdfReader(file_path)
    text = ""
    for page in reader.pages:
        text += page.extract_text()
    return text

3.2 인덱싱 및 검색 코드 작성

추출한 텍스트를 LlamaIndexDocument 객체로 변환하고 인덱싱합니다.

# OpenAI API 키 설정
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

# PDF 파일 읽기 및 인덱싱
def load_and_index_pdfs(directory):
    documents = []
    for filename in os.listdir(directory):
        if filename.endswith(".pdf"):
            file_path = os.path.join(directory, filename)
            text = extract_text_from_pdf(file_path)
            documents.append(Document(text))
    return GPTSimpleVectorIndex.from_documents(documents)

# PDF 파일이 저장된 디렉터리
pdf_directory = "pdf_files"

print("PDF 파일을 인덱싱합니다...")
index = load_and_index_pdfs(pdf_directory)
print("인덱싱 완료!")

# 검색 질의
query = "LlamaIndex의 주요 기능은 무엇인가요?"
response = index.query(query)

print(f"질의: {query}")
print(f"응답: {response}")

3.3 코드 설명

  1. PDF 텍스트 추출: extract_text_from_pdf 함수는 PDF 파일에서 텍스트를 추출하여 문자열로 반환합니다.
  2. 인덱싱: load_and_index_pdfs 함수는 디렉터리 내 모든 PDF 파일을 읽고, 이를 LlamaIndex로 인덱싱합니다.
  3. 질의 처리: index.query(query) 메서드를 사용해 자연어 질의를 처리하고 응답을 반환합니다.

4. 실행 결과

입력 데이터

  • example1.pdf:

    LlamaIndex는 다양한 데이터 소스를 지원하며, 텍스트, PDF, 데이터베이스 등의 데이터를 인덱싱할 수 있습니다.
  • example2.pdf:

    LlamaIndex는 자연어 기반 검색 기능을 제공합니다.

질의 예시 및 응답

질의: LlamaIndex의 주요 기능은 무엇인가요?
응답: LlamaIndex는 텍스트, PDF, 데이터베이스 등의 데이터를 인덱싱하며, 자연어 기반 검색 기능을 제공합니다.

5. 확장 가능성

5.1 대규모 PDF 데이터 처리

  • 수십 개에서 수백 개의 PDF 문서를 효율적으로 처리하려면 비동기 방식으로 파일을 읽어오거나 데이터베이스와 연동하는 방법을 고려할 수 있습니다.

5.2 검색 정확도 향상

  • 질의 결과의 정확도를 높이기 위해 데이터 전처리(cleaning) 또는 맞춤형 GPT 프롬프트를 활용할 수 있습니다.

5.3 웹 애플리케이션 통합

  • Flask, FastAPI를 사용해 RESTful API로 배포하여 사용자 인터페이스를 제공할 수 있습니다.

5.4 고급 검색 기능 추가

  • 키워드 필터링, 문서 간 유사도 비교 등 고급 기능을 추가할 수 있습니다.

참고 자료

반응형