일본어 세로쓰기 OCR: 열 순서 유지 및 후리가나 처리
올바른 레이아웃 설정으로 일본어 세로쓰기 텍스트를 추출하고, 본문에서 후리가나를 분리하며, 다운로드 가능한 샘플과 실제 OCR 출력을 비교해 보세요.

일본어 세로쓰기 OCR의 경우 이미지 필터를 변경하기 전에 쓰기 방향을 확인하세요. 세로쓰기를 처리할 수 있는 일본어 모델과 분할 설정을 사용하고, 의도한 순서대로 열을 검증하며, 본문만 필요한지 후리가나도 함께 필요한지 결정하세요. 문자가 아무리 잘 인식되어도 순서가 틀리면 사용할 수 없는 전사문이 됩니다.
이러한 결정을 구체화하기 위해 작고 재현 가능한 로컬 실험을 진행했습니다. 가로쓰기 설정은 세 개의 세로쓰기 열을 뒤섞었습니다. 세로쓰기 설정은 일반 본문을 복원했지만, 후리가나를 추가하니 구두점 두 개가 변경되었고, 루비를 잘라내어도 구두점 오류는 없어지지 않았습니다.
이것은 모든 일본어 책에 대한 정확도 주장이 아니라 고의로 작게 만든 합성 샘플의 결과입니다. 유용한 교훈은 더 구체적입니다. 문자 인식, 읽기 순서, 주석 처리를 각각 따로 평가하세요. 단순히 일본어처럼 보인다고 해서 그 결과를 번역에 넘기지 마세요.
먼저 실제로 원하는 텍스트를 파악하세요
기존 일본어 세로쓰기 구성에서 문자는 줄을 따라 아래로 진행되고 줄은 오른쪽에서 왼쪽으로 진행됩니다. 루비는 기본 문자와 연결된 더 작은 텍스트이며, 후리가나는 주로 그 발음을 제공합니다. W3C의 일본어 텍스트 레이아웃 요구사항(Requirements for Japanese Text Layout) 문서에서는 이러한 쓰기 방향과 루비 관계를 설명합니다.
OCR 전에 페이지의 의미 있는 영역을 라벨링하세요.
- 주요 세로쓰기 열;
- 본문 옆의 작은 루비;
- 가로쓰기 제목, 캡션 또는 표;
- 페이지 번호 및 머리글;
- 여백 주석 또는 관련 없는 인접 페이지.
모든 세로쓰기 줄을 독립된 단락으로 취급하지 마세요. 옆에 있는 작은 가나 줄은 図書館 다음 문장이 아니라 としょかん 그 읽기 방식일 수 있습니다.
OCR을 평가하기 전에 출력 정책을 선택하세요.
| 독자의 작업 | 원하는 결과 | 문제로 간주되는 것 |
|---|---|---|
| 본문 검색 또는 번역 | 순서대로 된 본문; 유용한 독법은 별도로 저장됨 | 산문에 삽입된 루비(후리가나), 생략된 본문 텍스트, 재정렬된 열 |
| 발음 학습 | 본문 및 올바르게 연결된 독법 | 누락된 루비 또는 잘못된 단어에 연결된 독법 |
| 충실한 전사(transcription) 생성 | 보존된 본문, 주석 관계 및 편집 결정 | 유지하고자 했던 자료의 조용한 삭제 또는 정규화 |
동일한 결과물이 한 작업에서는 통과하고 다른 작업에서는 실패할 수 있습니다. 당사의 실험은 본문 전용 전사를 비교 대상으로 사용합니다. 누락된 후리가나를 발음 학습용 판본에서 허용 가능한 것으로 취급하지 않습니다.
실제 세 문장으로 이루어진 OCR 실험
샘플은 다음의 자작 문장들을 사용합니다.
朝の図書館で本を読む。
古い地図には川が見える。
明日は友人と駅で会う。
도서관에서의 독서, 오래된 지도에서 강을 보는 것, 역에서 친구를 만나는 것을 묘사합니다. 줄바꿈을 제거했을 때 세 개의 일본어 마침표를 포함하여 총 34개의 본문 텍스트 유니코드 코드 포인트가 있습니다.
동일한 본문을 세 가지 형태로 렌더링했습니다.
- 가로 텍스트.
- 세로 단 3개, 오른쪽에서 왼쪽으로 읽음.
- 후리가나가 포함된 동일한 세로 단 옆의
図書館,地図,友人, 그리고駅.

이는 책의 스캔된 페이지가 아니라 깨끗한 교육용 이미지입니다. 렌더러는 Noto Sans CJK JP, 64픽셀 본문 글자, 24픽셀 루비, 그리고 단순화된 글자별 수직 배치를 사용합니다. 폰트의 적절한 세로 글꼴 배치를 사용하는 대신 수동으로 선택한 위치에 작은 테두리가 있는 원으로 세로 마침표를 그리므로, 구두점 결과가 정식으로 조판된 책에서 OCR이 어떻게 수행되는지 증명하지는 않습니다. 모든 일본어 조판 규칙을 재현하지는 않습니다. 테스트에는 흐림, 기울어짐, 종이 질감, 손글씨, 역사적 활자 또는 혼합 방향 페이지가 없습니다.
엔진, 모델 및 설정
이 실험은 2026년 9월 7일에 macOS ARM64 환경에서 Tesseract.js 7.0.0 및 Tesseract.js-core 7.0.0을 사용하여 로컬에서 진행되었습니다. 모든 성공적인 호출은 공식 tessdata_fast 모델(커밋: 87416418657359cb625c412a48b6e1d6d41c29bd)을 사용했으며, OEM 1(LSTM 전용 엔진 모드)로 설정되었습니다.
Tesseract의 공식 모델 저장소는 별도의 jpn 및 jpn_vert 파일을 제공합니다. 문서에 따르면 PSM 5는 균일한 수직 정렬 블록, PSM 6은 균일한 텍스트 블록을 의미하므로 인식하려는 영역에 맞는 분할 방식을 선택해야 합니다. 자세한 내용은 페이지 분할 문서.
기록된 사례에서는 수평 텍스트에 jpn(PSM 6 적용), 수직 텍스트에 jpn_vert(PSM 5 적용), 그리고 고의로 일치하지 않도록 설정한 jpn/PSM 6 수직 제어군을 사용했습니다. 두 수직 설정 간에는 모델과 분할 방식이 모두 변경되므로, 이는 단일 설정의 효과를 분리하여 검증하는 실험이 아니라 워크플로 비교입니다.
초기 시도에서는 tessdata_best을(를) 사용했으나, OCR 텍스트를 생성하기 전에 사용 가능한 WebAssembly 코어에서 중단되었습니다. 호환성을 위해 공식 정수형 tessdata_fast 모델로 전환하고 해당 실패 기록을 남겼습니다. 이 전환으로 특정 모델군의 정확도에 대한 결론을 도출할 수는 없습니다.
실제 반환된 결과
이 비교는 공백을 제거하고 유니코드 NFC 정규화를 적용합니다. 구두점을 대체하거나, 한자를 교정하거나, 텍스트를 재배치하지는 않습니다. 전체 원시 출력 및 버전/모델 해시, 본문 비교 CSV, 및 오류 주석 다운로드할 수 있습니다.
| 입력 및 설정 | 본문 전용 타겟에 대한 관찰된 결과 |
|---|---|
가로, jpn, PSM 6 | 공백 제거 후 34개의 모든 코드 포인트가 일치함 |
세로, jpn, PSM 6 제어 | 출력이 열을 가로질러 실행되었으며 문자 대체가 포함되어 있어 사용할 수 있는 산문이 아님 |
세로, jpn_vert, PSM 5 | 공백 제거 후 34개의 모든 코드 포인트가 일치함; 열 순서가 올바름 |
후리가나 포함 세로, jpn_vert, PSM 5 | 본문은 순서대로 유지되었으나, 두 개의 。 표기가 ASCII로 .(으)로 변경됨; 루비가 별도의 독법으로 반환되지 않음 |
후리가나 이미지의 세 가지 본문 열 크롭, jpn_vert, PSM 5 | 첫 번째 열은 .(으)로 끝났고, 두 번째 열은 ,(으)로, 세 번째 열은 。(으)로 끝났음; 자르기가 모든 구두점 결함을 제거하지 못함 |
예를 들어, 후리가나 사례는 이 첫 번째 줄을 반환했습니다:
Expected: 朝の図書館で本を読む。
Observed: 朝 の 図書 館 で 本 を 読む .
공백은 당사의 명시된 비교 규칙에서 무시됩니다. 최종 구문 부호는 무시되지 않습니다. 검색 전용 워크플로는 이러한 차이를 용인할 수 있지만, 충실한 전사는 이를 기록하고 수정해야 합니다.
일치하지 않는 수직 제어는 明 古 昌에서 시작되었으며, 의도된 첫 번째 문장을 따르는 대신 열의 상단 문자들을 건너뛰었습니다. 그 결과물은 개별 기호 인식과 읽기 순서 재구성이 동일하지 않은 이유를 보여줍니다.
완료된 OCR 호출은 전체 이미지 4건과 자르기 3건으로 총 7건이었습니다. 모든 결과물을 유지했습니다. 한 에이전트가 결과물을 작성된 정답과 비교하고 이미지의 시각적 검사를 수행했으며, 눈가림 방식의 사람 검토나 광범위한 벤치마크 코퍼스는 없었습니다. 이 실험은 보편적으로 가장 우수한 엔진, 책 수준의 정확도 비율, 또는 사용자의 스캔본에 대한 성능을 확립하지 않습니다.
자신의 페이지에서 영역 우선 워크플로 사용
1. 원본을 유지하고 어려운 페이지 하나 선택
원본 이미지나 PDF를 변경하지 않고 그대로 둡니다. 사본으로 작업하고 페이지 번호를 기록합니다. 조밀한 루비, 좁은 여백, 세로 텍스트 위의 가로 제목, 또는 유례없이 작은 활자 등 해결하려는 문제가 포함된 페이지를 선택하세요.
본문 페이지의 레이아웃이 다른 책의 경우, 깨끗한 표지는 유용한 수락 테스트가 아닙니다. 원본이 PDF인 경우, 이미지 전용 OCR 워크플로를 실행하기 전에 신뢰하는 도구를 사용하여 선택한 페이지를 추출하거나 렌더링하세요. 이 기사의 스크립트는 PNG 파일을 허용하며, PDF를 처리하거나 검색 가능한 PDF 레이어를 빌드하지 않습니다.
전체 스캔 문서 준비 및 번역 프로세스에 대해서는 광범위한 스캔 PDF 워크플로를 이용하세요. 이 가이드는 일본어 방향, 분할, 루비 및 전사 결정에 중점을 둡니다.
2. 작은 텍스트를 손상시키지 않고 캡처 결함 수정
유용한 확대 수준에서 실제 문자를 검사합니다. 의도하지 않은 기울어짐을 바로잡고, 관련 없는 페이지 테두리를 제거하며, 작은 가나와 구문 부호를 구별할 수 있는 충분한 대비를 유지합니다. 공격적인 임계값 처리나 선명화 작업을 자동 개선으로 취급하지 마십시오. OCR을 신뢰하기 전에 결과 이미지를 원본과 비교해 보십시오.
테서랙트(Tesseract)의 이미지 품질 지침은 해상도, 노이즈, 기울어짐 및 테두리를 다룹니다. 이는 쓰기 방향과는 별개입니다. 각도를 두고 촬영한 페이지의 기울기를 바로잡는 것은 세로로 똑바로 서 있는 일본어 텍스트를 옆으로 회전시키는 작업과 다릅니다.
샘플 파일에는 300 dpi 메타데이터가 포함되어 있지만, 그 숫자가 누락된 세부 정보를 생성하지는 않습니다. 실제 본문 글꼴 크기는 64픽셀입니다. “300 dpi”라고 다시 레이블이 지정된 저해상도 사진은 여전히 동일한 저해상도 사진입니다.
3. 페이지가 하나의 레이아웃 가정을 위반할 때 영역 분리
하나의 OCR 호출이 가로 제목, 세로 산문, 삽화 및 페이지 번호를 모두 처리하도록 요청하기 전에 주 세로 블록을 단독으로 시도해 보세요. “12페이지, 본문, 오른쪽에서 1번째 열”과 같은 간단한 영역 기록을 유지하세요. 이 기록은 나중에 조립 작업을 감사 가능하게 만들어 줍니다.
혼합 방향 자료의 경우, 적절한 가로 설정으로 가로 영역을 인식하고 세로 설정으로 세로 영역을 인식한 다음 문서가 의도한 순서대로 조립합니다. 이는 파일에서 테스트하기 권장되는 워크플로이며, 세 개의 샘플 이미지로 측정된 혼합 레이아웃 기능이 아닙니다.
.
4. 개별 문자를 교정하기 전에 열 확인
의도한 방향으로 작업하면서 각 열의 첫 번째 및 마지막 본문 문자를 비교합니다. 누락, 복제, 반전되거나 이웃과 섞인 열이 없는지 확인합니다. 그런 다음 열 경계의 문장을 검사합니다.
그런 다음에야 개별 한자, 가나, 문장부호, 숫자, 이름을 수정해야 합니다. 그렇지 않으면 잘못된 단락으로 조립될 조각들을 다듬는 데 시간을 낭비할 수 있습니다.
유용한 3단계 검토 과정은 다음과 같습니다.
- 영역 및 순서: 의도된 모든 본문 영역이 빠짐없이 순서대로 존재합니다.
- 문자: 작은 문장부호와 가나 기호를 포함하여 실제 이미지와 텍스트를 비교합니다.
- 주석: 각 루비 항목, 메모, 여백 라벨을 보존할지, 분리할지, 아니면 의도적으로 제외할지 결정합니다.
엔진의 신뢰도 값은 이러한 확인 작업을 대체할 수 없습니다. 무작위로 섞인 제어 테스트에서도 엔진이 보고한 신뢰도 숫자가 반환되었지만, 그렇다고 읽기 순서가 올바르게 된 것은 아닙니다.
이유를 알기 전에는 후리가나를 제거하지 마십시오
본문 전용 추출의 경우 루비가 우연히 두 번째 산문 레이블이 되어서는 안 됩니다. 하지만 작은 가나 문자열을 모두 삭제하는 것이 안전한 일반 규칙은 아닙니다. 독음은 이름을 명확히 하거나, 저자가 선택한 발음을 보존하거나, 독자의 학습 과제를 지원하는 데 도움이 될 수 있습니다.
후리가나 이미지에서 OCR 출력은 주요 한자를 포함했지만 4개의 독음을 별도의 주석 세트로 반환하지 않았습니다. 본문 전용 검색 작업의 경우 문장부호 교정 후 그것으로 충분할 수 있습니다. 그러나 결과물이 발음 정보를 약속하는 경우에는 불충분합니다.
중요한 독음을 따로 저장하고 올바른 발생 위치와 연결하십시오. 예를 들어 다음과 같습니다.
Page: sample 1
Column: 1 from the right
Base text: 図書館
Reading shown: としょかん
Decision: retain body text; save reading in the annotation record
샘플의 별도 루비 전사는 해당 정책을 명확하게 보여줍니다. 이는 OCR 성공 주장이 아니라 이미지와 함께 작성된 정답(Ground Truth) 데이터입니다.
OCR이 단어에 가나를 섞거나 연관성을 잃어버린 경우, 이미지와 비교하여 전사를 수정하십시오. 언어 모델에게 원본을 추측하게 하고 그 추측을 복원된 텍스트로 제시하게 하지 마십시오. 대신 불확실한 읽기 표시는 검토용으로 남겨두십시오.
잘라내기(Crop) 결과 역시 단순하게 “루비를 제거하면 모든 것이 좋아진다”는 규칙에 반대합니다. 두 개의 문장부호 차이가 남아 있었고 영향을 받은 문장 끝부분이 변경되었습니다. 이러한 관찰은 이 특정 정돈된 테스트 픽스처에 국한됩니다. 이는 분할 후에 결과를 검증해야 함을 알려주는 것이며, 잘라내기가 일반적으로 OCR에 도움이 되거나 해롭다는 것을 의미하지 않습니다.
테스트를 재현하거나 검토 로그를 유지하십시오
고정된 모델 및 폰트 소스, 종속성 버전, 파일 설명, 명령어가 포함된 실험 README를 다운로드하십시오. 샘플 생성기, 와 OCR 실행기, 그리고 비교 스크립트는 이미지 생성, 인식, 평가를 분리합니다.
실행기는 문서화된 Tesseract.js 워커 API를 사용합니다. 수직 영역의 주요 설정은 다음과 같습니다.
const worker = await createWorker("jpn_vert", 1, {
langPath: modelDirectory,
gzip: false,
cacheMethod: "none",
});
await worker.setParameters({
tessedit_pageseg_mode: "5",
user_defined_dpi: "300",
});
modelDirectory은(는) 다운로드하여 압축을 해제한 jpn_vert.traineddata 파일을 포함해야 합니다. 이는 전체 프로그램이 아닌 발췌본이며, 제공된 실행기는 원시 결과도 저장하고 워커를 종료합니다.
다른 OCR 애플리케이션을 사용하는 경우, 설정 이름이 다르더라도 동일한 증거(소스 영역, 원본 파일, 모델 또는 도구 버전, 방향, 분할 선택, 실제 출력, 교정된 텍스트, 미해결 문자)를 유지하십시오. 검토 로그 템플릿은 페이지가 이미 검증을 통과했음을 의미하지 않도록 비어 있습니다.
소규모의 정확한 일치 결과를 전체 소설에 대한 약속된 비율로 변환하지 마십시오. 서로 다른 글꼴, 빽빽한 열, 고대 문자, 저품질 스캔본, 만화 말풍선에는 각각 대표적인 테스트가 필요합니다. 만화 레이아웃과 필기 인식은 이 실험의 범위에 포함되지 않습니다.
복원된 소스가 신뢰할 수 있는 경우에만 번역하세요
목적이 검색, 인용구 복사 또는 사전 조회인 경우, 검증된 일본어 텍스트 자체가 최종 결과물일 수 있습니다. OCR이 포함되었다는 이유만으로 문서 전체를 번역할 필요는 없습니다.
언어 장벽으로 인해 여전히 읽기가 어렵고 업로드할 수 있는 사용 가능한 파일이 있는 경우, PDF 번역 워크플로를 계속 진행하세요. 인식 오류와 번역 오류를 구별할 수 있도록 원래의 스캔본과 검증된 전사본을 보관하십시오. 예제 실행기는 자동 업로드에 적합한 PDF가 아니라 텍스트 및 TSV 파일을 생성하므로, 다음 도구에 필요한 실제 입력 형식으로 준비하십시오.
BookTranslator의 OCR 모드는 원래의 수직 레이아웃을 보장하는 대신 번역된 콘텐츠를 재구성합니다. 모든 루비 연결을 보존하거나 검증되지 않은 인식 오류를 수정해 준다고 가정하지 마십시오. 최종 문서의 읽기 순서와 서식을 PDF 형식 보존 가이드 및 최종 PDF QA 체크리스트.
를 사용하여 검토하십시오. 신뢰할 수 있는 인계는 “OCR 완료”가 아닙니다. “원하는 일본어 텍스트가 존재하고, 순서가 확인되었으며, 주석 처리가 문서화되어 있다”는 것입니다.





