wiki-ingest-book은(는) 무엇을 하나요?
첫 번째 등록 전에, 키트 내
docs/GOTCHAS.md를 읽으십시오 (운영상의 주의사항, 책의 페이지 오프셋 보정 포함).
LLM-위키 등록 패턴을 학술 서적으로 확장합니다. 책은 문맥이 무거워 한 번에 등록할 수 없으므로, 이 스킬은 2단계 접근법을 사용합니다: 먼저 책 개요, 그 다음 장 요청 시 등록.
역할과 경계
수행: 책 노트 생성, 장 노트 생성, 발견 사항을 개념 및 방법 노트로 전파, 인덱스 및 로그 업데이트.
수행하지 않음: 한 번에 전체 책 읽기(문맥 한계 위험), 메타데이터 또는 장 제목 임의 생성, 또는 논문 등록 워크플로우 중복(장은 논문과 동일한 개념 전파 규칙을 따름).
파일 위치
경로는 wiki.config.json에서 가져옵니다 (wiki-ingest 참조). 책과 장은 <wiki_root>/books/에 위치합니다. 템플릿: templates/book.md 및 templates/chapter.md. PDF 라이브러리를 보관하는 폴더는 설정의 pdf_library_dir입니다.
관련 스킬
wiki-ingest: 초기 상태 결정 규칙과 인덱스 라우팅에 사용되는field_titlecase_map을 공유합니다.wiki-lint: 각 장 등록 후 실행합니다. 검사 8(chapters_ingested동기화)과 검사 9(장book:프론트매터)가 가장 흔한 책 등록 드리프트를 잡아냅니다.
필수 계약 (모든 등록 후 유지되어야 함)
- 모든 장 노트
books/{book}_ChNN.md는 프론트매터에book: "[[{book_basename}]]"를 반드시 포함해야 하며, 대상은 존재하는 책 노트로 확인되어야 합니다. 작성 후 확인하십시오. 누락된 경우wiki-lint검사 9가 표시합니다. - 모든 장 등록은 장 번호를 상위 책 노트의
chapters_ingested:목록에 추가해야 합니다. 추가 후{book}_Ch*.md를 나열하고 두 집합이 일치하는지 확인하십시오. 그렇지 않으면wiki-lint검사 8이 드리프트를 표시합니다. - 초기 상태는
wiki-ingest상태 표를 따릅니다:stub(정의만 있음),draft(진행 중), 장 노트는 2개 이상의 출처가 있는 발견으로final에 도달합니다 (장 자체가 출처). 파생된 개념 및 방법 노트는 엄격한 승격 규칙을 따릅니다:final은 N개의 고유 출처 저작물이 필요하며(min_distinct_sources_for_final, 기본 2), 따라서 이 책 하나만으로 구축된 개념은 두 번째 독립 출처가 확인할 때까지draft로 유지됩니다. - 인덱스 라우팅은
field_titlecase_map을 사용하여 새 개념과 방법을 올바른 제목 대문자 필드 하위 섹션에 배치하며, 날짜가 있는 catch-all 블록에 배치하지 않습니다.
서문 (Mode A 또는 Mode B 전에 항상)
WIKI_SCHEMA.md를 읽습니다.- 템플릿을 읽습니다: Mode A는
templates/book.md를 사용합니다. Mode B는templates/chapter.md를 사용합니다 (참조용으로templates/book.md사용).
도구: 모든 볼트 쓰기에는 호스트의 파일 도구(읽기/쓰기/편집)를 사용하십시오.
로컬 PDF 확인 (전체 텍스트에 선호됨)
기본 폴더: 설정의 pdf_library_dir (참고 관리자의 PDF 저장소).
추출기: pdftotext (poppler) 또는, 표 충실도를 높이려면 docling. 항상 pdftotext를 -enc UTF-8과 함께 실행하십시오.
PDF 찾기: 저자를 열거하고 grep을 사용하여 찾으십시오. glob 도구나 find -iname "*<author>*"는 사용하지 마십시오. 둘 다 일부 파일 시스템에 존재하는 파일에 대해 문서화된 거짓 음성이 있습니다: find "<pdf_library_dir>" -iname "*.pdf" | grep -i <first_author_lastname>. 첫 번째 패스가 비어 있으면 루트를 전체 라이브러리로 확장하십시오 (책은 주제별 하위 폴더에도 있음). 정확히 1개 일치: 사용합니다. 0개 또는 1개 초과: 사용자에게 정확한 경로를 물어보십시오. 그래도 실패하면: 참고 관리자의 전체 텍스트로 대체하십시오.
전체 확인 알고리즘, 로컬 우선 전체 텍스트 계단식 및 MCP 결정 테이블, 스캔된 PDF 감지, 비ASCII 파일명 위험은
references/BOOK-INGEST-WORKFLOW.md(섹션 1 및 1bis)에 있습니다. 새 책의 첫 번째 추출 전에 읽으십시오. 아래 본문은 모든 장에 사용되는 명령어만 유지합니다.
추출 명령어
- 목차 / 개요 (Mode A):
pdftotext -enc UTF-8 -f 1 -l 20 "<path>" -(처음 20페이지, stdout). - 장 범위 (Mode B):
pdftotext -enc UTF-8 -f <pdf_start> -l <pdf_end> "<path>" -.-f/-l은 PDF 페이지 번호를 사용하며, 책 페이지 번호가 아닙니다. 목차에서 오프셋을 사용하여 변환하십시오 (다음 섹션). - 추출물을 파일에 써서
Read로 읽기: 긴 장 조각은 stdout보다 파일이 더 쉬울 수 있습니다. 프로젝트 내부에 쓰십시오 (예:_temp/{book}_Ch{NN}.txt). OS별/tmp에 쓰지 마십시오. Read 도구가 열 수 없습니다 (Windows의 Git Bash는/tmp를 Windows 도구가 볼 수 없는 곳에 매핑함).
페이지 오프셋 보정 (책 페이지는 PDF 페이지가 아님)
책의 목차는 책 페이지 번호를 나열합니다. pdftotext -f/-l은 PDF 페이지를 주소 지정합니다. 두 번째는 오프셋(앞부분, 도판)으로 인해 다르며, 이 오프셋은 책 전체에서 (그림, 표, 부분 구분선으로 인해) 비선형적으로 증가합니다. 목차 번호를 그대로 pdftotext에 전달하면 잘못된 페이지를 추출하며, 이는 장 등록에서 가장 일반적인 시간 낭비입니다. 각 책에 대해 한 번, 장을 추출하기 전에 보정하십시오:
- 알려진 책 시작 페이지가 있는 장을 선택하십시오.
pdf_start = book_page + offset_guess를 추정하십시오 (앞부분은 종종 20~60페이지). - 첫 페이지만 추출하여 장 제목이 나타나는지 확인하십시오. 올바를 때까지 최대 5페이지씩 조정하십시오.
- 보정된 오프셋을 책 노트에 기록하십시오 (예:
> [!note] PDF 오프셋: book_pg + N = pdf_pg (구역: Part X)를 목차 근처에). 나중 장이 재사용할 수 있도록. - 긴 책의 경우 구역 또는 부분별로 다시 보정하십시오: 단일 고정 오프셋은 드리프트됩니다 (예: 한 교과서에서 Ch 3에서 +36, Ch 21에서 +56). 텍스트 레이어 PDF의 경우, 용지 공급에서 텍스트를 분할하면 정확한 시작 페이지가 있는 빠른 페이지 맵이 제공됩니다.
Mode A: 책 개요
트리거: /wiki-ingest-book [제목]
- 참고 관리자에서 확인: 제목으로 검색한 후 메타데이터(제목, 저자, 편집자, 연도, 출판사, ISBN, 판, DOI, 인용키)를 가져옵니다.
- 연도 접미사 인용키 주의 (다권 또는 시리즈의 Part): Better BibTeX 인용키(예:
...2019a/...2019b)는 동일 저자, 동일 연도 시리즈의 Part 1 대 Part 2를 안정적으로 매핑하지 않습니다 (접미사는 의미가 아닌 중복 해소 순서입니다). 노트 이름을 지정하거나 어떤 권을 가지고 있는지 신뢰하기 전에 메타데이터에서 실제 제목(및 부제 또는 "Part N")을 항상 확인하십시오.
- 연도 접미사 인용키 주의 (다권 또는 시리즈의 Part): Better BibTeX 인용키(예:
- 목차를 위한 전체 텍스트 확인 (계단식, "로컬 PDF 확인" 참조):
- 기본:
pdftotext -enc UTF-8 -f 1 -l 20 "<local_path>" -(약 3~8k 토큰). - 대체 1: 참고 관리자의 전체 텍스트, 로컬 PDF를 사용할 수 없고 출력이 2,000단어 미만인 경우에만.
- 대체 2: 사용자에게 목차를 붙여넣도록 요청하고, "출처: 사용자 제공"으로 표시하십시오.
- 대체 3: 잘 알려진 교과서의 경우 모델 지식, 모든 항목을
[!note]로 표시하십시오.
- 기본:
- 파일명 결정:
FirstAuthor_Year_Keyword.md(첫 번째 저자의 성, ASCII만, 키워드는 책의 주요 주제에 대한 1~3단어).books/{filename}.md가 이미 존재하면 제자리에서 업데이트하십시오. templates/book.md에서books/{filename}.md에 책 노트를 생성 또는 업데이트하십시오.last_verified를 오늘 날짜로 설정하십시오.- 2단계의 목차를 채우십시오. 불확실한 경우 장을
?로 표시하고 한계점을 기록하십시오. - 3~5개의 상위 수준 주제를 추출하십시오 (책 수준만, 장별 주장 없음). 경량 전파: 주제가 연구 라인의 핵심이고 2개 이상의 위키 논문이 이미 언급한 경우에만
concepts/노트를 업데이트하십시오. 그렇지 않으면 책 노트에 나열하십시오. 노트에 도달하는 주제는 증거 테이블 규칙(Mode B 단계 6b 및 8b)을 따릅니다. - 거버넌스 확인:
wiki-ingest단계 5의 연구 라인 매칭 및 개념 대 방법 라우팅을 적용하십시오. 개요 수준에서는 어떤 장이 방법 노트를 생성할지, 어떤 장이 개념 노트를 생성할지만 기록하십시오. 전체 전파는 Mode B에서 발생합니다. index.md: 인덱스가 Bases 뷰를 포함하는 경우, 책 항목을 추가하지 마십시오. 새 상위 책 등록이 완료될 때만## Quick Stats"Books (ingested)" 개수를 증가시키십시오.manual모드에서는 항목을 추가하십시오. 고정된 레거시 인덱스는 절대 건드리지 마십시오.log.md에 추가:## [YYYY-MM-DD] ingest-book | {Title}: overview.- 보고: 책 노트 경로, 식별된 주제, 심층 등록에 사용 가능한 장 (
/wiki-ingest-book [제목] > Chapter N).
Mode B: 장 등록
트리거: /wiki-ingest-book [제목] > Chapter N (또는 > Chapter: [장 제목])
-
books/FirstAuthor_Year_Keyword.md의 기존 책 노트를 읽습니다.- 존재하지 않는 경우: 중단하십시오. 먼저 Mode A를 실행한 후 다시 시도하십시오.
- 장이 목차에 나열되지 않은 경우:
status: pending행을 추가하고, 최종 보고서에 기록한 후 계속하십시오. - 장이 이미
ingested로 표시된 경우: 덮어쓰기 전에 사용자와 확인하십시오 (기본값: 제자리 업데이트, 기존[[wikilinks]]유지).
-
장 내용 확인 (계단식, "로컬 PDF 확인" 참조):
- 책 노트 목차에서 장 페이지 범위를 가져오고 기록된 오프셋으로 책 페이지를 PDF 페이지로 변환하십시오. 목차 페이지 번호 자체를 알 수 없는 경우에만 사용자에게 물어보십시오.
- 기본:
pdftotext -enc UTF-8 -f <pdf_start> -l <pdf_end> "<local_path>" -(일반 장은 1k~8k 토큰). - 대체 1: 장이 자체 라이브러리 항목이 있는
bookSection항목인 경우, 해당 항목의 전체 텍스트를 사용하십시오. - 대체 2: 참고 관리자의 전체 책 전체 텍스트, 로컬 PDF를 사용할 수 없고 책이 5,000단어 미만인 경우에만.
- 대체 3: 사용자에게 장 텍스트를 붙여넣도록 요청하십시오.
- 대체 4: 모델 지식, 모든 주장에
[!warning]포함. 개념 또는 방법 노트에 절대 도달하지 않으며 봉인도 얻지 못합니다.
-
장 파일명:
FirstAuthor_Year_Keyword_ChNN.md(예:Knuttgen_1987_Strength_Ch03.md). -
templates/chapter.md에서books/{chapter_filename}.md에 장 노트를 생성하십시오.last_verified를 오늘 날짜로 설정하십시오.- 필수 계약: 프론트매터에
book: "[[{parent_book_basename}]]"를 내보내고 확인되도록 하십시오. 확인되지 않으면 상위가 등록되지 않은 것입니다: 먼저 Mode A를 실행하십시오. - 초기 상태:
wiki-ingest상태 표를 적용하십시오. 목차 항목만 채워진 스캐폴드 장은stub입니다. 최소 2개의 출처 발견이 있는 장은final입니다. - 증거 수준: 기본적으로
evidence_level: textbook. 장 자체가 독립적인 체계적 검토 또는 메타 분석인 경우에만SR-MA또는SR로 재정의하십시오. 측정 품질은 프론트매터가 아닌 발견 인라인에 유지됩니다.
- 필수 계약: 프론트매터에
-
3
8개의 개념과 14개의 방법 추출:wiki-ingest와 동일한 추출 규칙 (references/BOOK-INGEST-WORKFLOW.md참조). -
거버넌스 확인:
wiki-ingest단계 5와 동일한 연구 라인 매칭 및 개념 대 방법 라우팅. 이 장에 대해 명시적으로 결정하십시오: 개념 노트(경험적 발견), 방법 노트(프레임워크, 프로토콜), 또는 둘 다. 일반적인 교육 내용은 일반적으로 방법 노트만 생성합니다.methods/에 속하는 내용에 대해 개념 생성을 강제하지 마십시오. 6b. 증거 테이블 및 확인, 전파 전:wiki-ingest단계 5b 및 5c를 이 장에 적용하고, 장에 대한 임시 테이블을 사용하십시오. 책에 대한 세 가지 추가 사항:- 페이지 열은 PDF 페이지와 인쇄 페이지 모두를 제공하며, 장 제목은 도달한 페이지에서 확인됩니다 (잘못된 오프셋은 다른 장을 인용함).
- 교과서는 엄격한 읽기를 적용합니다: 발견이 명명하는 모든 메커니즘과 마커를 확인하십시오. 원인 또는 기준 목록은 각 항목이 페이지에 있는 증거가 아닙니다.
- 말하는 사람을 명시하십시오: 장이 다른 저자에게 넘긴 주장은 "X, [[장]]에서 보고된 바와 같이"라고 쓰여지며, 장의 임상 의견은 시험 결과로 쓰여지지 않습니다. 통과하는 행만 7단계와 8단계로 이동합니다. 렌더링된 페이지에서 신호를 읽으십시오.
-
개념 노트로 전파, 논문 등록과 동일:
[[chapter_note]]역링크와 함께 발견을 기존concepts/{Concept}.md에 추가하거나,wiki-ingest/references/CONCEPT-PROPAGATION.md와 동일한 생성 규칙에 따라templates/concept.md에서 새로 생성하십시오. -
해당하는 경우 방법 노트로 전파하십시오. 8b. 장 노트 봉인:
wiki-ingest단계 8b를 장을 작업으로 하여 적용하십시오 (확인을source_verification에 기록: 라이브러리 키, ISBN, 확인된 장 및 페이지, 날짜). -
전방 참조 스텁 (자동): 장 본문이 작성된 후, 아직 존재하지 않는 형제 장에 대한 전방 참조를 구체화하십시오:
python skills/wiki-ingest-book/scripts/create_forward_ref_stubs.py \ <wiki_root>/books/{book}_Ch{NN}.md <wiki_root>/books/{book}.md [--dry-run]이 스크립트는 방금 등록된 장에서
[[{book}_ChNN]]링크(별칭 인식)를 스캔하고, 책 허브의## Table of Contents테이블을 읽어 각 누락된 장에 대한 제목과 페이지를 복구하고, 허브 프론트매터에서 DOI와 인용키를 파생시킨 후({doi_base}_{N},{citekey_base}_ch{N}),status: stub으로 UTF-8 스텁을 작성합니다. 목차 행이 없는 전방 참조는 건너뛰고 보고됩니다 (수동 등록 필요). 작업은_temp/wiki_ingest_book_stubs_created.md에 기록됩니다.wiki-lint검사 8은status: stub을 인식하므로, 이 스텁은chapters_ingested를 역동기화하지 않으며, 이는 실제로 등록된 장의 표준 목록으로 유지됩니다.⚠️ 장의 산문에 등록 상태 마커를 절대 쓰지 마십시오.
*(pending ingest)*, 형제 장 옆에 "not yet ingested",## Related Papers내, 참조 글머리 기호, 또는 다른 곳에 두지 마십시오. 등록 상태는 변경 가능하며 정확히 하나의 위치가 있습니다: 책 허브의## Table of Contents행이며, 11단계에서pending에서ingested로 전환됩니다. 산문에 복사된 마커는 변경 가능한 사실을 변경 불가능한 장소에 복제합니다: 형제가 등록되고, 목차가 업데이트되며, 산문은 영원히 반대를 주장합니다. 한 감사에서 이것은 58개 노트에 걸쳐 68개의 오래된 마커를 생성했으며, 모든 종속성이 이미 등록되었습니다. 이 클래스를 보는 린트 검사는 없습니다. 각 파일은 자체적으로 일관성을 유지하고 모순은 파일 간에만 존재하기 때문입니다. 형제를 링크하기만 하십시오. 작업이 위키 외부에 있는 경우 일반 텍스트로 이름을 지정하십시오. -
누락된 개념 보고서 (자동): 등록 후 스크립트는
-
책 노트 업데이트:
- 목차에서 장의 상태를
pending에서ingested로 전환하십시오. chapters_ingested:목록에 장 번호를 추가하십시오 (계약 2). 그런 다음{book}_Ch*.md를 나열하고 일치하는지 확인하십시오. 동기화되지 않은 경우 사용자에게 수동 개입을 요청하십시오 (wiki-lint가 감지하지만 지연될 수 있음).- (선택 사항) 책 전체에 걸친 교차 참조를 위해 책 노트의 관련 섹션을 업데이트하십시오.
- 목차에서 장의 상태를
-
index.md:manual모드에서만## Books아래에 장 항목을 추가하십시오.embed모드에서는 Bases 보기가 자동으로 처리합니다. 절대## Ingested아래에 장 항목을 추가하지 마십시오 (책만 해당). -
log.md에 추가:## [YYYY-MM-DD] ingest-book | {Title} > Chapter {N}: {ChapterTitle}. -
보고: 장 노트 경로, 생성/업데이트된 개념/방법 노트 수, 누락된 전방 참조 (수동 등록 필요), 경고 (예: 부분적 목차, 모델 지식 사용).
추가 지침
- 대화 흐름: Mode B는 일반적으로 장당 하나의 상호 작용입니다. 사용자가 여러 장을 요청하는 경우 각각에 대해 Mode B를 개별적으로 실행하십시오. 일괄 처리는 지원되지 않습니다.
- 오류 처리: PDF 추출 실패, 메타데이터 누락, 또는 모순되는 정보가 있는 경우 명확히 하고 진행하기 전에 사용자 지침을 기다리십시오.
- 감사: 이 워크플로우로 생성된 모든 노트는
wiki-lint와 호환되며, 모든 필수 계약을 준수합니다.wiki-lint를 정기적으로 실행하여 드리프트를 조기에 포착하십시오.