C.W.K.
Stream
Lesson 03 of 04 · published

Referenced vs Captured

~12 min · referenced, captured, corpus-classes, conversion

Level 0불 꺼진 심지
0 XP0/33 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"어떨 땐 디스크의 파일이 곧 글이야. 어떨 땐 글이 파일 안에 갇혀 있어서, 먼저 꺼내줘야 해."

ground truth 두 종류

모든 소스가 동등하진 않아. 마크다운 에세이는 그 파일이야 — 디스크의 바이트가 정확히 글이야. 근데 PDF, Word 문서, HTML 태그에 묻힌 웹페이지는 달라: 글이 파일 안에 있고, 깔끔하게 색인하기 전에 벗겨내야 하는 포맷에 싸여 있어. Lantern 은 이 갈림을 두 코퍼스 클래스로 이름 붙여: referencedcaptured.

Referenced: 파일이 곧 문서

referenced 코퍼스는 바이트가 ground truth 인 텍스트 파일을 가리켜. 마크다운, 일반 텍스트 — 읽고, chunk 하고, 색인하고, 끝. doc_sha256 은 파일 자체의 해시야. 파일을 잃으면, 잃은 거야. Lantern 은 그걸 보존한다고 주장한 적 없고, 색인만 한다고 했어. 원본이 권위 있고 제자리에 남아. 이게 단순하고 흔한 경우야.

Captured: 변환이 곧 문서

captured 코퍼스는 adapter — 소스를 깨끗한 텍스트로 바꾸는 변환기 — 를 선언해. PDF 나 DOCX 는 문서-to-마크다운 변환기를 거치고, HTML 오염 콘텐츠는 태그를 벗기는 prose 추출기를 거쳐. 변환된 텍스트가 chunk 되고 색인되는 것이고 — 결정적으로 — 스냅샷 저장소에 보존돼. 여기선 doc_sha256스냅샷의 해시고(그래서 offset 이 변환된 텍스트를 가리켜), 별도의 source_sha256 이 원본 바이트를 기록해서 엔진이 안 바뀐 소스를 다시 변환 안 하고 건너뛸 수 있어.

복구에서 이 갈림이 왜 중요한가. referenced 파일을 잃으면 그 인덱스 행도 같이 죽어 — 공평해, 애초에 Lantern 이 지킬 게 아니었어. 근데 captured 소스를 잃으면, 변환된 텍스트가 스냅샷 저장소에 살아남아. capture 는 보존이고, reference 는 그냥 색인이야. 코퍼스마다 옳은 클래스를 고르는 건 뭘 지키겠다고 약속하는지 고르는 거야.

같은 인덱스, 다른 진실

하류에선 두 클래스가 똑같아 보여: 둘 다 chunk 를 만들고, 둘 다 검색되고, 둘 다 같은 provenance 모양의 인용 가능한 결과를 돌려줘. 오직 뭐가 ground truth 로 카운트되는지 만 달라 — 파일이냐, 변환의 스냅샷이냐. 그 한 결정이, 사라진 소스가 내용을 무덤까지 가져갈지 보존된 복사본을 남길지 정해.

Code

Captured 재색인 = 변환, 스냅샷, 색인 (안 바뀐 소스는 건너뜀)·python
def reindex_captured(corpus) -> dict:
    stats = {"skipped": 0, "converted": 0}
    for src in discover(corpus.roots, corpus.include_globs):
        source_sha = sha256(read_bytes(src))

        if source_sha == last_source_sha(corpus.id, src):
            stats["skipped"] += 1              # unchanged source — no costly convert
            continue

        text = corpus.adapter.convert(src)     # PDF/DOCX/HTML -> clean markdown/prose
        snap_sha = snapshot_store.append(text) # append-only, content-addressed
        # doc_sha256 == snap_sha: offsets refer to the CONVERTED text
        index_document(corpus.id, src, doc_sha=snap_sha,
                       source_sha=source_sha, text=text)
        stats["converted"] += 1
    return stats
# Referenced corpora skip the convert+snapshot steps — the file IS the text.

External links

Exercise

네 소스를 두 더미로 나눠. 더미 A: 그냥 색인해도 괜찮은 텍스트 파일 — 하나 사라져도 어쩔 수 없는. 더미 B: PDF, export 된 문서, 웹페이지 — 내용이 포맷에 갇혀 있고 소스가 사라질 수도 있는 것들. 더미 A 는 referenced, 더미 B 는 captured 야. 더미 B 각 항목마다, 깨끗한 텍스트로 바꾸려면 어떤 변환기가 필요할지 적어.
Hint
더미 B 의 신호는: '이 파일을 잃으면, 정확한 텍스트를 다시 만들 수 있어?' 답이 아니오 라면 — PDF 나 바뀔 수 있는 웹사이트에 잠겨서 — reference 만으론 안 되고 capture 가 필요해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.