OpenDataLoaderConverter

OpenDataLoaderConverter

OpenDataLoader PDF를 사용해 PDF 파일을 Haystack 문서로 변환하는 컴포넌트예요. 레이아웃을 인식하는 로컬 PDF 파서로, 마크다운·텍스트·HTML·JSON을 추출해요.

출처: 문서

본문

OpenDataLoaderConverter는 PDF 파일 경로나 ByteStream 객체 목록을 받아 OpenDataLoader PDF로 처리해요. 모든 것이 로컬에서 처리되고 외부 API 호출은 없어요.

OpenDataLoader는 PDF의 레이아웃(제목, 문단, 목록, 표)을 분석해서 output_format으로 고른 형식으로 직렬화해요.

  • "markdown"(기본값): 제목·목록·표가 있는 구조적 마크다운
  • "text": 평문 텍스트
  • "html": HTML 마크업
  • "json": 레이아웃 정보를 포함한 전체 구조 표현

이 컴포넌트는 소스 하나당 Document 하나를 돌려줘요. 각 문서 메타데이터에는 소스의 file_path와 내용을 만든 output_format, 그리고 meta 실행 변수로 넘긴 메타데이터가 담겨요. ByteStream 소스에서는 스트림의 메타데이터도 함께 보존돼요.

PDF만 지원해요. 다른 확장자의 파일이나 MIME 타입이 application/pdf가 아닌 ByteStream을 넘기면 ValueError가 발생해요.

info: OpenDataLoader PDF는 Java 엔진 위에서 돌아가므로 Java 11 이상이 설치되어 있고 java가 PATH에 있어야 해요. 컴포넌트는 실행 시 이를 확인하고, 쓸 만한 Java 런타임이 없으면 RuntimeError를 던져요.

이미지 추출은 기본적으로 꺼져 있어서 문서에 텍스트만 담겨요. 다시 켜려면 convert_kwargs로 image_output(필요하면 image_format, image_dir)을 넘기세요. 허용되는 값은 OpenDataLoader convert options에서 확인하세요.

더 알아보기 (Learn more)

OpenDataLoader PDF 통합을 설치해요.

pip install opendataloader-pdf-haystack

단독으로 쓰기

from haystack_integrations.components.converters.opendataloader_pdf import (
    OpenDataLoaderConverter,
)


converter = OpenDataLoaderConverter()
result = converter.run(sources=["report.pdf", "invoice.pdf"])
documents = result["documents"]

파이프라인에서 쓰기

from haystack import Pipeline
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore


document_store = InMemoryDocumentStore()

pipeline = Pipeline()
pipeline.add_component("converter", OpenDataLoaderConverter())
pipeline.add_component(
    "splitter", DocumentSplitter(split_by="sentence", split_length=5)
)
pipeline.add_component("writer", DocumentWriter(document_store=document_store))

pipeline.connect("converter", "splitter")
pipeline.connect("splitter", "writer")

pipeline.run({"converter": {"sources": ["report.pdf"]}})

추가 기능

출력 형식 고르기

output_format을 설정해서 결과 문서의 내용이 어떻게 보일지 정해요.

converter = OpenDataLoaderConverter(output_format="json")

추출 설정

OpenDataLoader PDF 옵션을 convert_kwargs로 넘길 수 있어요. 예를 들어 암호화된 PDF의 페이지 범위를 변환하고, 마크다운 출력에 페이지 구분자를 유지하며, 민감 데이터를 마스킹하려면:

converter = OpenDataLoaderConverter(
    output_format="markdown",
    convert_kwargs={
        "pages": "1,3,5-7",
        "password": "secret",
        "markdown_page_separator": "--- page %page-number% ---",
        "sanitize": True,
    },
)

자주 쓰는 다른 옵션으로는 표가 많은 PDF용 table_method="cluster", 태그된 PDF의 구조 트리를 따르는 use_struct_tree=True, 페이지 머리말·꼬리말을 유지하는 include_header_footer=True가 있어요.

ByteStream 변환

Fetcher나 파일 저장소에서 온 소스는 메타데이터와 함께 ByteStream 객체로 넘길 수 있어요.

from pathlib import Path

from haystack.dataclasses import ByteStream


stream = ByteStream.from_file_path(
    Path("report.pdf"), mime_type="application/pdf", meta={"file_path": "report.pdf"}
)

converter = OpenDataLoaderConverter()
result = converter.run(sources=[stream], meta={"source": "internal-reports"})