AI 활용

AI가 고친 문서, 숫자는 왜 따로 확인해야 할까

오픈시드 2026. 10. 13. 20:04
반응형

Python difflib로 원본과 수정본의 바뀐 줄을 비교하는 실습

AI 원고 변경점, 숫자부터 비교하세요. 두 문서의 숫자 12와 21을 대비한 표지
원본을 보존하고 바뀐 숫자부터 대조하는 문서 비교 실습

문장이 매끄러워져도 바뀐 숫자의 근거까지 확인된 것은 아닙니다. 원본과 수정본을 따로 저장한 뒤, 바뀐 줄부터 찾아 원본 자료와 대조하세요. Python의 difflib를 쓰면 변경 줄과 앞뒤 문맥을 함께 볼 수 있습니다.

준비물은 Python 3과 UTF-8 텍스트 파일 두 개입니다. 추가 패키지나 AI 계정은 필요 없습니다. 아래는 가상 문서로 직접 실행한 예시이며, 실제 AI 서비스의 수정 결과는 아닙니다.

실습 결과는 이렇게 나옵니다.

--- before.txt
+++ after.txt
@@ -1,4 +1,4 @@
 제안서 초안
-사용자 조사: 12명
-담당자: 미정
+사용자 조사: 21명
+담당자: 김 담당(가상)
 출시 목표: 11월

1. 원본을 남기고 파일 두 개를 만듭니다

새 폴더에서 일반 텍스트 편집기로 아래 파일을 만드세요. 인코딩은 UTF-8을 선택하고, 원본은 덮어쓰지 않습니다.

before.txt

제안서 초안
사용자 조사: 12명
담당자: 미정
출시 목표: 11월

after.txt

제안서 초안
사용자 조사: 21명
담당자: 김 담당(가상)
출시 목표: 11월

처음에는 이 가상 문서로 연습하세요. 아래 코드는 파일을 읽어 화면에 출력할 뿐, 외부로 전송하거나 원본을 수정하지 않습니다.

2. 같은 폴더에 비교 코드를 저장합니다

파일 이름은 compare.py입니다. compare.py.txt가 되지 않도록 확인하세요.

from pathlib import Path
from difflib import unified_diff

folder = Path(__file__).resolve().parent
before = (folder / "before.txt").read_text(encoding="utf-8-sig")
after = (folder / "after.txt").read_text(encoding="utf-8-sig")

changes = list(unified_diff(
    before.splitlines(), after.splitlines(),
    fromfile="before.txt", tofile="after.txt",
    n=1, lineterm="",
))
print("\n".join(changes) if changes else "차이 없음(줄 내용 기준)")

그 폴더에서 터미널을 열고 실행합니다.

python compare.py

환경에 따라 python3 compare.py를 사용하세요.

  • FileNotFoundError: 세 파일의 위치와 이름을 확인합니다.
  • UnicodeDecodeError: 텍스트 파일 두 개를 UTF-8로 다시 저장합니다.

3. 마이너스는 원본, 플러스는 수정본입니다

조사 인원은 12명 → 21명, 담당자는 미정 → 김 담당(가상)으로 바뀌었습니다. 출시 목표는 그대로입니다. 비교 결과는 변경 위치를 알려줄 뿐입니다. 21명이 맞는지는 조사 자료에서, 담당자가 정해졌는지는 실제 결정 내용에서 확인해야 합니다.

출력의 첫 두 줄은 파일 이름, @@는 비교 범위입니다. 본문에서 -는 원본 줄, +는 수정본 줄이며, 공백으로 시작하는 줄은 바뀌지 않은 문맥입니다.

n=1은 앞뒤 문맥을 한 줄씩 보여줍니다. 문맥 없이 변경 줄만 보려면 n=0으로 바꾸세요. 파일 이름과 비교 범위 표시는 남습니다. 공식 unified_diff 설명

Python 공식 문서의 마이너스와 플러스 변경 줄 출력 예시
Python 3.13 공식 문서의 출력 예시. 위 한국어 실습과는 별개입니다.

출처·0BSD 이용조건

4. ‘차이 없음’에도 제외되는 항목이 있습니다

차이 없음(줄 내용 기준)은 파일이 바이트 단위로 같다는 뜻이 아닙니다.

  • 비교에서 제외: 파일 시작의 UTF-8 BOM, CRLF·LF 줄바꿈 형식, 마지막 줄의 끝 개행 유무
  • 차이로 표시: 띄어쓰기 변경, 빈 줄 추가, 파일 안에 실제로 넣은 줄바꿈
  • 비교 대상 아님: 화면 폭 때문에 보이는 자동 줄바꿈, Word·HWP·PDF 파일 자체

utf-8-sig는 BOM이 있는 UTF-8도 읽습니다. splitlines()와 lineterm=""는 끝 개행이 없어도 출력 줄이 서로 붙지 않게 합니다. BOM 처리 · 줄 분리 동작

2026년 10월 13일 Python 3.12.14에서 비교 사례 12개와 예상 오류 2개를 실행해 모두 기대한 결과를 확인했습니다. 특정 AI 서비스의 성능 시험은 아닙니다.

실제 원고에서는 수치, 날짜, 고유명사, ‘가능하다 → 확정됐다’처럼 주장의 강도가 바뀐 부분부터 확인하세요. 바뀐 줄을 찾은 다음에는 그 변경을 뒷받침하는 근거가 있는지 볼 차례입니다.

반응형