Skip to content

Examples

dnjsgkfka edited this page Nov 1, 2026 · 3 revisions

예제의 report.pdf를 실제 PDF 파일 경로로 바꾸어 실행하세요. Python 3.10+ 및 Evidence-Chunker v0.1.2 기준입니다.

Extract table evidence

from evidence_chunker import EvidenceChunker

chunker = EvidenceChunker()
units = chunker.chunk("report.pdf", doc_id="report")

for unit in units:
    print("ID:", unit.eu_id)
    print("Page:", unit.page_no)
    print("Caption:", unit.safe_caption)
    print("Before:", unit.context_before)
    print("After:", unit.context_after)
    print("Text:", unit.text[:300])

chunk()는 표 기반 EvidenceUnit만 반환합니다.

Build a complete corpus

from evidence_chunker import EvidenceChunker

corpus = EvidenceChunker().build_corpus("report.pdf")

for chunk in corpus:
    kind = "text" if chunk.is_atomic else "table"
    print(kind, chunk.chunk_id, len(chunk.text))

build_corpus()는 일반 본문을 Docling HybridChunker로 처리합니다. 커스텀 parser를 주입한 경우 지원하지 않습니다.

Compare retrieval text and full context

unit = EvidenceChunker().chunk("report.pdf")[0]

print(unit.retrieval_text)  # HTML 없는 임베딩용 텍스트
print(unit.retrieval_units) # 행·문단별 작은 검색 표현
print(unit.text)            # 표 HTML을 포함한 전체 근거

각 검색 유닛이 일치하면 이를 만든 부모 EvidenceUnit을 LLM 컨텍스트로 전달하는 small-to-big 패턴을 사용할 수 있습니다.

LangChain: small-to-big search

pip install -e '.[langchain]'
pip install langchain-huggingface sentence-transformers
from evidence_chunker import EvidenceChunker
from evidence_chunker.export.langchain import to_langchain_units, EvidenceRetriever
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_huggingface import HuggingFaceEmbeddings

corpus = EvidenceChunker().build_corpus("report.pdf")
search_docs = to_langchain_units(corpus)

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/all-MiniLM-L6-v2"
)
store = InMemoryVectorStore.from_documents(search_docs, embeddings)
retriever = EvidenceRetriever(store, k=5, fetch_k=50)

results = retriever.invoke("What is the reported revenue?")
llm_contexts = [
    doc.metadata.get("parent_text", doc.page_content)
    for doc in results
]
print("\n\n---\n\n".join(llm_contexts))

EvidenceRetriever는 받은 검색 후보 내에서 chunk_id별 중복을 제거합니다. 글로벌 max-pool 결과가 필요하다면 검색 후보 풀 전체에 같은 로직을 적용해야 합니다. 이 예제는 LLM을 호출하지 않습니다.

LlamaIndex: create TextNodes

pip install -e '.[llamaindex]'
from evidence_chunker import EvidenceChunker
from evidence_chunker.export.llamaindex import to_llamaindex_units

corpus = EvidenceChunker().build_corpus("report.pdf")
nodes = to_llamaindex_units(corpus)

for node in nodes[:3]:
    parent_text = node.metadata.get("parent_text", node.text)
    print(node.id_, len(node.text), len(parent_text))

to_llamaindex_units()는 검색용 TextNode를 생성합니다. 실제 인덱스, 임베딩 및 retriever는 사용 중인 LlamaIndex 설정에 맞게 구성해야 합니다.

Inject a custom parser

from evidence_chunker import EvidenceChunker
from evidence_chunker.parser.base import ParsedDoc

class MyParser:
    def parse(self, path: str) -> ParsedDoc:
        # 다른 파서 출력에서 TextBlock/TableBlock 등을 만들어 반환
        raise NotImplementedError("Implement conversion to ParsedDoc")

chunker = EvidenceChunker(parser=MyParser())
# 구현 완료 후: chunker.chunk("report.pdf")

ParsedDoc 변환 시 좌표(TOPLEFT), 셀 인덱스, 표 HTML, 캡션/각주 참조 및 페이지 크기를 포함해야 합니다. 자세한 계약은 API Reference와 parser/base.py를 참고하세요. 위 코드는 어댑터 구현 골격이며 완성된 실행 예제는 아닙니다.

Run tests

pip install -e '.[dev]'
pytest -q

Clone this wiki locally