한의학 자료를 읽을 때는 글자를 텍스트로 옮기는 일과 한자·한문을 어떻게 읽을지 확인하는 일이 함께 필요했다. OCR이 글자를 맞게 인식했더라도 독음이 틀릴 수 있고, 독음이 그럴듯해도 처음 읽은 글자가 잘못됐을 수 있다. 두 작업을 따로 남기고 원래 페이지로 돌아가 확인할 수 있도록 작업 흐름을 만들었다.
처음 입력 목록에 등록한 범위는 12권, 5,817쪽이었다. 이는 처리 완료량이 아니다. 로컬 구성에서는 두 권이 합쳐진 PDF가 있어 논리적인 문서 12개와 실제 입력 파일 11개도 구분했다. 합본의 권별 페이지 경계는 별도로 확인해야 할 항목으로 남겼다.
원문과 독음을 덮어쓰지 않고 연결하기
먼저 PDF의 물리 페이지마다 ID를 붙였다. 책에 인쇄된 쪽수는 별도 항목으로 두고, 그 페이지의 원본과 렌더 이미지, OCR 초안을 연결했다. OCR 초안을 원면과 대조해 고친 텍스트를 정본으로 저장하되, 바꾼 글자와 위치, 수정 이유도 남기도록 했다.
독음은 이 정본을 덮어쓰지 않는 별도 층으로 만들었다. 여기서 독음은 번역이나 현대어 풀이가 아니라 한국 한자음으로 읽어 적는 것을 뜻한다. 문단과 한자 구간에 각각 ID를 붙여 원문 어느 부분에 어느 독음이 대응하는지 추적하게 했다. 표와 그림 안의 글자도 대상에 포함했다.
글자 수가 맞는지만 검사해서는 잘못 읽은 고유명사나 용어를 잡기 어렵다. 자동 검사는 빠진 한자 구간을 찾는 데 쓰고, 다의음이나 이체자처럼 판단이 필요한 항목에는 근거와 미해결 상태를 남기는 규칙을 두었다. AI를 활용한 초안과 기계 재검수도 이 단계 안에서 다뤘으며, 기계의 반복 확인을 사람의 독립 검수로 표시하지 않았다.
앞 단계가 바뀌면 뒤 검수도 다시 열기
정본을 고친 뒤 예전 독음에 붙은 통과 표시가 그대로 남으면, 서로 다른 버전이 한 페이지 안에 섞인다. 이를 막기 위해 정본 수정 시 기존 독음과 양쪽 검수 결과의 참조를 무효화하는 코드를 넣었다. 이전 파일은 이력으로 보존하고, 바뀐 정본에서 검수를 다시 시작하는 구조다.
페이지별 상태도 OCR 초안, 정본 검수, 독음 초안, 독음 검수와 최종 잠금으로 나눴다. locked는 이 내부 절차를 통과했다는 상태명이다. 파일의 해시까지 연결해 어느 버전이 통과했는지 확인하도록 했지만, 잠금 표시만으로 텍스트의 정확도가 외부에서 검증됐다고 볼 수는 없다.
중간에 작업이 멈춰도 이어 갈 수 있도록 체크포인트 ZIP에는 페이지 상태와 수정 이력, 검수 기록을 묶었다. 생성 코드는 ZIP 오류 검사와 필수 파일 확인을 통과한 뒤 최종 이름으로 바꾸고 해시를 남긴다. 원본 PDF를 넣지 않는 경량 체크포인트에는 다시 필요한 원본의 식별 정보를 따로 기록했다.
실제로 남아 있는 범위
7월 29일에 저장된 우선 처리 문서의 페이지 상태를 보면, 총 713쪽 중 133쪽이 locked, 13쪽이 공백 확인 상태였다. 10쪽은 진행 중이고 556쪽은 가져온 초안 단계였으며, 1쪽은 전문가 확인이 필요한 상태로 남았다. 9월 7일 이 상태 파일들을 다시 세었을 때도 같은 집계였지만, 이번 확인에서 원면과 독음을 새로 검수한 것은 아니다.
병합본도 부분 완료로 남아 있다. 병합 코드는 준비되지 않은 페이지를 조용히 건너뛰지 않고 빠진 위치를 표시하며, 전체가 완료되지 않으면 파일명에 PARTIAL을 붙인다. 남아 있는 부분 병합본의 파일 해시는 매니페스트와 일치했다. 파일이 보존됐다는 확인과 12권 전체의 정본·독음이 완성됐다는 판정은 여기서 구분했다.
나는 이 작업에서 마지막 텍스트 한 파일보다, 어느 페이지의 어느 단계부터 다시 확인해야 하는지를 남기는 데 초점을 뒀다. 전체 말뭉치의 완성이나 정확도는 아직 확정하지 않았다. 원자료의 재배포 권리도 문서별로 정리되지 않아, 이 글에서는 책 내용이나 독음 예시를 싣지 않고 처리 구조와 저장된 진행 상태만 설명한다.
