생물.컴퓨터.통계

PDF에서 정보를 추출하려고 할 때...

프로페서 H 2025. 2. 2. 08:58

 

 

PDF에서 정보를 추출하려면 고려해야할 사항, 그리고 관련된 툴들이 너무 다양합니다. 

 

여기에 관련된 내용을 정리를 틈틈히 하려고 합니다. 

 

최종 완성되면 완성되었다라고 표기를 하겠습니다. 그동안은 '작업 중' 글로 이해해 주세요.

 

목차: 

1. PDF 텍스트 추출을 위한 라이브러리

2. 인공지능 기반의 PDF, 이미지 처리 툴

3. Base64 - 왜? 언제? 어떻게 ?

 

 

✅ 문서 정보 추출 기법 개요
현재 문서 정보 추출 기법은 크게 네 가지 주요 접근 방식으로 나눌 수 있다.

✅ 1. OCR 기반 텍스트 추출
✔ OCR (Optical Character Recognition) 모델을 사용하여 문서에서 직접 텍스트를 추출한다.
✔ 텍스트 위주의 문서에서는 효과적이지만, 이미지, 표, 수식 등이 포함된 문서에서는 노이즈가 발생하여 고품질 데이터 추출에는 적합하지 않다.

🔹 장점:
문서 내 텍스트 정보를 직접 추출 가능OCR 엔진(Tesseract, EasyOCR, PaddleOCR 등) 사용 가능
🔹 단점:
표, 이미지, 수식 등이 포함된 문서에서 노이즈 발생문서 구조 및 레이아웃 정보를 유지하기 어려움

✅ 2. 라이브러리 기반 텍스트 파싱
✔ 스캔되지 않은 디지털 문서의 경우, PyMuPDF 같은 오픈 소스 Python 라이브러리를 사용하여 OCR 호출 없이 직접 콘텐츠를 읽을 수 있다.
✔ 더 빠르고 정확한 텍스트 추출이 가능하지만, 표, 수식 등의 요소를 포함한 문서에서는 실패할 가능성이 높다.

🔹 장점:
OCR을 사용하지 않기 때문에 속도가 빠름텍스트가 깨끗하게 저장된 PDF에서는 정확도가 높음
🔹 단점:
수식, 표 등의 정보는 제대로 인식되지 않음문서 구조가 복잡한 경우 일부 정보가 손실될 수 있음

✅ 3. 다중 모듈 문서 파싱
✔ 다양한 문서 파싱 모델을 결합하여 문서 이미지를 처리하는 방식
✔ 단계별로 레이아웃 분석, 텍스트/표/수식 개별 인식을 수행하여 보다 정밀한 문서 분석이 가능하다.

📌 처리 과정
1️⃣ 레이아웃 감지 알고리즘을 사용하여 이미지, 이미지 캡션, 표, 표 캡션, 머리글, 텍스트 등 다양한 영역을 식별한다.
2️⃣ 각 영역에 맞는 인식기를 적용한다:
텍스트, 머리글 → OCR 기반 인식수식 → 수식 인식 모델(MathOCR, Im2LaTeX 등)표 → 표 인식 모델(Table Transformer, TabStructNet 등)

🔹 장점:
다양한 문서 유형에서 정확한 정보 추출 가능표, 이미지, 수식도 개별적으로 처리 가능
🔹 단점:
처리 속도가 느릴 수 있음 (모듈이 많을수록 계산량 증가)기존의 오픈 소스 모델들은 학술 논문에 최적화되어 있어, 교과서, 시험지, 연구 보고서, 신문 등에서는 성능이 떨어질 수 있음

✅ 결론
📌 각 방법은 특정 문서 유형에 따라 성능이 다르게 나타난다.
📌 OCR 기반 방법은 간단하지만 표, 수식 인식에는 한계가 있음.
📌 라이브러리 기반 파싱은 속도가 빠르지만 복잡한 문서에서는 한계가 있음.
📌 다중 모듈 문서 파싱은 가장 정밀하지만, 계산량이 많고 학술 논문 이외의 문서에서는 성능 저하 가능성이 있음.
📌 따라서 문서 유형에 맞춰 최적의 방법을 선택해야 한다. 🚀

 


 

Theme 1. 우선 PDF에서 텍스트를 추출하는 라이브러리들이 뭐가 있을까? 

📌 PDF 텍스트 추출을 위한 도구 및 라이브러리

1️⃣ PDF 문서에서 텍스트를 추출하는 파이썬 라이브러리

다음은 PDF에서 텍스트를 추출할 때 자주 사용되는 라이브러리 목록입니다.

  • pdfplumber (가장 추천되는 라이브러리, pdfminer.six 기반)
  • PyPDF2
  • pdfminer.six
  • PyMuPDF

2️⃣ 스캔된 PDF(이미지 기반)에서 텍스트를 추출하는 도구

이미지 형태의 PDF에서 텍스트를 추출할 수 있는 OCR(광학 문자 인식) 도구는 다음과 같습니다.

📌 로컬 실행 가능 도구

  • Tesseract
  • Paddle OCR

클라우드 기반 서비스

  • Azure Document Intelligence
  • Google Document AI
  • Amazon Textract

💡 OCR 선택 시 고려할 점

OCR 기술은 단순히 텍스트 인식 품질만이 아니라 여러 요소를 고려하여 선택해야 합니다.
최근 머신러닝 기술의 발전으로 OCR의 정확도가 크게 향상되었지만, 성능이 높은 모델을 실행하려면 고사양 CPU 및 GPU가 필요합니다.

클라우드 서비스 OCR의 특징
정확도가 높음 (Azure, Google, Amazon 등의 대형 기업 서비스)
🚫 개인정보 보호 문제 (클라우드 기반 서비스는 보안 정책을 검토해야 함)

따라서, **개인정보 보호가 중요한 경우 로컬 OCR(Tesseract, Paddle OCR)**을 고려해야 하며,
최고의 인식 품질이 필요한 경우 클라우드 기반 OCR 서비스를 활용하는 것이 좋습니다.

 

Theme 2. 최근 유행하는 인공지능 기반의 PDF 문서 정보 추출

 

 

📌 AI 기반 PDF 및 이미지 문서 처리 도구


1️⃣ Donut: OCR-Free Document Understanding

🔗 GitHub 링크

Donut은 OCR 없이 문서를 직접 분석하는 최신 문서 이해 AI 모델입니다.
기존 OCR 방식과 달리, 이미지-텍스트 변환 없이 바로 문서의 내용을 파악할 수 있습니다.

주요 특징

  • OCR을 사용하지 않고 문서 이미지에서 바로 텍스트 및 레이아웃 분석
  • 파라미터가 적어 가벼우며, OCR 대비 속도 및 정확도 향상
  • 영수증, 논문, 계약서 등의 다양한 문서 분석 가능
  • Hugging Face transformers 라이브러리와 호환됨

🚀 활용 분야

  • 자동 데이터 입력: 인보이스, 영수증 처리
  • 문서 검색 최적화: 기업 문서 관리 시스템
  • 전자 문서 분석: 계약서 및 공공 문서 해석

📌 OCR 없이 문서를 처리하는 새로운 방식으로, 빠르고 정밀한 문서 분석이 필요한 환경에 적합합니다.


2️⃣ MinerU: Multi-Modal Document Understanding

🔗 GitHub 링크

MinerU문서 분석을 위한 멀티모달 AI 프레임워크로,
텍스트와 이미지 정보를 함께 활용하여 더욱 정교한 문서 이해가 가능합니다.

주요 특징

  • PDF 및 이미지 문서 처리: 문서 내 텍스트, 표, 그림을 동시에 분석
  • OCR 기반 및 OCR-Free 방식 모두 지원
  • Transformer 기반의 강력한 자연어 이해 모델 적용
  • 정보 검색, 데이터 마이닝 및 자동 보고서 생성 가능

🚀 활용 분야

  • 법률 및 의료 문서 분석: 복잡한 텍스트 및 도표 자동 해석
  • 금융 데이터 처리: 재무 보고서 및 주식 분석 자동화
  • 연구 논문 정리: 논문의 핵심 내용 자동 요약

📌 OCR과 함께 AI 기반 문서 분석을 결합한 솔루션으로, 다양한 포맷의 문서를 효과적으로 처리하는 데 유용합니다.

 

 

📌 Base64와 LLM을 활용한 이미지 처리

✅ Base64란?

  • Base64 인코딩 바이너리 데이터를 텍스트로 변환하는 방식이다.
  • PNG, PDF, 오디오 파일 등 바이너리 데이터를 텍스트로 변환하여 저장 및 전송할 때 사용된다.
  • 네트워크 전송, JSON 응답, 데이터베이스 저장 등에 활용된다.

✅ Base64를 사용하는 이유

 네트워크에서 텍스트 형식으로 데이터를 주고받을 수 있음
 JSON, HTML, XML 내에서 안전하게 포함 가능
 이진 데이터를 문자열로 변환하여 손실 없이 유지 가능
 이미지, PDF, 오디오 데이터를 텍스트 기반 시스템에서 활용 가능

 

**접은글 있음

더보기

 


✅ PNG를 Base64로 변환하는 방법

import base64

# PNG 이미지를 Base64로 변환
def encode_image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
    return encoded_string

base64_image = encode_image_to_base64("example.png")
print(base64_image)  # "iVBORw0KGgoAAAANSUhEUgAA..."

Base64로 변환된 문자열을 JSON 내에 포함 가능


✅ JSON에 Base64 이미지 포함하기

{
    "text": "이 문서의 주요 내용입니다.",
    "tables": ["Column1 | Column2", "Data1 | Data2"],
    "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}

JSON 데이터를 통해 이미지와 텍스트를 함께 전달 가능


✅ Base64를 다시 PNG로 변환하는 방법

import base64

# Base64 문자열을 PNG로 변환
def decode_base64_to_image(base64_string, output_path="output.png"):
    with open(output_path, "wb") as image_file:
        image_file.write(base64.b64decode(base64_string))

decode_base64_to_image(base64_image, "decoded_image.png")

이제 Base64로 인코딩된 데이터를 다시 이미지로 복원 가능


✅ LLM이 Base64 이미지를 이해할 수 있는가?

일반 LLM(GPT-4, LLaMA, Claude 등)은 Base64 문자열을 해석할 수 없다.
멀티모달 LLM (LLaVA, GPT-4V, DeepSeek-Vision 등)은 Base64 데이터를 디코딩 후 분석할 수 있다.

따라서, Base64를 직접 입력하는 것이 아니라, 이를 디코딩한 후 멀티모달 LLM에 전달해야 한다.


✅ Base64 데이터를 멀티모달 LLM이 처리하도록 만드는 방법

1️⃣ Base64 → PNG 변환 후 전달

import base64
from PIL import Image
import io

# Base64 → 이미지 변환
def decode_base64_to_image(base64_string):
    image_data = base64.b64decode(base64_string)
    image = Image.open(io.BytesIO(image_data))
    return image

decoded_image = decode_base64_to_image(base64_image)
decoded_image.show()

이미지 파일로 변환 후 멀티모달 LLM에 전달 가능

2️⃣ LLaVA API를 이용하여 분석

import requests

def send_image_to_llm(image_path):
    with open(image_path, "rb") as img_file:
        files = {"image": img_file}
        payload = {
            "model": "llava-llama3:latest",
            "prompt": "이 이미지에서 정보를 추출하세요.",
            "max_tokens": 300
        }
        response = requests.post("http://localhost:11434/api/generate", files=files, data=payload)
    
    return response.json().get("text", "분석 실패")

result = send_image_to_llm("decoded_image.png")
print("📄 LLM 분석 결과:", result)

이제 Base64 대신 실제 이미지를 전송하여 정확한 분석 수행 가능


✅ Base64가 불필요한 경우 vs 필요한 경우

Base64 불필요Base64 필요
API가 PNG/JPG 파일을 직접 받을 수 있음 JSON 기반 데이터 전송이 필요함
성능 최적화를 위해 변환 과정 생략 가능 데이터베이스에 이미지 데이터를 저장해야 함
직접 업로드 방식 지원 웹 브라우저와의 데이터 교환
멀티모달 LLM이 파일 업로드 방식 지원 파일을 다룰 수 없는 환경 (예: HTML, JSON 등)

API가 이미지를 직접 받을 수 있다면 Base64 변환은 불필요하다!하지만 JSON 기반 전송이 필요한 경우 Base64 변환이 필요할 수 있다.


✅ 결론

📌 Base64는 단순한 바이너리 → 텍스트 변환 방식으로, 이미지 데이터 자체를 해석하는 것은 아니다.
📌 멀티모달 LLM을 활용하면 Base64 데이터를 디코딩 후 정확한 이미지 분석이 가능하다.
📌 JSON 기반 데이터 전송이 필요하면 Base64를 사용하지만, 가능하면 API를 통해 PNG/JPG를 직접 전달하는 것이 효율적이다.
📌 따라서, LLM이 Base64를 직접 이해하는 것이 아니라, 이를 멀티모달 LLM과 함께 활용해야 한다! 🚀

 

Vector Database & Tools 비교 분석

더보기

Vector Database & Tools 비교 분석

1. 기본 벡터 데이터베이스

도구호스팅특징장점단점적합 사례
FAISS 로컬/자체 메타데이터 별도 관리 필요, 다양한 인덱스 타입 빠른 검색 속도, 커스터마이징 자유도 메타데이터 관리 복잡, 확장성 제한 로컬 개발, 프로토타입
Pinecone 클라우드 실시간 업데이트, 메타데이터 필터링 확장성, 관리 용이성 비용 발생, 차원 고정 프로덕션 환경
Chroma 로컬/자체 멀티모달 지원, 풍부한 메타데이터 쉬운 설정, 빠른 구현 대규모 확장 제한 소규모 프로젝트
Supabase 하이브리드 PostgreSQL 기반, pgvector 활용 관계형 DB 통합, SQL 활용 성능 제한, 복잡한 설정 기존 Postgres 활용 시

2. RAG 프레임워크

도구주요 기능특징장점단점적합 사례
LlamaIndex 문서 처리, 인덱싱, 쿼리 멀티모달 지원, 다양한 인덱스 쉬운 구현, 풍부한 기능 리소스 사용량 높음 복잡한 문서 처리
Langchain 체인 기반 처리 모듈화된 컴포넌트 유연성, 확장성 학습 곡선 높음 커스텀 파이프라인

3. 하이브리드 접근 방식

조합구성장점단점적합 사례
FAISS + PostgreSQL 벡터 + 관계형 강력한 쿼리, 데이터 일관성 구현 복잡도 복잡한 메타데이터
Pinecone + MongoDB 벡터 + 문서형 확장성, 유연성 비용, 관리 부담 대규모 프로덕션
Chroma + Neo4j 벡터 + 그래프 관계 표현력 복잡한 아키텍처 복잡한 관계 분석