DOCX 생성, 편집 및 분석
개요
사용자가 .docx 파일의 생성, 편집 또는 내용 분석을 요청할 수 있습니다. .docx 파일은 기본적으로 XML 파일 및 기타 리소스를 포함하는 ZIP 아카이브로, 읽거나 편집할 수 있습니다. 다양한 작업에 대해 사용할 수 있는 여러 도구와 워크플로우가 있습니다.
워크플로우 의사 결정 트리
읽기/분석
아래의 "텍스트 추출" 또는 "원시 XML 접근" 섹션을 사용하세요.
새 문서 생성
"새 Word 문서 생성" 워크플로우를 사용하세요.
기존 문서 편집
-
자신의 문서 + 간단한 변경 "기본 OOXML 편집" 워크플로우를 사용하세요.
-
다른 사람의 문서 **"변경 내용 추적(Redlining) 워크플로우"**를 사용하세요 (권장 기본값).
-
법률, 학술, 비즈니스 또는 정부 문서 **"변경 내용 추적(Redlining) 워크플로우"**를 사용하세요 (필수).
내용 읽기 및 분석
텍스트 추출
문서의 텍스트 내용만 읽으면 되는 경우, pandoc을 사용하여 문서를 마크다운으로 변환하세요. Pandoc은 문서 구조를 잘 보존하며 변경 내용 추적을 표시할 수 있습니다:
# 변경 내용 추적을 포함하여 문서를 마크다운으로 변환
pandoc --track-changes=all path-to-file.docx -o output.md
# 옵션: --track-changes=accept/reject/all
원시 XML 접근
주석, 복잡한 서식, 문서 구조, 포함된 미디어, 메타데이터에 대해 원시 XML 접근이 필요합니다. 이러한 기능을 사용하려면 문서를 압축 풀고 원시 XML 내용을 읽어야 합니다.
파일 압축 풀기
python ooxml/scripts/unpack.py <office_file> <output_directory>
주요 파일 구조
word/document.xml- 주요 문서 내용word/comments.xml- document.xml에서 참조하는 주석word/media/- 포함된 이미지 및 미디어 파일- 변경 내용 추적은
<w:ins>(삽입) 및<w:del>(삭제) 태그를 사용합니다.
새 Word 문서 생성
처음부터 새 Word 문서를 생성할 때는 docx-js를 사용하세요. JavaScript/TypeScript를 사용하여 Word 문서를 만들 수 있습니다.
워크플로우
- 필수 - 전체 파일 읽기:
docx-js.md(~500줄)를 처음부터 끝까지 완전히 읽으세요. 이 파일을 읽을 때 범위 제한을 절대 설정하지 마십시오. 문서 생성 전에 자세한 구문, 중요한 서식 규칙 및 모범 사례를 위해 전체 파일 내용을 읽으세요. - Document, Paragraph, TextRun 구성 요소를 사용하여 JavaScript/TypeScript 파일을 만듭니다. (모든 종속성이 설치되어 있다고 가정할 수 있지만, 설치되지 않은 경우 아래의 종속성 섹션을 참조하세요.)
- Packer.toBuffer()를 사용하여 .docx로 내보냅니다.
기존 Word 문서 편집
기존 Word 문서를 편집할 때는 Document Library(Python OOXML 조작 라이브러리)를 사용하세요. 이 라이브러리는 자동으로 인프라를 설정하고 문서 조작을 위한 메서드를 제공합니다. 복잡한 시나리오의 경우 라이브러리를 통해 기본 DOM에 직접 접근할 수 있습니다.
워크플로우
- 필수 - 전체 파일 읽기:
ooxml.md(~600줄)를 처음부터 끝까지 완전히 읽으세요. 이 파일을 읽을 때 범위 제한을 절대 설정하지 마십시오. Document Library API 및 문서 파일을 직접 편집하기 위한 XML 패턴에 대해 전체 파일 내용을 읽으세요. - 문서 압축 풀기:
python ooxml/scripts/unpack.py <office_file> <output_directory> - Document Library를 사용하여 Python 스크립트를 만들고 실행합니다. (ooxml.md의 "Document Library" 섹션 참조)
- 최종 문서 압축:
python ooxml/scripts/pack.py <input_directory> <office_file>
Document Library는 일반적인 작업을 위한 고수준 메서드와 복잡한 시나리오를 위한 직접 DOM 접근을 모두 제공합니다.
문서 검토를 위한 변경 내용 추적(Redlining) 워크플로우
이 워크플로우를 사용하면 OOXML로 구현하기 전에 마크다운을 사용하여 포괄적인 변경 내용 추적을 계획할 수 있습니다. 중요: 완전한 변경 내용 추적을 위해서는 모든 변경 사항을 체계적으로 구현해야 합니다.
일괄 처리 전략: 관련 변경 사항을 3-10개의 변경 사항으로 그룹화하세요. 이렇게 하면 디버깅을 관리 가능하게 유지하면서 효율성을 유지할 수 있습니다. 각 배치를 테스트한 후 다음 배치로 이동하세요.
원칙: 최소한의 정확한 편집
변경 내용 추적을 구현할 때는 실제로 변경되는 텍스트만 표시하세요. 변경되지 않은 텍스트를 반복하면 편집 내용을 검토하기 어렵고 전문적이지 않게 보입니다. 바꾸기를 다음으로 나누세요: [변경되지 않은 텍스트] + [삭제] + [삽입] + [변경되지 않은 텍스트]. 변경되지 않은 텍스트에 대해 원래 실행의 RSID를 보존하려면 원본에서 <w:r> 요소를 추출하여 재사용하세요.
예시 - 문장에서 "30일"을 "60일"로 변경:
# 나쁨 - 전체 문장을 바꿈
'<w:del><w:r><w:delText>The term is 30 days.</w:delText></w:r></w:del><w:ins><w:r><w:t>The term is 60 days.</w:t></w:r></w:ins>'
# 좋음 - 변경된 부분만 표시하고 변경되지 않은 텍스트에 대해 원래 <w:r>을 보존
'<w:r w:rsidR="00AB12CD"><w:t>The term is </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> days.</w:t></w:r>'
변경 내용 추적 워크플로우
-
마크다운 표현 얻기: 변경 내용 추적이 보존된 마크다운으로 문서를 변환하세요:
pandoc --track-changes=all path-to-file.docx -o current.md -
변경 사항 식별 및 그룹화: 문서를 검토하고 필요한 모든 변경 사항을 식별하여 논리적 배치로 구성하세요:
위치 찾기 방법 (XML에서 변경 사항 찾기):
- 섹션/제목 번호 (예: "섹션 3.2", "제4조")
- 단락 식별자 (번호가 매겨진 경우)
- 고유한 주변 텍스트가 있는 grep 패턴
- 문서 구조 (예: "첫 번째 단락", "서명 블록")
- 마크다운 줄 번호를 사용하지 마십시오 - XML 구조에 매핑되지 않습니다.
배치 구성 (배치당 3-10개의 관련 변경 사항 그룹화):
- 섹션별: "배치 1: 섹션 2 수정", "배치 2: 섹션 5 업데이트"
- 유형별: "배치 1: 날짜 수정", "배치 2: 당사자 이름 변경"
- 복잡성별: 간단한 텍스트 바꾸기부터 시작하여 복잡한 구조적 변경으로 진행
- 순차적: "배치 1: 1-3페이지", "배치 2: 4-6페이지"
-
문서 읽기 및 압축 풀기:
- 필수 - 전체 파일 읽기:
ooxml.md(~600줄)를 처음부터 끝까지 완전히 읽으세요. 이 파일을 읽을 때 범위 제한을 절대 설정하지 마십시오. "Document Library" 및 "Tracked Change Patterns" 섹션에 특히 주의하세요. - 문서 압축 풀기:
python ooxml/scripts/unpack.py <file.docx> <dir> - 제안된 RSID 확인: 압축 풀기 스크립트는 변경 내용 추적에 사용할 RSID를 제안합니다. 4b단계에서 사용할 이 RSID를 복사하세요.
- 필수 - 전체 파일 읽기:
-
배치별로 변경 사항 구현: 변경 사항을 논리적으로 그룹화하고(섹션별, 유형별, 또는 근접성별) 단일 스크립트로 함께 구현하세요. 이 접근 방식은:
- 디버깅을 더 쉽게 만듭니다(배치가 작을수록 오류 격리가 더 쉬움).
- 점진적 진행을 허용합니다.
- 효율성을 유지합니다(3-10개 변경 사항의 배치 크기가 잘 작동함).
제안된 배치 그룹화:
- 문서 섹션별 (예: "섹션 3 변경", "정의", "종료 조항")
- 변경 유형별 (예: "날짜 변경", "당사자 이름 업데이트", "법적 용어 바꾸기")
- 근접성별 (예: "1-3페이지 변경", "문서 전반부 변경")
각 관련 변경 사항 배치에 대해:
a. 텍스트를 XML에 매핑:
word/document.xml에서 텍스트를 grep하여 텍스트가<w:r>요소에 어떻게 분할되어 있는지 확인하세요.b. 스크립트 생성 및 실행:
get_node를 사용하여 노드를 찾고, 변경 사항을 구현한 다음doc.save()를 사용하세요. 패턴은 ooxml.md의 "Document Library" 섹션을 참조하세요.참고: 스크립트를 작성하기 직전에 항상
word/document.xml을 grep하여 현재 줄 번호를 얻고 텍스트 내용을 확인하세요. 각 스크립트 실행 후 줄 번호가 변경됩니다. -
문서 압축: 모든 배치가 완료되면 압축이 풀린 디렉토리를 .docx로 다시 변환하세요:
python ooxml/scripts/pack.py unpacked reviewed-document.docx -
최종 확인: 전체 문서에 대한 포괄적인 검사를 수행하세요:
- 최종 문서를 마크다운으로 변환:
pandoc --track-changes=all reviewed-document.docx -o verification.md - 모든 변경 사항이 올바르게 적용되었는지 확인:
grep "original phrase" verification.md # 발견되지 않아야 함 grep "replacement phrase" verification.md # 발견되어야 함 - 의도하지 않은 변경 사항이 도입되지 않았는지 확인하세요.
- 최종 문서를 마크다운으로 변환:
문서를 이미지로 변환
Word 문서를 시각적으로 분석하려면 2단계 프로세스를 통해 이미지로 변환하세요:
-
DOCX를 PDF로 변환:
soffice --headless --convert-to pdf document.docx -
PDF 페이지를 JPEG 이미지로 변환:
pdftoppm -jpeg -r 150 document.pdf page이 명령은
page-1.jpg,page-2.jpg등의 파일을 생성합니다.
옵션:
-r 150: 해상도를 150 DPI로 설정합니다 (품질/크기 균형 조정).-jpeg: JPEG 형식 출력 (PNG를 선호하는 경우-png사용).-f N: 변환할 첫 페이지 (예:-f 2는 2페이지부터 시작).-l N: 변환할 마지막 페이지 (예:-l 5는 5페이지에서 중지).page: 출력 파일 접두사.
특정 범위 예시:
pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page # 2-5페이지만 변환
코드 스타일 지침
중요: DOCX 작업을 위한 코드를 생성할 때:
- 간결한 코드를 작성하세요.
- 장황한 변수 이름과 중복 작업을 피하세요.
- 불필요한 print 문을 피하세요.
종속성
필수 종속성 (사용 가능하지 않은 경우 설치):
- pandoc:
sudo apt-get install pandoc(텍스트 추출용) - docx:
npm install -g docx(새 문서 생성용) - LibreOffice:
sudo apt-get install libreoffice(PDF 변환용) - Poppler:
sudo apt-get install poppler-utils(PDF를 이미지로 변환하는 pdftoppm용) - defusedxml:
pip install defusedxml(안전한 XML 구문 분석용)