AI 문장 교정 뒤 숫자와 고유명사가 바뀌었는지 확인하기

공지문을 매끄럽게 고쳤는데 수량이 48개에서 84개로 바뀌면 문체 교정은 실패입니다. 이름의 철자, 제품 코드의 앞자리 0, 날짜와 시각도 교정 중 바꾸지 않을 대상으로 먼저 정해 두세요. 이 글에서는 가상 행사 공지 한 건으로 숫자·고유명사 보존 검사와 문장 의미 검토를 나누고, 교정한 문장을 원문으로 복구하는 순서를 다룹니다.

AI 문장 교정은 어색한 표현을 새 문장으로 제안하는 작업입니다. 사람이 뜻을 확인하기 전에 제안이 원문을 대신하지 않도록 관리해야 합니다. OpenAI의 정확성 안내는 날짜·사실 등이 잘못될 수 있고 중요한 정보를 확인해야 한다고 설명합니다. 아래 공지·교정 예시·오류 문장은 모두 직접 작성한 합성 자료입니다. 실제 행사나 AI 실행 기록이 아닙니다.

가상 오로라랩 행사 공지의 날짜·시각·장소·담당자·AX-007·48개·30분을 보존하고 수량·코드 변화와 이름 역할 교환 반례를 두 검토 영역으로 나눈 설명용 도해
원문은 접수 한서윤·물품 검수 민태오이며 샘플 AX-007 48개와 체험 30분을 유지한다. 84개·AX-7 변경은 표기 오류이고, 이름 횟수가 같아도 담당 역할 교환은 반려한다. 합성 예제 설명용 도해.

원문에서 변경 금지 항목을 먼저 적기

아래 공지를 그대로 복사해 원문으로 보관합니다. 이름과 조직은 가상이며 실제 인물·회사와 관계없습니다. AI에 보낼 합성 입력으로도 사용할 수 있습니다.

오로라랩 시범 행사 안내입니다.
2026-10-12 15:00에 동관 2층에서 시작합니다.
접수 담당자는 한서윤이고 물품 검수 담당자는 민태오입니다.
AX-007 샘플 48개를 준비하며 체험 시간은 30분입니다.
예약하지 않은 분의 현장 참여는 받지 않습니다.

문장 교정 범위는 조사·어순·문장부호를 다듬는 것으로 정합니다. 사실과 대상의 연결은 변경하지 않습니다. 문장 길이가 달라져도 아래 값은 남아 있어야 합니다.

구분 원문의 표기 보존 기준
날짜와 시각 2026-10-12, 15:00 같은 날짜·시각이며 표기 변경도 먼저 합의
장소 동관 2층 다른 동이나 층으로 이동하지 않음
조직·사람 이름 오로라랩, 한서윤, 민태오 철자와 등장 횟수 유지. 담당 역할도 따로 확인
제품 코드 AX-007 대문자·하이픈·앞자리 0 보존
수량과 시간 48개, 30분 숫자와 단위를 함께 유지
참여 조건 예약하지 않은 분의 참여는 받지 않음 부정과 적용 대상 유지

날짜에 요일을 붙이거나 AX-007을 AX-7로 줄이는 작업은 이번 교정 범위에 없습니다. 숫자를 정수로 바꾸면 007과 7이 같은 값처럼 보일 수 있지만 제품 식별 표기는 달라집니다. 이름의 띄어쓰기나 표기 오류가 의심돼도 실제 원본 또는 작성자의 확인 없이 “정정”하지 않습니다.

문체만 바꾼 예시와 사실이 바뀐 예시 비교하기

다음은 뜻을 유지하면서 문장을 나눈 교정 예시입니다. 이 문장도 실제 AI가 생성한 결과는 아닙니다.

오로라랩 시범 행사 안내입니다.
행사는 2026-10-12 15:00에 동관 2층에서 시작합니다.
접수 담당자는 한서윤이며, 물품 검수 담당자는 민태오입니다.
AX-007 샘플 48개를 준비합니다. 체험 시간은 30분입니다.
예약하지 않은 분의 현장 참여는 받지 않습니다.

원문의 “이고”를 “이며”로 바꾸고 한 문장을 두 문장으로 나눴지만 날짜·이름·코드·수량·시간·참여 조건은 유지했습니다. 단락 순서를 바꿀 수 있는 요청이더라도 역할과 대상의 관계를 바꿔서는 안 됩니다.

오류를 확인하려면 위 교정 예시의 사본에서 한 항목만 바꿉니다. 여러 값을 한꺼번에 바꿔 결과를 맞추기보다 어떤 검사가 어떤 오류를 찾는지 구분하는 연습입니다.

의도적으로 만든 오류 문제가 되는 이유 복구할 근거
2026-10-12를 2026-10-13으로 변경 행사 날짜가 바뀜 원문 둘째 줄의 날짜
48개를 84개로 변경 준비 수량이 바뀜 원문 넷째 줄의 48개
한서윤을 한서연으로 변경 접수 담당자 이름이 달라짐 원문 셋째 줄의 이름
AX-007을 AX-7로 변경 앞자리 0이 빠져 코드가 달라짐 원문 넷째 줄의 전체 코드
30분을 삭제 체험 시간 정보 누락 원문 넷째 줄의 시간
민태오를 문장 뒤에 한 번 더 추가 이름의 등장 횟수가 달라짐 원문에서 민태오는 한 번 등장

등장 횟수 유지는 이번 짧은 공지에 정한 검사 규칙입니다. 긴 문서를 요약하거나 같은 이름을 제목과 본문에 반복하는 작업에는 그대로 적용할 수 없습니다. 교정 범위를 확대했다면 허용된 변경을 새로 기록하고 원문을 다시 기준으로 잡아야 합니다.

AI 교정 요청에 변경 금지 목록을 붙이기

“틀린 부분을 알아서 고쳐 줘”는 문체와 사실 수정의 경계가 불분명합니다. 아래 요청문 뒤에 원문을 붙여 원하는 범위를 전달하세요. 실제 연락처·예약 명단·민감한 업무 자료를 이 연습에 추가할 필요는 없습니다.

아래 가상 공지의 조사·어순·문장부호만 자연스럽게 교정하세요.
사실, 담당 역할, 참여 조건은 변경하지 마세요.
변경 금지: 2026-10-12, 15:00, 동관 2층, 오로라랩,
한서윤, 민태오, AX-007, 48개, 30분.
이름·코드의 철자와 대소문자, 코드의 앞자리 0을 보존하세요.
날짜 형식 변경, 요일 추가, 단위 환산을 하지 마세요.
맞춤법 오류로 의심되는 이름도 임의로 바꾸지 말고 확인 질문에 남기세요.
출력: 교정본과 실제로 변경한 표현의 목록.

AI가 “숫자는 모두 보존했습니다”라고 설명해도 교정본을 직접 확인합니다. 변경 목록에 쓰지 않은 차이가 있을 수 있기 때문입니다. 재요청을 했다면 최초 제안은 지우지 말고 두 번째 제안으로 별도 저장합니다.

Python으로 숫자 표기와 지정 이름의 횟수 검사하기

코드는 숫자를 정수로 변환하지 않고 문자열로 셉니다. 전체 숫자의 등장 개수와 원문에서 정해 둔 고유명사·코드의 등장 횟수를 비교합니다. 이름을 자동으로 인식하는 AI나 일반 고유명사 추출기는 아닙니다.

아래 코드를 proofread_check.py로 저장한 뒤 python proofread_check.py를 실행합니다. 기본 예제는 날짜만 틀린 문장입니다. 출력에서 어떤 날짜가 빠졌고 새로 생겼는지 확인할 수 있습니다. 외부 서버·AI·문서 편집 앱에는 연결하지 않습니다.

import re
import unicodedata
from collections import Counter

SOURCE = """오로라랩 시범 행사 안내입니다.
2026-10-12 15:00에 동관 2층에서 시작합니다.
접수 담당자는 한서윤이고 물품 검수 담당자는 민태오입니다.
AX-007 샘플 48개를 준비하며 체험 시간은 30분입니다.
예약하지 않은 분의 현장 참여는 받지 않습니다."""
PROTECTED = ["오로라랩", "한서윤", "민태오", "AX-007", "동관"]

def normalize(text):
    return unicodedata.normalize("NFC", text)

def number_counts(text):
    return Counter(re.findall(r"[0-9]+(?:[,:.\-][0-9]+)*", text))

def inspect_proofreading(source, candidate):
    before, after = normalize(source), normalize(candidate)
    old, new = number_counts(before), number_counts(after)
    changed = {
        name: {"before": before.count(name), "after": after.count(name)}
        for name in PROTECTED if before.count(name) != after.count(name)
    }
    return {
        "number_missing": sorted((old - new).elements()),
        "number_added": sorted((new - old).elements()),
        "protected_count_changes": changed,
        "human_review_needed": True,
    }

if __name__ == "__main__":
    candidate = SOURCE.replace("2026-10-12", "2026-10-13")
    print(inspect_proofreading(SOURCE, candidate))

기본 출력은 number_missing에 2026-10-12, number_added에 2026-10-13이 들어가고 protected_count_changes는 빈 객체입니다. human_review_needed는 항상 True입니다. 숫자 정규식은 이 공지에 사용한 표기를 추출할 뿐 소수점·통화·분수·한글 수사 등을 모두 이해하지 않습니다. Python re 문서와 Counter 문서는 문자열 추출과 항목별 개수 계산의 동작을 설명합니다.

NFC는 같은 문자가 서로 다른 유니코드 조합으로 저장된 경우 비교를 돕는 선택입니다. 이 코드가 이름을 다른 이름으로 고치거나 전체 공백을 지우는 것은 아닙니다. unicodedata 문서에서 정규화 형식을 확인할 수 있습니다. 원문의 숫자·코드 표기를 더 넓게 바꾸는 정규화를 추가하려면 업무 규칙을 먼저 정해야 합니다.

지정 이름 검사는 부분 문자열의 등장 횟수입니다. 예를 들어 한서윤을 김한서윤으로 늘려도 “한서윤”이라는 부분 문자열은 남아 있어 놓칠 수 있습니다. 새 인물이나 다른 이름을 모두 찾아내는 기능으로 해석하지 않습니다. 보호 목록 밖의 이름, 조사와 붙은 이름, 고유명사의 경계는 사람이 읽어야 합니다.

숫자와 이름이 그대로인데도 틀리는 반례

자동 검사와 의미 검토의 차이는 아래 사례에서 분명해집니다. 모두 원문의 숫자와 지정 이름의 횟수가 유지되도록 만든 오류입니다.

합성 반례 자동 검사 사람이 읽어야 할 차이
접수 담당자를 민태오, 검수 담당자를 한서윤으로 교환 숫자·지정 이름 횟수 차이 없음 이름은 같지만 담당 역할이 서로 바뀜
예약하지 않은 분도 현장 참여할 수 있다고 변경 숫자·지정 이름 횟수 차이 없음 예약 조건과 부정이 반대로 바뀜
48개를 48상자로 변경 숫자·지정 이름 횟수 차이 없음 수량의 단위가 달라짐
한서윤을 김한서윤으로 변경 숫자·지정 이름 횟수 차이 없음 부분 문자열은 남지만 전체 이름은 달라짐
별빛스튜디오가 후원한다고 추가 숫자·지정 이름 횟수 차이 없음 보호 목록 밖의 이름과 새 사실이 추가됨

이 사례에서 경고가 없다는 것은 변경 금지 표기의 일부만 유지되었다는 뜻입니다. 접수·검수 같은 역할, 수량의 단위, 예약 조건을 사람이 대조하기 전에는 교정 완료로 판단하지 않습니다.

Python 3.12.14에서 정상 교정 1개, 기본 변경 반례 6개, 위 의미·경계 반례 5개, 날짜 형식 변경 1개, 유니코드 조합 차이 1개까지 총 14개를 실행했습니다. 2026-10-12를 2026/10/12로 바꾸면 날짜 숫자가 다른 토큰으로 나뉘어 경고합니다. 의미상 같은 날짜여도 이번 요청에서는 형식 변경을 허용하지 않았으므로 표기를 복원하거나 별도 승인해야 합니다. NFC로 비교한 유니코드 조합 차이는 동일하게 처리됐습니다. 공식 Python 페이지의 표기는 3.12.15이며 실제 실행 버전과 구분합니다.

이 결과는 합성 입력을 검사한 기록입니다. 실제 AI 교정의 오류율, 모델 정확도, 개인정보 탐지 능력을 측정한 수치가 아닙니다. 사람의 의미 판정은 위 반례에 대해 작성자가 원문을 대조해 기록했으며 Python이 대신 내려 준 판단이 아닙니다.

잘못된 교정본을 원문 기준으로 복구하기

오류를 찾았으면 교정본의 날짜나 이름을 기억으로 고치지 않습니다. 변경된 위치를 원문에서 찾고 해당 구절만 복원한 뒤 전체 문장을 다시 읽습니다. 이름과 숫자만 맞춘 상태에서 담당 역할이 여전히 바뀌어 있을 수 있습니다.

원문 버전과 보관 위치:
교정 제안 버전:
허용한 교정 범위:
원문의 변경 금지 숫자·이름·코드:
발견된 변경 위치와 원문 구절:
변경 종류: 숫자 / 이름·코드 / 역할 / 단위 / 조건 / 새 사실
복원한 구절:
자동 검사 결과:
주체·역할·대상·부정·단위의 의미 검토:
판정: 사용 가능 / 수정 필요 / 원문 확인 대기
검토자·검토일:
  1. 원문을 고정하고 교정본을 다른 파일이나 영역에 둡니다.
  2. 숫자·이름·코드 검사를 실행하거나 원문 표기를 직접 대조합니다.
  3. 차이가 있으면 원문 근거로 복원합니다. 원문 자체가 틀렸다고 의심되면 작성자 확인 대기로 남깁니다.
  4. 차이가 없어도 역할·단위·예약 조건을 문장별로 읽습니다.
  5. 수정 후 검사를 다시 하고 실제로 확인한 교정본의 버전을 기록합니다.

교정본을 이미 공지한 뒤 오류를 찾았다면 로컬 원고만 고쳐서 끝내지 않습니다. 어떤 공개본에 어떤 변경이 들어갔는지 확인하고 해당 공지 채널의 정정 절차를 따릅니다. 이 실습은 실제 게시물을 수정하거나 정정 안내를 전송하지 않습니다.

확인 범위와 다음 적용

작성·기술 기준일은 2026-10-04 KST입니다. 공식 안내·Python 문서를 확인하고 로컬 합성 입력의 표기 검사를 실행했습니다. 실제 AI·문서 편집 앱·행사 운영 시스템은 실행하지 않았습니다. 원문과 교정본의 의미가 맞는지 확인할 최종 책임은 별도로 남습니다.

글을 줄이는 작업에서 필수 내용 누락을 다루려면 AI 요약을 Excel 원문과 대조하는 방법을 참고하세요. 조직의 승인값까지 관리해야 한다면 원본·제안·승인값 분리로 검토 기록을 확장할 수 있습니다. 이 글에서는 문장을 줄이거나 업무 승인을 자동화하지 않고, 교정한 공지의 표기와 역할·조건을 원문과 대조하는 데 집중합니다.

함께 확인할 작업

다른 언어로 바꾸는 작업은 AI 업무 번역의 의무·예정·가능 표현 대조를 함께 확인하세요. 이 글의 숫자·이름 보존 검사는 번역의 의미 강도 판정을 대신하지 않습니다.

작성자 소개