RAG를 하려면 수 많은 Raw Data들을 파싱해야 한다

Raw Data들 중에서도 가장 범용적으로 사용되는 파일은 PDF이기 때문에, 이번 글에서는 여러 파이썬 라이브러리의 PDF 파일에서 한글을 추출해내는 능력을 비교해 볼 것이다


인터넷 검색을 통해 무료 + 많은 사람들이 사용하고 있는 5개의 라이브러리를 실험 대상으로 정했다.

PyPDFium2, PyMuPDF, PyPDF2, PDFMiner, PDFPlumber 이렇게 5개를 비교해보도록 하자


실험 PDF

실험은 가장 무난한 5개의 Domain(medical, law, finance, commerce, public)의 PDF로 진행했다.

텍스트 추출 능력만 실험하기 위해, 이미지나 표가 있는 문서들은 일단 제외하였다.

사용한 코드

1. PyPDFium2

from langchain_community.document_loaders import PyPDFium2Loader

loader = PyPDFium2Loader(pdf_path)
load = loader.load()
print(load[0].page_content)

2. PyMuPDF

import fitz

doc = fitz.open(pdf_path)
for page in doc:
    text = page.get_text()
    print(text)

3. PyPDF2

from PyPDF2 import PdfReader

reader = PdfReader(pdf_path)
pages = reader.pages
text = ""
for page in pages:
    sub = page.extract_text()
    text += sub
print(text)

4. PDFMiner

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextContainer

def extract_text_by_page(pdf_path):
    for page_layout in extract_pages(pdf_path):
        page_text = ""
        for element in page_layout:
            if isinstance(element, LTTextContainer):
                page_text += element.get_text()
        yield page_text

for page_number, page_text in enumerate(extract_text_by_page(pdf_path), start=1):
    print(f"Page {page_number}:\\n{page_text}\\n{'-'*40}\\n")