LangChain을 사용하여 PDF 문서를 로드할 때, PyPDFLoader와 PyPDFium2Loader는 가장 많이 사용되는 두 가지 로더입니다. 하지만 이 두 로더는 내부적으로 작동 방식이 다르며, 적절한 선택이 필요합니다.
| 차이점 | PyPDFLoader (PyMuPDF 기반) | PyPDFium2Loader (PyPDFium2 기반) |
|---|---|---|
| PDF 분석 방식 | 텍스트를 직접 파싱 | PDF를 렌더링 후 분석 |
| 페이지 분할 | load_and_split() 필요 | load()만 사용해도 페이지별로 나뉨 |
| OCR 지원 | ❌ 없음 | ✅ 지원 |
| 이미지 추출 | ✅ 가능 (오류 가능성 있음) | ✅ 더 안정적 |
| 속도 | 보통 | 빠름 (C++ 기반) |
| 적합한 경우 | 단순한 PDF 텍스트 분석 | 이미지 포함된 PDF, OCR 필요할 때 |
PyMuPDF 기반)from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("example.pdf", extract_images=True)
pages = loader.load_and_split() # 📌 페이지별로 나누어 반환
load()를 사용하면 전체 텍스트가 하나로 합쳐질 가능성이 있음.load_and_split()을 사용해야 페이지별로 나뉜 결과를 얻을 수 있음.PyMuPDF(fitz) 기반으로 텍스트를 직접 파싱.PyPDFium2 기반)from langchain.document_loaders import PyPDFium2Loader
loader = PyPDFium2Loader("example.pdf", extract_images=True)
data = loader.load() # 📌 이미 페이지별로 나누어진 상태로 반환됨
load()만 호출해도 페이지별로 나뉜 리스트 형태로 반환됨 → 추가로 load_and_split()을 호출할 필요 없음.PyPDFium2(Google PDFium 기반) 사용 → 속도가 빠르고, PDF를 이미지처럼 렌더링할 수 있음.✔ 일반적인 텍스트 기반 PDF → PyPDFLoader
✔ OCR(이미지에서 텍스트 추출)이 필요 → PyPDFium2Loader
✔ 속도가 중요한 경우 → PyPDFium2Loader
✔ PDF 내 이미지도 함께 처리해야 하는 경우 → PyPDFium2Loader
📌 즉, PyPDFium2Loader가 더 강력하고 안정적인 경우가 많음.
하지만 단순한 텍스트 추출이 목적이라면 PyPDFLoader도 충분히 사용 가능! 🚀