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
Donut은 OCR 없이 문서를 직접 분석하는 최신 문서 이해 AI 모델입니다.
기존 OCR 방식과 달리, 이미지-텍스트 변환 없이 바로 문서의 내용을 파악할 수 있습니다.
✅ 주요 특징
- OCR을 사용하지 않고 문서 이미지에서 바로 텍스트 및 레이아웃 분석
- 파라미터가 적어 가벼우며, OCR 대비 속도 및 정확도 향상
- 영수증, 논문, 계약서 등의 다양한 문서 분석 가능
- Hugging Face transformers 라이브러리와 호환됨
🚀 활용 분야
- 자동 데이터 입력: 인보이스, 영수증 처리
- 문서 검색 최적화: 기업 문서 관리 시스템
- 전자 문서 분석: 계약서 및 공공 문서 해석
📌 OCR 없이 문서를 처리하는 새로운 방식으로, 빠르고 정밀한 문서 분석이 필요한 환경에 적합합니다.
2️⃣ MinerU: Multi-Modal Document Understanding
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 | 벡터 + 그래프 | 관계 표현력 | 복잡한 아키텍처 | 복잡한 관계 분석 |
'생물.컴퓨터.통계' 카테고리의 다른 글
클로드가 답하다: 800K SFT 샘플의 크기는 도대체 얼마만한 크기인가? (0) | 2025.02.15 |
---|---|
🔥 최신 RAG 모델 비교! 어떤 방식이 가장 효율적일까? (0) | 2025.02.11 |
RAG기반 LLM의 사용자 경험 (1) | 2025.01.13 |
AI의 의학도전 (20)-데이터의 연금술: AI는 어떻게 고품질 합성데이터를 만들어내는가 (0) | 2025.01.06 |
눈에 띄는 AI 에이전트 시리즈: BabyAGI, PrivateGPT, GPT Researcher (0) | 2025.01.04 |