Repository navigation
Examples
dnjsgkfka edited this page Nov 1, 2026
·
3 revisions
예제의 report.pdf를 실제 PDF 파일 경로로 바꾸어 실행하세요. Python 3.10+ 및 Evidence-Chunker v0.1.2 기준입니다.
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만 반환합니다.
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를 주입한 경우 지원하지 않습니다.
unit = EvidenceChunker().chunk("report.pdf")[0]
print(unit.retrieval_text) # HTML 없는 임베딩용 텍스트
print(unit.retrieval_units) # 행·문단별 작은 검색 표현
print(unit.text) # 표 HTML을 포함한 전체 근거각 검색 유닛이 일치하면 이를 만든 부모 EvidenceUnit을 LLM 컨텍스트로 전달하는 small-to-big 패턴을 사용할 수 있습니다.
pip install -e '.[langchain]'
pip install langchain-huggingface sentence-transformersfrom 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을 호출하지 않습니다.
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 설정에 맞게 구성해야 합니다.
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를 참고하세요. 위 코드는 어댑터 구현 골격이며 완성된 실행 예제는 아닙니다.
pip install -e '.[dev]'
pytest -q