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"})