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

jeffnewberry/cite-viewer

사용자가 "cite viewer" 또는 "build the viewer"라고 말할 때 실행됩니다. 초안의 각 인용이 출처에서 인용된 구절을 열어주는 로컬 클릭스루 페이지로, 필요시 기록에 대한 링크도 제공합니다.

cite-viewer란 무엇인가요?

Cite viewer는 법률 문서 초안의 모든 인용을 검증하고 시각적으로 표시하는 로컬 웹 페이지입니다. 각 인용은 상태별로 색상이 지정된 링크로 표시되며, 클릭하면 해당 출처의 인용된 페이지가 강조 표시된 텍스트, 문장 지지 여부, 전체 출처 링크, 그리고 사용자가 수정 사항을 기록할 수 있는 메모 상자가 포함된 패널이 열립니다. 이 도구는 KeyCite나 Shepard's와 같은 전통적인 인용 확인 도구를 대체하지 않지만, 인용 확인 과정을 획기적으로 가속화하고 각 인용이 실제로 주장을 뒷받침하는지 체계적으로 기록합니다. Westlaw에서 PDF를 자동으로 다운로드하거나 사용자가 제공한 PDF를 처리하며, 기록 인용(record cites)의 경우 사용자 컴퓨터의 원본 파일에 상대 경로로 링크합니다. Claude Code, Cursor, Cline, Windsurf, Codex 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있도록 설계되었으며, Python 스크립트를 사용하여 PDF에서 인용된 구절을 추출하고 HTML 뷰어 페이지를 생성합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jeffnewberry/litigation-skills/tree/HEAD/skills/cite-viewer

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

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

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

문서

Cite viewer

Cite viewer는 사용자의 초안(또는 그중 한 섹션)을 보여주는 로컬 웹 페이지입니다. 모든 인용은 링크로, 상태에 따라 색상이 밑줄로 표시됩니다. 인용을 클릭하면 출처의 인용된 페이지가 표시되며, 인용되거나 의존된 표현이 강조되고, 해당 구절이 문장을 뒷받침하는지에 대한 메모, 해당 페이지에서 전체 출처를 여는 링크, 그리고 사용자가 수정 사항을 입력할 수 있는 메모 상자가 나타납니다.

이 뷰어는 사례(cases)를 읽는 것을 대체하지 않으며, 인용 확인 도구(KeyCite 또는 Shepard's)를 대체하지 않습니다. 대신 독서를 빠르게 만들고 각 구절이 그것을 인용하는 문장을 뒷받침하는지 기록합니다.

절대 변하지 않는 두 가지 규칙

  • 뷰어를 게시하거나 어디에도 호스팅하지 마십시오. 뷰어에는 사용자의 초안이 포함되어 있으며, 기록 링크를 통해 기록 자료를 가리킵니다. 사용자가 더블클릭하여 여는 파일로 사용자 컴퓨터에 남아 있습니다. 공유 가능한 링크로 만들겠다고 제안하지 마십시오. 사용자가 그래도 게시를 요청하면 먼저 고객 기밀 유지에 대해 경고하십시오.
  • 초안을 절대 변경하지 마십시오. 뷰어는 문제를 보고할 뿐 수정하지 않습니다. 사용자가 별도로 요청할 때만 초안을 변경하십시오.

사용 시기

이 도구는 텍스트가 확정되고 인용이 이미 인용 확인(cite-check)과 인용 확인 도구(citator)를 거친 최종 교정 전 단계의 초안에 가장 적합합니다. 사용자가 그 이전에 요청하면 한 줄로 설명한 후, 그래도 원한다면 빌드하십시오.

시작하기 전에

사용자가 이미 말하지 않은 것만 한 짧은 블록으로 물어보십시오:

  1. 어떤 초안인지. 파일을 첨부하거나 파일 이름을 말하도록 요청하십시오.
  2. 범위: 전체 문서 또는 특정 섹션. 초안이 짧은 경우에도 물어보십시오. 범위를 스스로 결정하지 마십시오.
  3. 출처: "사례를 Westlaw에서 가져올까요, 아니면 PDF를 직접 폴더에 넣으시겠습니까?" (Westlaw 사용자: 3단계 참조. Lexis 또는 기타 사용자: 3a단계 참조.)
  4. 기록 인용: "기록 인용도 연결할까요? 그렇다면 기록이 있는 컴퓨터의 폴더는 어디이며, 어떻게 인용하나요? 초안에서 인용 예시 하나를 알려주세요(예: 12 R.R. 41, ROA.1234, Dkt. 52 at 3, 또는 JA 123)." 모든 폴더(Dropbox, OneDrive, 일반 폴더)가 작동합니다. 뷰어는 파일이 있는 위치에 링크를 걸고 아무것도 복사하지 않기 때문입니다. 사용자가 아니오라고 말하면 기록 인용은 "Source not loaded"로 표시됩니다.

뷰어를 요청하는 것은 뷰어 폴더를 저장하고, 3단계의 비용 경고 후 출처를 가져오는 허가입니다.

단계

1. 인용 테이블 구축

초안을 텍스트로 변환합니다. 범위를 순서대로 훑으며 모든 인용을 나열합니다: 전체 인용, 약식 인용, id., supra, 법령, 2차 자료, 기록 인용. 각각에 대해 다음을 기록합니다:

  • id(c1, c2 등)와 인용문 그대로;
  • 해석된 권위(id. 및 약식 인용을 전체 권위로 해석);
  • 핀사이트(pincite) 또는 핀사이트들;
  • 문장이 뒷받침하는 명제와 인용된 언어;
  • 인용이 출처의 특정 자료(판시사항, 기준, 인용문)에 의존하는지 아니면 사례 전체를 언급하는지(6단계 참조).

범위 내에서 인용이 없는 법적 진술을 기록합니다. 페이지에서 이들도 표시합니다.

초안에 전체 인용 없이 약식 인용이나 supra가 사용된 경우, 조용히 추측하지 마십시오. 인용을 제공하고 "일반 지식, 확인되지 않음"이라고 표시하거나 생략하고 플래그를 지정하십시오.

2. 출처 목록 구축

권위당 하나의 항목: reporter 인용("466 U.S. 668"), 미판결 의견의 WL 인용, 법령의 법전 및 섹션, 기사의 "권 약어 첫 페이지". 항목을 세미콜론으로 구분하여 최대 100개까지 포함합니다. 기록 인용 및 Westlaw에 없는 것은 제외하고 보고서에 나열하십시오.

3. Westlaw에서 출처 가져오기(Find & Print)

  • 아무것도 가져오기 전에, 사용자에게 Find & Print 요청이 Westlaw 요금제에 따라 청구될 수 있음을 한 번 알리고 사용자가 확인한 후에만 진행하십시오.
  • 브라우저에서 Westlaw를 열고 사용자에게 평소 방식(회사 로그인, 로스쿨 포털, Thomson Reuters ID)으로 로그인하도록 요청하십시오. 연 페이지가 평소 사용하는 페이지가 아니라면, 같은 브라우저 창에서 평소 로그인 페이지로 이동할 수 있다고 알리십시오. 비밀번호를 입력하지 마십시오. 사용자가 로그인하면 나머지를 수행하십시오.
  • Find & Print로 이동하여 목록을 붙여넣으십시오.
  • 설정: 사례 → 의견만(헤드노트 없음); 법령 → 법령 텍스트만; "Substitute with reporter images"는 선택 해제(별표 페이지가 텍스트여야 함); Delivery → Download; Format → PDF; As → Multiple files (ZIP); 이중 컬럼 레이아웃을 끄십시오.
  • 제출하십시오. Westlaw가 일부 인용을 거부하면 제외하고 계속 진행한 후 보고하십시오.
  • 다운로드가 준비되면 Westlaw의 Download 버튼을 클릭하십시오. 브라우저가 자체 저장 창을 표시하며, 이 창은 조작할 수 없습니다. 사용자에게 다운로드가 진행 중이라고 알리고 해당 창에서 Save(또는 Download)를 클릭하도록 요청하십시오. ZIP 파일은 사용자의 Downloads 폴더에 저장됩니다.

3a. 사용자가 제공하는 출처

사용자에게 권위당 하나의 PDF를 폴더에 넣고 어떤 폴더인지 알려달라고 요청하십시오. 텍스트 PDF만 가능합니다. PDF가 텍스트가 없는 스캔본인 경우 텍스트 버전을 요청하십시오.

4. PDF 가져오기

다운로드가 저장된 폴더(또는 3a의 폴더)에 대한 접근 권한을 요청하십시오. 다운로드 폴더 밖의 작업 폴더에 압축을 풉니다. 각 PDF를 해당 권위와 일치시키고, 반환되지 않은 것은 플래그를 지정하십시오.

5. 인용된 구절 추출

Westlaw PDF는 텍스트에 별표 페이지를 표시합니다: 기본 reporter의 경우 *688, 병행 reporter의 경우 **2055 및 ***, WL 인용의 경우 *1, *2. 병행 마커를 제거하고 단일 별표 마커를 기준으로 텍스트를 분할한 후, 각 핀사이트 페이지의 텍스트와 이전 페이지의 마지막 수백 문자를 함께 가져와 이전 페이지에서 시작하는 문장이 완전히 읽히도록 합니다. "전체 출처 열기" 링크(#page=N)를 위해 각 마커가 나타나는 PDF 페이지를 찾습니다. 페이지 헤더와 푸터를 제거합니다. 이 파일 끝에 있는 스크립트를 사용하십시오. 핀이 별표 페이지가 아닌 경우(법률 리뷰 페이지, 법령 하위 섹션 또는 다른 서비스의 PDF), 인용되거나 의존된 언어를 검색하여 구절을 찾으십시오.

5a. 기록 인용(사용자가 선택한 경우에만)

  • 사용자의 예시 인용을 바탕으로 인용의 어느 부분이 파일 이름(권, 문서 번호 또는 부록)을 나타내고 어느 숫자가 페이지(인쇄된 증언 페이지, ROA.1234와 같은 날인된 기록 페이지, 법원의 헤더 페이지 또는 부록 페이지)를 나타내는지 파악하십시오. 기록은 하나의 파일이거나 여러 파일일 수 있습니다.
  • 사용자 폴더의 기록 파일을 나열하고 각 인용을 해당 파일과 일치시키십시오(예: "Vol. 39" 또는 "RR39"를 39 R.R.; "ECF 52"를 Dkt. 52; ROA 인용의 경우 하나의 연속적으로 날인된 기록). 일치가 불확실한 경우 사용자에게 매핑을 보여주고 진행하기 전에 물어보십시오.
  • 인용된 페이지만 읽으십시오. 인용이 사용하는 번호로 각 인용된 페이지를 찾되, 페이지 자체에 표시된 대로 찾고 PDF 페이지 수로 찾지 마십시오(둘이 거의 일치하지 않음). 페이지에 두 개의 번호(법원 헤더 페이지와 문서 자체 페이지)가 있고 사용자의 예시가 어느 인용을 의미하는지 결정하지 못한 경우 물어보십시오. 번호를 찾을 수 없으면 인용을 "check"로 표시하고 그렇게 말하십시오.
  • 각 기록 인용에 대해 두 번호(인용이 사용하는 페이지 번호와 해당하는 PDF 페이지)를 기록하십시오.
  • 각 기록 인용을 사용자 컴퓨터의 뷰어 HTML 파일에서 기록 파일로의 상대 링크와 함께 PDF 페이지에 연결하십시오. 예를 들어, 뷰어 폴더와 기록이 모두 Downloads 폴더에 있는 경우: ../volume.pdf#page=N. 사용자 컴퓨터의 실제 경로(폴더 목록에 표시된 대로)로 링크를 만들고, 자신의 작업 공간 경로로 만들지 마십시오. 전체 file:/// 주소는 사용하지 마십시오(브라우저가 종종 거부함). 뷰어 폴더에 아무것도 복사하지 마십시오.
  • 기록은 사용자 컴퓨터에 텍스트 검색 가능한 PDF여야 합니다. 온라인에만 저장된 파일(다운로드되지 않은 클라우드 파일 또는 웹사이트를 통해 접근하는 문서 보관소)은 링크할 수 없습니다. 사용자에게 해당 파일을 알리십시오.

6. 각 인용 확인

각 구절을 뒷받침하는 문장과 비교하여 읽으십시오. 하나의 상태를 할당하십시오:

  • ok — Supported(지원됨). 구절이 문장과 일치합니다. 모든 인용이 정확히 일치하거나, 대괄호가 모든 변경 사항을 설명합니다. ok는 발췌문 없이, 인용이 특정 구절에 의존하지 않고 문장의 일부로 사례 전체를 명명하는 텍스트 문장(Bluebook R. 3.2(a))에만 사용하십시오. 명제를 뒷받침하는 인용문이나 절은 여러 사례를 동시에 인용하더라도 항상 특정 자료에 의존하며 핀이 필요합니다. 전체 사례 인용의 메모는 "사례 전체를 명명함; 핀 불필요(Bluebook R. 3.2(a))"로 표시합니다.
  • check — Check(확인 필요). 인용문이 일치하지 않거나, 구절이 문장의 일부만 뒷받침하거나, 핀이 잘못되었거나, 문장이 출처를 부정확하게 설명합니다. 무엇이 잘못되었는지 정확히 말하고 수정 사항(올바른 핀 또는 대괄호 수정)을 제공하십시오.
  • pin — No pincite(핀사이트 없음). 특정 자료에 대한 인용이지만 핀이 없습니다. 근처 텍스트가 의존하는 페이지를 표시하십시오. 문장이 특정 자료에 의존하는지 불분명한 경우 check를 사용하고 그렇게 말하여 사용자가 결정하도록 하십시오.
  • none — Source not loaded(출처가 로드되지 않음). PDF나 기록 폴더에 없는 모든 것. 사용자가 추가해야 할 항목을 명명하십시오.

메모는 출처가 말하는 것만 말합니다. 그 이상의 내용은 "추론(Inference):" 앞에 붙이십시오. 실질적인 문제(잘못된 인용, 잘못된 핀, 과장되거나 잘못 특징지어진 판시사항, 기록 페이지가 뒷받침하지 않는 사실)에만 플래그를 지정하십시오. 순수한 오타는 무시하십시오. 각 발췌문에서 정확히 의존된 단어를 강조 표시하십시오.

7. 페이지 구축

사용자의 Downloads 폴더(또는 사용자가 요청한 곳)에 폴더를 저장하십시오. 폴더 이름은 초안 이름과 "cite-viewer" 및 날짜를 포함합니다. 다음을 포함합니다:

  • HTML 파일;
  • sources/ 폴더(사례 PDF 포함). (기록 파일은 원래 위치에 그대로 둡니다.)

페이지 규칙:

  • 초안은 왼쪽, 구절 패널은 오른쪽에 표시됩니다. 좁은 화면에서는 세로로 쌓입니다.
  • 상단에 각 상태의 개수와 "빨간 점선 텍스트 = 인용 없는 법적 진술" 범례가 표시됩니다.
  • 초안 텍스트를 있는 그대로 표시합니다.
  • 구절은 연한 파란색으로 강조 표시합니다. 왼쪽 정렬 텍스트, 세리프 글꼴.
  • 라이트 모드와 다크 모드 모두에서 작동합니다.
  • 인용을 클릭하면 상태 배지, 인용문 그대로, 메모, 페이지 헤더와 "전체 출처 열기 ↗" 링크가 있는 각 발췌문, 그리고 메모 상자가 표시됩니다.
  • 모든 발췌문 헤더는 두 번호 체계로 페이지를 명명하여 사용자가 파일을 열지 않고도 페이지를 확인할 수 있도록 합니다: 사례의 경우 "466 U.S. at 694 · PDF page 7"; 기록의 경우 "12 R.R. 45 · PDF page 10."
  • 인용되지 않은 법적 진술도 클릭 가능합니다. 클릭하면 "인용 없음(No citation)" 배지, 진술 그대로, 한 줄 메노(예: "법적 규칙을 명시함; 인용을 추가하거나 삭제하십시오"), 그리고 메모 상자가 표시됩니다.

메모 상자. 모든 플래그 패널(인용 및 인용되지 않은 진술 모두) 아래에 "메모(예: 원하는 수정 사항)" 레이블이 있는 텍스트 상자가 있습니다. 메모는 이 파일에 대해 브라우저에 자동으로 저장됩니다. 모든 저장 및 로드는 try/catch로 감싸서 브라우저가 저장을 차단해도 페이지가 작동하도록 하십시오. 메모가 있는 플래그는 초안에 작은 점이 표시됩니다. 상단의 "모든 메모 복사" 버튼은 모든 메모를 초안 순서대로 번호가 매겨진 목록으로 복사하며, 각 줄은 인용문 그대로(또는 "인용 없음(Uncited):" 및 진술의 첫 단어)로 시작하므로 사용자가 목록을 Claude에 붙여넣거나 Word 옆에 보관할 수 있습니다. 사용자에게 메모는 해당 브라우저의 해당 컴퓨터에만 저장된다고 한 번 알리십시오. 복사된 목록이 안전한 복사본입니다.

8. 페이지 확인

페이지를 열고 각 상태의 인용문과 인용되지 않은 진문을 하나 이상 클릭하십시오. 발췌문이 강조 표시된 언어와 두 페이지 번호를 보여주고, 메모가 패널 상단에 있으며, 모든 플래그에 메모 상자가 있고, "모든 메모 복사"가 작동하는지 확인하십시오.

기록 링크는 별도 확인이 필요합니다. 사용자 컴퓨터에서 링크를 클릭할 수 없기 때문입니다. 각 기록 링크에 대해 사용자 컴퓨터의 뷰어 HTML 파일에서 링크가 가리키는 위치를 파악하고 해당 폴더를 나열하여 파일이 있는지 확인하십시오. 그런 다음 사용자에게 기록 링크 하나를 클릭하고 올바른 페이지에서 열렸는지 알려달라고 요청하십시오. 사용자가 확인할 때까지 기록 링크가 작동한다고 보고하지 말고 "연결됨, 아직 확인되지 않음"으로 보고하십시오.

9. 보고

짧게, 가장 강력한 점부터 먼저:

  • 폴더 위치 및 뷰어 여는 방법: "Google Chrome에서 뷰어를 여십시오(HTML 파일을 마우스 오른쪽 버튼으로 클릭하고 연결 프로그램 > Google Chrome 선택). 저자는 Mac의 Chrome에서 테스트했으며 작동합니다. Safari는 기록 링크를 차단합니다. 저자는 Texas 스타일 기록 인용(12 R.R. 41)으로 기록 링크를 테스트했지만 다른 형식은 아직 테스트하지 않았습니다. 저자는 Windows PC에서 테스트하지 않았습니다. Chrome은 Windows에서도 작동해야 하며, Microsoft Edge도 가능하지만 시도해보지 않았습니다."
  • 상태별 개수.
  • 각 "check" 항목을 한두 줄로 수정 사항과 함께.
  • 핀사이트 없는 인용, 인용되지 않은 진술, 로드되지 않거나 거부된 출처, 링크할 수 없는 기록 파일.
  • 기록 링크가 확인되었는지 여부(8단계 참조).
  • 작업을 진행하는 두 가지 방법: 각 플래그에 대해 Claude와 논의하여 목록을 유지하고 사용자가 승인한 후 변경 사항을 적용하거나, Word에서 뷰어를 옆에 두고 작업하며 메모 상자에 수정 사항을 입력합니다. "모든 메모 복사"는 사용자만 누를 수 있는 뷰어의 버튼이며, 복사된 목록을 이 채팅에 다시 붙여넣을 수 있다고 알리십시오.

스크립트

star_extract.py: PDF와 별표 페이지 목록이 주어지면 각 페이지의 텍스트, 이전 페이지의 끝 부분, 그리고 각 마커가 나타나는 PDF 페이지를 반환합니다.

import re, subprocess, sys, json

def pdf_pages(pdf):
    info = subprocess.run(['pdfinfo', pdf], capture_output=True, text=True).stdout
    n = int(re.search(r'Pages:\s+(\d+)', info).group(1))
    return [subprocess.run(['pdftotext', '-f', str(i), '-l', str(i), pdf, '-'],
                           capture_output=True, text=True).stdout for i in range(1, n + 1)]

def clean(t):
    t = re.sub(r'WESTLAW\s*©.*?For Educational Use Only[^\n]*\n', '', t, flags=re.S)
    t = re.sub(r'\*\*\*?\d+\s?', '', t)          # 병행 reporter 마커 제거
    t = re.sub(r'-\n(?=[a-z])', '', t)
    return re.sub(r'\s+', ' ', t)

def segments(pages):
    parts = []
    for i, page in enumerate(pages):
        lines = page.split('\n')
        body = clean('\n'.join(lines[3:-3]))  # 헤더/푸터 제거(가정)
        parts.append(body)
    return parts

if __name__ == '__main__':
    pdf_path = sys.argv[1]
    star_pages = sys.argv[2:]
    result = segments(pdf_pages(pdf_path))
    print(json.dumps(result))

관련 스킬