Community연구 & 데이터 분석github.com

MinorBaek/wiki-ingest-book

사용자가 과학 위키에 책이나 책의 장(챕터)를 등록(ingest)하도록 요청할 때 사용합니다. 다음 명령어로 트리거됩니다: "/wiki-ingest-book [제목]" (책 개요), "/wiki-ingest-book [제목] > Chapter N" (장 수준 등록), 또는 "책을 위키에 추가", "이 교과서를 등록", "[책]의 N장 추가"와 같은 요청.

wiki-ingest-book란 무엇인가요?

이 스킬은 학술 서적을 LLM 기반 위키에 구조화된 방식으로 등록(ingest)하기 위한 전문 에이전트 도구입니다. 책은 문맥이 방대하여 한 번에 처리하기 어렵기 때문에, **2단계 접근법**을 사용합니다. 먼저 Mode A에서 책의 개요(메타데이터, 목차, 주요 주제)를 생성하고, 이후 Mode B에서 개별 장(chapter)을 요청 시 등록합니다. 이 스킬은 책 노트, 장 노트를 생성하고, 발견된 개념과 방법을 기존 개념 및 방법 노트에 전파하며, 인덱스와 로그를 업데이트합니다. Claude Code, Cursor, Codex 등 파일 시스템 접근이 가능한 모든 AI 에이전트 플랫폼에서 사용할 수 있으며, 로컬 PDF 파일을 최우선으로 활용하여 전체 텍스트를 추출합니다. 특히 PDF 페이지 번호와 책 페이지 번호 간의 오프셋을 보정하는 기능, 위키 스키마 및 템플릿 준수, 여러 장에 걸친 일관된 인용 관리 등 학술 서적 등록의 복잡한 문제를 해결합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MinorBaek/science-wiki-kit/tree/HEAD/skills/wiki-ingest-book

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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: 프론트매터)가 가장 흔한 책 등록 드리프트를 잡아냅니다.

필수 계약 (모든 등록 후 유지되어야 함)

  1. 모든 장 노트 books/{book}_ChNN.md는 프론트매터에 book: "[[{book_basename}]]"를 반드시 포함해야 하며, 대상은 존재하는 책 노트로 확인되어야 합니다. 작성 후 확인하십시오. 누락된 경우 wiki-lint 검사 9가 표시합니다.
  2. 모든 장 등록은 장 번호를 상위 책 노트의 chapters_ingested: 목록에 추가해야 합니다. 추가 후 {book}_Ch*.md를 나열하고 두 집합이 일치하는지 확인하십시오. 그렇지 않으면 wiki-lint 검사 8이 드리프트를 표시합니다.
  3. 초기 상태는 wiki-ingest 상태 표를 따릅니다: stub (정의만 있음), draft (진행 중), 장 노트는 2개 이상의 출처가 있는 발견으로 final에 도달합니다 (장 자체가 출처). 파생된 개념 및 방법 노트는 엄격한 승격 규칙을 따릅니다: final은 N개의 고유 출처 저작물이 필요하며(min_distinct_sources_for_final, 기본 2), 따라서 이 책 하나만으로 구축된 개념은 두 번째 독립 출처가 확인할 때까지 draft로 유지됩니다.
  4. 인덱스 라우팅은 field_titlecase_map을 사용하여 새 개념과 방법을 올바른 제목 대문자 필드 하위 섹션에 배치하며, 날짜가 있는 catch-all 블록에 배치하지 않습니다.

서문 (Mode A 또는 Mode B 전에 항상)

  1. WIKI_SCHEMA.md를 읽습니다.
  2. 템플릿을 읽습니다: 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에 전달하면 잘못된 페이지를 추출하며, 이는 장 등록에서 가장 일반적인 시간 낭비입니다. 각 책에 대해 한 번, 장을 추출하기 전에 보정하십시오:

  1. 알려진 책 시작 페이지가 있는 장을 선택하십시오. pdf_start = book_page + offset_guess를 추정하십시오 (앞부분은 종종 20~60페이지).
  2. 첫 페이지만 추출하여 장 제목이 나타나는지 확인하십시오. 올바를 때까지 최대 5페이지씩 조정하십시오.
  3. 보정된 오프셋을 책 노트에 기록하십시오 (예: > [!note] PDF 오프셋: book_pg + N = pdf_pg (구역: Part X)를 목차 근처에). 나중 장이 재사용할 수 있도록.
  4. 긴 책의 경우 구역 또는 부분별로 다시 보정하십시오: 단일 고정 오프셋은 드리프트됩니다 (예: 한 교과서에서 Ch 3에서 +36, Ch 21에서 +56). 텍스트 레이어 PDF의 경우, 용지 공급에서 텍스트를 분할하면 정확한 시작 페이지가 있는 빠른 페이지 맵이 제공됩니다.

Mode A: 책 개요

트리거: /wiki-ingest-book [제목]

  1. 참고 관리자에서 확인: 제목으로 검색한 후 메타데이터(제목, 저자, 편집자, 연도, 출판사, ISBN, 판, DOI, 인용키)를 가져옵니다.
    • 연도 접미사 인용키 주의 (다권 또는 시리즈의 Part): Better BibTeX 인용키(예: ...2019a / ...2019b)는 동일 저자, 동일 연도 시리즈의 Part 1 대 Part 2를 안정적으로 매핑하지 않습니다 (접미사는 의미가 아닌 중복 해소 순서입니다). 노트 이름을 지정하거나 어떤 권을 가지고 있는지 신뢰하기 전에 메타데이터에서 실제 제목(및 부제 또는 "Part N")을 항상 확인하십시오.
  2. 목차를 위한 전체 텍스트 확인 (계단식, "로컬 PDF 확인" 참조):
    • 기본: pdftotext -enc UTF-8 -f 1 -l 20 "<local_path>" - (약 3~8k 토큰).
    • 대체 1: 참고 관리자의 전체 텍스트, 로컬 PDF를 사용할 수 없고 출력이 2,000단어 미만인 경우에만.
    • 대체 2: 사용자에게 목차를 붙여넣도록 요청하고, "출처: 사용자 제공"으로 표시하십시오.
    • 대체 3: 잘 알려진 교과서의 경우 모델 지식, 모든 항목을 [!note]로 표시하십시오.
  3. 파일명 결정: FirstAuthor_Year_Keyword.md (첫 번째 저자의 성, ASCII만, 키워드는 책의 주요 주제에 대한 1~3단어). books/{filename}.md가 이미 존재하면 제자리에서 업데이트하십시오.
  4. templates/book.md에서 books/{filename}.md에 책 노트를 생성 또는 업데이트하십시오. last_verified를 오늘 날짜로 설정하십시오.
  5. 2단계의 목차를 채우십시오. 불확실한 경우 장을 ?로 표시하고 한계점을 기록하십시오.
  6. 3~5개의 상위 수준 주제를 추출하십시오 (책 수준만, 장별 주장 없음). 경량 전파: 주제가 연구 라인의 핵심이고 2개 이상의 위키 논문이 이미 언급한 경우에만 concepts/ 노트를 업데이트하십시오. 그렇지 않으면 책 노트에 나열하십시오. 노트에 도달하는 주제는 증거 테이블 규칙(Mode B 단계 6b 및 8b)을 따릅니다.
  7. 거버넌스 확인: wiki-ingest 단계 5의 연구 라인 매칭 및 개념 대 방법 라우팅을 적용하십시오. 개요 수준에서는 어떤 장이 방법 노트를 생성할지, 어떤 장이 개념 노트를 생성할지만 기록하십시오. 전체 전파는 Mode B에서 발생합니다.
  8. index.md: 인덱스가 Bases 뷰를 포함하는 경우, 책 항목을 추가하지 마십시오. 새 상위 책 등록이 완료될 때만 ## Quick Stats "Books (ingested)" 개수를 증가시키십시오. manual 모드에서는 항목을 추가하십시오. 고정된 레거시 인덱스는 절대 건드리지 마십시오.
  9. log.md에 추가: ## [YYYY-MM-DD] ingest-book | {Title}: overview.
  10. 보고: 책 노트 경로, 식별된 주제, 심층 등록에 사용 가능한 장 (/wiki-ingest-book [제목] > Chapter N).

Mode B: 장 등록

트리거: /wiki-ingest-book [제목] > Chapter N (또는 > Chapter: [장 제목])

  1. books/FirstAuthor_Year_Keyword.md의 기존 책 노트를 읽습니다.

    • 존재하지 않는 경우: 중단하십시오. 먼저 Mode A를 실행한 후 다시 시도하십시오.
    • 장이 목차에 나열되지 않은 경우: status: pending 행을 추가하고, 최종 보고서에 기록한 후 계속하십시오.
    • 장이 이미 ingested로 표시된 경우: 덮어쓰기 전에 사용자와 확인하십시오 (기본값: 제자리 업데이트, 기존 [[wikilinks]] 유지).
  2. 장 내용 확인 (계단식, "로컬 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] 포함. 개념 또는 방법 노트에 절대 도달하지 않으며 봉인도 얻지 못합니다.
  3. 장 파일명: FirstAuthor_Year_Keyword_ChNN.md (예: Knuttgen_1987_Strength_Ch03.md).

  4. 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로 재정의하십시오. 측정 품질은 프론트매터가 아닌 발견 인라인에 유지됩니다.
  5. 38개의 개념과 14개의 방법 추출: wiki-ingest와 동일한 추출 규칙 (references/BOOK-INGEST-WORKFLOW.md 참조).

  6. 거버넌스 확인: wiki-ingest 단계 5와 동일한 연구 라인 매칭 및 개념 대 방법 라우팅. 이 장에 대해 명시적으로 결정하십시오: 개념 노트(경험적 발견), 방법 노트(프레임워크, 프로토콜), 또는 둘 다. 일반적인 교육 내용은 일반적으로 방법 노트만 생성합니다. methods/에 속하는 내용에 대해 개념 생성을 강제하지 마십시오. 6b. 증거 테이블 및 확인, 전파 전: wiki-ingest 단계 5b 및 5c를 이 장에 적용하고, 장에 대한 임시 테이블을 사용하십시오. 책에 대한 세 가지 추가 사항:

    • 페이지 열은 PDF 페이지와 인쇄 페이지 모두를 제공하며, 장 제목은 도달한 페이지에서 확인됩니다 (잘못된 오프셋은 다른 장을 인용함).
    • 교과서는 엄격한 읽기를 적용합니다: 발견이 명명하는 모든 메커니즘과 마커를 확인하십시오. 원인 또는 기준 목록은 각 항목이 페이지에 있는 증거가 아닙니다.
    • 말하는 사람을 명시하십시오: 장이 다른 저자에게 넘긴 주장은 "X, [[장]]에서 보고된 바와 같이"라고 쓰여지며, 장의 임상 의견은 시험 결과로 쓰여지지 않습니다. 통과하는 행만 7단계와 8단계로 이동합니다. 렌더링된 페이지에서 신호를 읽으십시오.
  7. 개념 노트로 전파, 논문 등록과 동일: [[chapter_note]] 역링크와 함께 발견을 기존 concepts/{Concept}.md에 추가하거나, wiki-ingest/references/CONCEPT-PROPAGATION.md와 동일한 생성 규칙에 따라 templates/concept.md에서 새로 생성하십시오.

  8. 해당하는 경우 방법 노트로 전파하십시오. 8b. 장 노트 봉인: wiki-ingest 단계 8b를 장을 작업으로 하여 적용하십시오 (확인을 source_verification에 기록: 라이브러리 키, ISBN, 확인된 장 및 페이지, 날짜).

  9. 전방 참조 스텁 (자동): 장 본문이 작성된 후, 아직 존재하지 않는 형제 장에 대한 전방 참조를 구체화하십시오:

    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개의 오래된 마커를 생성했으며, 모든 종속성이 이미 등록되었습니다. 이 클래스를 보는 린트 검사는 없습니다. 각 파일은 자체적으로 일관성을 유지하고 모순은 파일 간에만 존재하기 때문입니다. 형제를 링크하기만 하십시오. 작업이 위키 외부에 있는 경우 일반 텍스트로 이름을 지정하십시오.

  10. 누락된 개념 보고서 (자동): 등록 후 스크립트는

  11. 책 노트 업데이트:

    • 목차에서 장의 상태를 pending에서 ingested로 전환하십시오.
    • chapters_ingested: 목록에 장 번호를 추가하십시오 (계약 2). 그런 다음 {book}_Ch*.md를 나열하고 일치하는지 확인하십시오. 동기화되지 않은 경우 사용자에게 수동 개입을 요청하십시오 (wiki-lint가 감지하지만 지연될 수 있음).
    • (선택 사항) 책 전체에 걸친 교차 참조를 위해 책 노트의 관련 섹션을 업데이트하십시오.
  12. index.md: manual 모드에서만 ## Books 아래에 장 항목을 추가하십시오. embed 모드에서는 Bases 보기가 자동으로 처리합니다. 절대 ## Ingested 아래에 장 항목을 추가하지 마십시오 (책만 해당).

  13. log.md에 추가: ## [YYYY-MM-DD] ingest-book | {Title} > Chapter {N}: {ChapterTitle}.

  14. 보고: 장 노트 경로, 생성/업데이트된 개념/방법 노트 수, 누락된 전방 참조 (수동 등록 필요), 경고 (예: 부분적 목차, 모델 지식 사용).


추가 지침

  • 대화 흐름: Mode B는 일반적으로 장당 하나의 상호 작용입니다. 사용자가 여러 장을 요청하는 경우 각각에 대해 Mode B를 개별적으로 실행하십시오. 일괄 처리는 지원되지 않습니다.
  • 오류 처리: PDF 추출 실패, 메타데이터 누락, 또는 모순되는 정보가 있는 경우 명확히 하고 진행하기 전에 사용자 지침을 기다리십시오.
  • 감사: 이 워크플로우로 생성된 모든 노트는 wiki-lint와 호환되며, 모든 필수 계약을 준수합니다. wiki-lint를 정기적으로 실행하여 드리프트를 조기에 포착하십시오.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

관련 스킬