PaddleOCRVLDocumentConverter
PaddleOCRVLDocumentConverter
PaddleOCRVLDocumentConverter는 PaddleOCR의 대규모 언어 모델 기반 문서 파싱 API를 사용해 문서에서 텍스트를 추출하는 컴포넌트예요. 내부적으로 PaddleOCR-VL을 사용하죠. 자세한 내용은 PaddleOCR-VL 문서를 참고하시면 돼요.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | PreProcessors 앞, 또는 인덱싱 파이프라인의 맨 처음 |
| 필수 init 변수 | api_url: PaddleOCR-VL API의 URL. access_token: AI Studio 액세스 토큰. AISTUDIO_ACCESS_TOKEN 환경 변수로 설정 가능 |
| 필수 run 변수 | sources: 이미지 또는 PDF 파일 경로, 또는 ByteStream 객체 목록 |
| 출력 변수 | documents: 문서 목록. raw_paddleocr_responses: PaddleOCR API의 원본 OCR 응답 목록 |
| API reference | PaddleOCR |
| GitHub 링크 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/paddleocr |
| 패키지 이름 | paddleocr-haystack |
개요
PaddleOCRVLDocumentConverter는 문서 소스 목록을 받아 PaddleOCR의 대규모 모델 문서 파싱 API를 이용해 이미지와 PDF에서 텍스트를 추출해요. 이미지와 PDF 파일을 모두 지원해요.
이 컴포넌트는 소스 하나마다 Haystack Document 하나를 반환하는데, 모든 페이지가 폼 피드 문자(\f)로 구분되어 이어져 있어요. 이 형식 덕분에 Haystack의 DocumentSplitter와 함께 사용했을 때 페이지 단위로 정확하게 나누고 오버랩을 처리할 수 있죠. 콘텐츠는 마크다운 형식으로 반환되며, 이미지는  태그로 표현돼요.
이 컴포넌트는 필수 파라미터로 api_url을 받아요. API URL을 얻으려면 PaddleOCR 공식 사이트를 방문해 API 버튼을 클릭하고, PaddleOCR-VL용 예제 코드를 선택한 뒤 API_URL을 복사하면 돼요.
기본적으로 컴포넌트는 인증에 AISTUDIO_ACCESS_TOKEN 환경 변수를 사용해요. 초기화 시 access_token을 직접 전달할 수도 있고요. AI Studio 액세스 토큰은 이 페이지에서 얻을 수 있어요.
raw_paddleocr_responses는 레이아웃 임계값, 프롬프트 설정, 마크다운 후처리 옵션을 튜닝할 때 유용해요. 변환된 Haystack 문서와 함께 원본 API 출력을 볼 수 있으니까, 원하는 추출 결과를 만드는 데 큰 도움이 되죠.
참고: 이 컴포넌트는 마크다운 콘텐츠를 반환해요. 기본 설정의
DocumentCleaner()에 그대로 연결하는 것은 피하세요.remove_extra_whitespaces=True와remove_empty_lines=True가 줄바꿈을 압축하고 제목·테이블·이미지 태그를 평평하게 만들 수 있거든요. 페이지 단위 청킹이 필요하면 컨버터를DocumentSplitter에 바로 연결하고, 커스텀 정리가 필요하다면 그 옵션들을 꺼 주세요.
언제 사용하면 좋을까요
PaddleOCRVLDocumentConverter는 단순 OCR 텍스트 이상이 필요할 때 특히 잘 맞아요.
- 스캔 PDF와 카메라로 촬영한 문서 — 페이지 방향이 틀어지거나 텍스트가 휘어져 추출 품질이 떨어질 수 있는 경우에요.
- 레이아웃에 민감한 문서 — 인보이스, 리포트, 폼, 다단 PDF처럼 구조를 보존해야 다운스트림 청킹과 검색이 잘 되는 경우예요.
- 테이블·수식·차트·도장 — 일반 텍스트 OCR보다 더 목표 지향적인 추출이 필요할 때요.
- RAG 수집(ingestion) 파이프라인 — 마크다운 출력이 제목·목록·테이블·페이지 나눔을 보존해 나중에 분할하기 좋은 경우예요.
유용한 설정 영역
전체 파라미터 목록은 API reference에서 확인할 수 있어요. 실무에서 유용한 옵션들은 대략 이런 그룹으로 나뉘죠.
- 입력 처리와 이미지 정리:
file_type,use_doc_orientation_classify,use_doc_unwarping— PDF와 이미지를 섞어 쓰거나, 삐뚤어진 스캔·모바일 사진을 다룰 때 도움이 돼요. - 레이아웃 인지 추출:
use_layout_detection,layout_threshold,layout_nms,layout_unclip_ratio,layout_merge_bboxes_mode,layout_shape_mode,merge_layout_blocks— 마크다운 생성 전에 영역을 어떻게 감지·병합할지 튜닝해요. - 콘텐츠 집중:
prompt_label,use_ocr_for_image_block,use_chart_recognition,use_seal_recognition— 일반 OCR, 수식, 테이블, 차트, 도장처럼 특정 콘텐츠 유형으로 추출을 편향시켜요. - 마크다운 출력成形:
format_block_content,markdown_ignore_labels,prettify_markdown,show_formula_number,restructure_pages,merge_tables,relevel_titles— 최종 리절트가 Haystack 문서가 되기 전에 얼마나 정리·재구성할지 제어해요. - VLM 생성 제어:
repetition_penalty,temperature,top_p,min_pixels,max_pixels,max_new_tokens,vlm_extra_args,additional_params— 출력 품질·결정성·비용 사이 트레이드오프가 필요할 때 유용해요. - 디버깅과 검사:
visualize=True와 반환되는raw_paddleocr_responses— 새 문서 유형에 대한 추출 품질을 튜닝할 때 도움이 돼요.
전형적인 시나리오
몇 가지 흔한 워크플로에서 특히 유용한 설정들이 있어요.
- 폰으로 찍은 스캔 계약서·영수증:
use_doc_orientation_classify=True와use_doc_unwarping=True로 시작하세요. - 테이블이 많은 금융·운영 PDF:
use_layout_detection=True,merge_tables=True,restructure_pages=True를 고려해요. - 수식이 많은 문서:
prompt_label="formula"와 함께show_formula_number=True를 사용하세요. 최종 마크다운에서 수식 번호가 중요하다면요. - 그림이나 도장이 있는 복합 업무 문서: 보존하고 싶은 콘텐츠에 따라
use_chart_recognition=True,use_seal_recognition=True, 또는use_ocr_for_image_block=True를 켜요.
사용법
PaddleOCRVLDocumentConverter를 사용하려면 paddleocr-haystack 통합 패키지를 설치해야 해요:
pip install paddleocr-haystack
단독으로 사용하기
로컬 파일을 처리하는 기본 사용법이에요:
from pathlib import Path
from haystack.utils import Secret
from haystack_integrations.components.converters.paddleocr import (
PaddleOCRVLDocumentConverter,
)
converter = PaddleOCRVLDocumentConverter(
api_url="<your-api-url>",
access_token=Secret.from_env_var("AISTUDIO_ACCESS_TOKEN"),
)
result = converter.run(sources=[Path("my_document.pdf")])
documents = result["documents"]
구조가 복잡한 PDF를 위한 고급 설정이에요:
from pathlib import Path
from haystack.utils import Secret
from haystack_integrations.components.converters.paddleocr import (
PaddleOCRVLDocumentConverter,
)
converter = PaddleOCRVLDocumentConverter(
api_url="<your-api-url>",
access_token=Secret.from_env_var("AISTUDIO_ACCESS_TOKEN"),
use_doc_orientation_classify=True,
use_doc_unwarping=True,
use_layout_detection=True,
use_ocr_for_image_block=True,
merge_tables=True,
restructure_pages=True,
prettify_markdown=True,
)
result = converter.run(sources=[Path("quarterly_report.pdf")])
documents = result["documents"]
raw_responses = result["raw_paddleocr_responses"]
파이프라인에서 사용하기
OCR로 PDF를 처리해 Document Store에 쓰는 인덱싱 파이프라인 예시예요:
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
from haystack.utils import Secret
from haystack_integrations.components.converters.paddleocr import (
PaddleOCRVLDocumentConverter,
)
document_store = InMemoryDocumentStore()
pipeline = Pipeline()
pipeline.add_component(
"converter",
PaddleOCRVLDocumentConverter(
api_url="<your-api-url>",
access_token=Secret.from_env_var("AISTUDIO_ACCESS_TOKEN"),
),
)
pipeline.add_component("splitter", DocumentSplitter(split_by="page", split_length=1))
pipeline.add_component("writer", DocumentWriter(document_store=document_store))
pipeline.connect("converter", "splitter")
pipeline.connect("splitter", "writer")
file_paths = ["invoice.pdf", "receipt.jpg", "contract.pdf"]
pipeline.run({"converter": {"sources": file_paths}})