-
Notifications
You must be signed in to change notification settings - Fork 1
API Reference
dnjsgkfka edited this page Aug 18, 2026
·
3 revisions
evidence_chunker.EvidenceChunker — PDF → Evidence Unit 파이프라인의 메인 진입점.
EvidenceChunker(
parser: PdfParser | None = None,
artifacts_path: str | None = None,
bbox_threshold: float = 300.0,
sim_threshold: float = 0.0,
)| 파라미터 | 타입 | 설명 |
|---|---|---|
parser |
PdfParser | None |
parse(path) -> ParsedDoc 구현체. None이면 기본 DoclingParser 사용. 주입 시 chunk()만 교체 가능(build_corpus()는 미지원) |
artifacts_path |
str | None |
Docling 로컬 모델 경로. parser 직접 주입 시 무시됨 |
bbox_threshold |
float |
표 위/아래 단락 수집 범위(pt). 기본 300.0 |
sim_threshold |
float |
문맥 단락 채택 코사인 유사도 임계값. 기본 0.0(사실상 무필터, 임베딩 모델 미로드) |
| 메서드 | 반환 타입 | 설명 |
|---|---|---|
chunk(pdf_path, doc_id=None) |
list[EvidenceUnit] |
PDF에서 표(Evidence Unit)만 추출. 512토큰 초과 EU는 행 단위로 분할된 상태로 반환 |
build_corpus(pdf_path, doc_id=None) |
list[RetrievalChunk] |
표(EU) + 일반 본문(TextChunk)을 합친 검색 코퍼스. 커스텀 parser 주입 시 NotImplementedError
|
evidence_chunker.EvidenceUnit — 표 하나를 표현하는 검색 단위 dataclass.
| 필드 | 타입 | 설명 |
|---|---|---|
eu_id |
str |
"{doc_id}-p{page}-{idx}" 형식 식별자. 분할 조각은 f"{eu_id}-s{n}"
|
page_no |
int |
표 자신의 페이지 |
page_span |
set[int] |
표+채택된 문맥 단락이 걸친 모든 페이지 |
caption_text |
str | None |
연결된 캡션 원문 |
caption_confidence |
"direct" | "inferred" | "none" |
캡션 연결 신뢰도 |
table_html |
str | None |
표 HTML (Docling export_to_html() 결과) |
context_before / context_after
|
list[str] |
표 위/아래 채택된 설명 단락 |
flattened_rows |
list[str] |
셀 데이터를 "행헤더 | 열헤더: 값" 문장으로 변환한 목록 |
table_abstract |
str | None |
규칙 기반 표 요약(캡션+열헤더+행 수) |
bbox |
tuple[float, float, float, float] |
0~1 정규화 BOTTOMLEFT 좌표 |
is_split / split_index / total_splits
|
bool / int | None / int | None
|
분할 여부와 조각 정보 |
| Property | 반환 타입 | 설명 |
|---|---|---|
text |
str |
LLM 컨텍스트용 전체 텍스트. table_html 포함 |
retrieval_text |
str |
임베딩/검색용. table_html 제외 (대신 flattened_rows 사용) |
retrieval_units |
list[str] |
표 요약 + 문단/행/각주를 개별 단위로 쪼갠 목록 (small-to-big 패턴용) |
chunk_id |
str |
eu_id와 동일. export.RetrievalChunk 프로토콜 구현 |
is_atomic |
bool |
항상 False (retrieval_units로 쪼갤 수 있는 대상이라는 뜻) |
metadata |
dict |
LangChain/LlamaIndex 문서 메타데이터 (chunk_id, eu_id, page_span, caption_text 등) |
safe_caption |
str | None |
캡션이 Fig/Figure/그림으로 시작하면 None (그림 캡션이 표 캡션으로 오인된 경우 방어) |
| 상황 | 쓸 것 |
|---|---|
| 벡터스토어에 임베딩할 때 |
retrieval_text (HTML 노이즈 없음, 토큰 절약) |
| 검색된 EU를 LLM 컨텍스트로 넘길 때 |
text (표 구조를 HTML로 보존) |
to_langchain()은 기본으로 page_content=eu.text를 사용한다.
편의를 위한 기본값이며, 검색 정확도를 최대화하려면 벡터스토어 구성 시 page_content=eu.retrieval_text로 직접 바꿔 사용하는 것을 권장한다.
| 함수/클래스 | 시그니처 | 설명 |
|---|---|---|
to_langchain |
(chunks: list[RetrievalChunk]) -> list[Document] |
1 chunk = 1 Document. page_content=c.text
|
to_langchain_units |
(chunks: list[RetrievalChunk]) -> list[Document] |
small-to-big. is_atomic=False인 chunk만 retrieval_units 단위로 쪼갬 |
dedupe_by_chunk_id |
(results, k=None, key="chunk_id") -> list |
정렬된 검색 결과에서 같은 chunk_id끼리 첫 등장(=최고 점수)만 남김 |
EvidenceRetriever |
(vectorstore, k=5, fetch_k=None, dedupe=True) |
max-pool dedupe가 기본 적용된 검색 래퍼. get_relevant_documents(query) / invoke(query) 제공 |
EvidenceRetriever는 vectorstore.similarity_search_with_score(query, k=fetch_k)를 지원하는 LangChain VectorStore가 필요하다. fetch_k 기본값은 max(k*4, 20).
export.langchain과 동일한 함수 구성(to_llamaindex, to_llamaindex_units, dedupe_by_chunk_id, EvidenceRetriever)을 LlamaIndex TextNode/retriever 기준으로 제공한다. EvidenceRetriever(base_retriever, k=5, dedupe=True)는 .retrieve(query)를 제공하는 LlamaIndex retriever를 감싼다.
| 함수/클래스 | 설명 |
|---|---|
RetrievalChunk (Protocol) |
chunk_id/is_atomic/text/retrieval_text/retrieval_units/metadata 속성 계약. EvidenceUnit과 TextChunk 둘 다 만족 |
TextChunk |
Docling HybridChunker가 만든 일반 본문 청크를 RetrievalChunk 프로토콜로 감싼 래퍼. is_atomic=True
|
filter_consumed_paragraphs(chunks, eu_list, min_substring_len=20) |
EU가 이미 흡수한 문단과 겹치는 일반 청크 제거 (카니발라이제이션 방지) |
| 함수 | 시그니처 | 설명 |
|---|---|---|
split_eu |
(eu, limit=SPLIT_LIMIT) -> SplitResult |
EU 하나를 토큰 한도에 맞춰 분할. 전략: single / row_split / llm_summary
|
split_oversized_units |
(eu_list, stats=None) -> list[EvidenceUnit] |
한도 초과 EU 전체를 일괄 분할 |
| 함수 | 설명 |
|---|---|
count_tokens(text) |
tiktoken(cl100k_base) 기준 토큰 수 |
count_eu_tokens(eu) |
eu.text 기준 토큰 수 |
exceeds_token_limit(eu, limit=DEFAULT_TOKEN_LIMIT) |
한도 초과 여부 |
DEFAULT_TOKEN_LIMIT |
512 |