MarkdownToDocument
MarkdownToDocument
Markdown 파일을 문서로 변환해주는 컴포넌트예요. 인덱싱 파이프라인 시작 부분이나 PreProcessor 앞에 두면 돼요.
본문
개요
MarkdownToDocument 컴포넌트는 Markdown 파일을 문서로 변환해요. 인덱싱 파이프라인에서 Markdown 파일의 내용을 Document Store로 인덱싱하는 데 쓸 수 있어요. 파일 경로 목록이나 ByteStream 객체를 입력으로 받고, 변환 결과를 문서 목록으로 출력해요. 선택적으로 meta 입력 파라미터를 통해 문서에 메타데이터를 붙일 수 있어요.
컴포넌트를 초기화할 때 progress_bar를 False로 설정하면 진행 막대를 끌 수 있어요. 테이블 내용을 한 줄로 변환하고 싶다면 table_to_single_line 파라미터로 활성화할 수 있어요.
Markdown 파일이 YAML frontmatter로 시작한다면 extract_frontmatter=True로 설정해서 그 데이터를 Document.meta로 옮기고 변환된 문서 내용에서는 제거할 수 있어요. meta 입력으로 전달한 메타데이터가 frontmatter 키보다 우선해요.
사용법
MarkdownToDocument 컴포넌트를 쓰려면 markdown-it-py와 mdit_plain 패키지를 설치해야 해요.
pip install markdown-it-py mdit_plain
단독 사용:
from haystack.components.converters import MarkdownToDocument
converter = MarkdownToDocument()
docs = converter.run(sources=[Path("my_file.md")])
YAML frontmatter와 함께:
equity_note.md가 있다고 할게요.
---
ticker: AAPL
source: earnings_call
date: 2026-06-12
---
# Thesis
Revenue guidance improved.
from haystack.components.converters import MarkdownToDocument
converter = MarkdownToDocument(extract_frontmatter=True)
docs = converter.run(sources=["equity_note.md"])["documents"]
print(docs[0].meta["ticker"])
print(docs[0].content)
파이프라인 안에서:
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.converters import MarkdownToDocument
from haystack.components.preprocessors import DocumentCleaner
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter
document_store = InMemoryDocumentStore()
pipeline = Pipeline()
pipeline.add_component("converter", MarkdownToDocument())
pipeline.add_component("cleaner", DocumentCleaner())
pipeline.add_component(
"splitter",
DocumentSplitter(split_by="sentence", split_length=5),
)
pipeline.add_component("writer", DocumentWriter(document_store=document_store))
pipeline.connect("converter", "cleaner")
pipeline.connect("cleaner", "splitter")
pipeline.connect("splitter", "writer")
pipeline.run({"converter": {"sources": file_names}})