OCR이 표를 인식하지 못하나요?컬럼 정렬이 틀어지는 6가지 근본 원인

추출된 스프레드시트를 열어보면 텍스트는 있지만 — 인보이스 번호, 날짜, 합계 — 컬럼이 엉망입니다. 설명이 수량 컬럼으로 넘어가고, 헤더는 하나로 뭉쳐집니다. 당신만 그런 게 아닙니다. 이는 OCR 표 추출에서 가장 흔한 불만이며, 근본 원인은 거의 항상 이미지 품질이 아닙니다.

수작업 입력은 그만 — AI가 대신 읽어드립니다
이미지나 PDF를 업로드하세요 — 10초 만에 정형 데이터로
지금 체험하기
회원가입 불필요 · 카드 불필요 · 10초 내 결과
책상 위 계산기와 재무 문서 — OCR 표 추출 정확도의 어려움을 나타냄

핵심 요약

  1. OCR은 텍스트를 줄 단위로 읽습니다. 행과 열이 아닌 단어의 흐름으로 보기 때문에, 아무리 스캔 품질이 좋아도 추출된 표는 값이 밀리고 셀이 붕괴된 상태로 도착합니다.
  2. 여섯 가지 문서 특징 — 셀 병합, 보이지 않는 테두리, 다중 컬럼 레이아웃, 기울어진 각도, 일관되지 않은 헤더 — 각각이 순차 스캐닝의 다른 사각지대를 공략하며, 배치당 세 가지 이상의 수동 수정이 필요하다면 도구 자체가 병목입니다.
  3. 해결책은 전체 페이지를 먼저 시각적 레이아웃으로 분석하여, 사람의 눈처럼 문맥적으로 표 구조를 이해하는 추출 방식입니다. 공백 간격이나 픽셀 투영으로 컬럼 경계를 추측하는 대신 말이죠.

근본 원인: OCR은 표가 아닌 줄 단위로 읽습니다

OCR 엔진은 문서를 스캔하여 개별 문자(한 글자, 한 숫자)를 식별합니다. 이 문자들을 단어로, 그리고 읽기 순서대로 텍스트 줄로 조합합니다. 이는 근본적으로 단락용으로 설계된 선형적인 줄 단위 프로세스이며, 스프레드시트용이 아닙니다.

표는 2차원 구조입니다. "$450.00"라는 값은 그 자체로는 아무 의미가 없습니다. "Widget B" 행의 "합계" 열 아래에 있기 때문에 의미가 생깁니다. 셀과 열 헤더 간의 관계는 공간적이지 순차적이지 않습니다. OCR은 "$450.00"를 텍스트로 읽지만, 이 숫자가 3열 2행에 속한다는 것을 이해할 메커니즘이 없습니다. 일부 도구는 OCR 완료 후 간격과 정렬을 통해 표 구조를 추론하려고 시도하지만, 추론은 레이아웃이 완벽하지 않으면 실패하는 추측에 불과합니다. 아래 여섯 가지 원인은 이러한 추측이 무너지는 시나리오입니다.

원인 #1 — 줄 단위 스캔 vs. 2D 표

증상: 표가 하나의 연속된 단락으로 추출됩니다. "항목 수량 가격 Widget A 2 100 Widget B 1 200 합계 400" — 열 구분 없이 모두 한 줄로 표시됩니다.

근본 원인: 엔진이 첫 줄에서 "항목"을 읽은 후 "수량", "가격", 줄 바꿈, "Widget A", "2", "100" 순서로 모두 평면적인 순서로 이동합니다. "항목", "Widget A", "Widget B"가 같은 열에 속한다는 것을 인식하지 못하는 이유는 열을 전혀 보지 않고 줄 바꿈으로 구분된 단어의 흐름만 보기 때문입니다.

해결 방법:

  • 사용 중인 도구에 "표" 또는 "스프레드시트" 모드가 있는지 확인하세요. 일부 OCR 엔진은 문서 유형 전환 기능을 제공합니다. "문서"에서 "표"로 전환하면 엔진이 그리드 레이아웃을 예상하고 내부 처리 경로를 변경합니다.
  • 표를 2D 구조로 처리하는 도구를 사용하세요. ImageToTable.ai와 같은 최신 비전 기반 추출 도구는 줄 단위로 읽지 않습니다. 한 번에 전체 페이지 레이아웃을 분석하여 텍스트를 추출하기 전에 열, 행 및 셀 경계를 식별합니다. 이것이 기존 OCR과 비전 AI의 차이점입니다. 하나는 문자를 순차적으로 읽고, 다른 하나는 페이지를 공간 지도로 이해합니다.
  • 임시 해결책으로 영역 OCR을 사용하세요. 도구에서 각 열에 대해 직사각형 영역을 정의할 수 있다면 독립적으로 추출하세요. 단, 표 레이아웃이 변경되면 이 방법은 작동하지 않습니다.

원인 #2 — 셀 병합으로 인한 구조 손실

증상: "위젯 A — 10개 — 45.99달러"라고 표시되어야 할 행이 "위젯 A 10개 45.99달러"로 출력되어 어떤 값이 어떤 열에 속하는지 알 수 없습니다. 또는 두 열에 걸쳐 있는 헤더 셀이 이후 모든 행을 한 열씩 오른쪽으로 밀어버립니다.

근본 원인: 병합된 셀은 시각적 모양과 실제 데이터 구조 사이에 차이를 만듭니다. 셀이 시각적으로 세 열에 걸쳐 있을 때 실제 데이터는 한 위치에만 있습니다. OCR 엔진은 병합된 레이블을 한 번 읽지만 그 아래 세 열에 값을 어떻게 분배할지 결정해야 합니다. 대부분의 엔진은 모든 병합 열에 값을 복제하거나, 모두 왼쪽 정렬로 합치거나, 병합 영역을 비워두는데, 이 모든 방법이 출력을 손상시킵니다.

해결 방법:

  • 출력 메타데이터를 확인하세요. 일부 도구는 원시 JSON 출력에 rowSpan 또는 colSpan을 반환합니다. 도구에서 JSON 내보내기를 지원한다면 이 값을 검사하여 엔진이 병합을 감지했는지 확인할 수 있습니다.
  • 문서를 전처리하세요. 원본 파일을 제어할 수 있다면 OCR 실행 전에 병합된 셀을 레이블이 반복된 개별 셀로 변환하세요. 일부 PDF 편집기에는 "셀 병합 해제" 기능이 있습니다.
  • 의미 기반 추출로 전환하세요. 위치 매핑에 의존하는 대신 사용자 정의 열 추출을 사용하는 도구는 원하는 항목(예: "품목 설명", "수량", "단가")을 정의할 수 있으며, AI는 각 값의 의미를 이해하여 위치를 찾습니다. 이 접근 방식은 AI가 내용을 읽지 격자선을 읽지 않기 때문에 병합된 셀로 인한 혼란이 없습니다.

원인 #3 — 격자선 부재로 인한 엔진의 추측

증상: 테이블에 눈에 보이는 테두리가 없습니다. 단지 공백으로 열을 구분하는 텍스트만 있을 뿐입니다. OCR 출력이 모든 것을 하나의 덩어리로 합쳐버리거나 존재하지 않는 열 구분을 임의로 만듭니다.

근본 원인: 많은 OCR 엔진은 테이블 구조를 감지하기 위한 기준점으로 격자선(셀 사이의 눈에 보이는 테두리)을 사용합니다. 알고리즘은 연속적인 수직 및 수평선을 찾고, 셀 경계를 정의하며, 각 영역 내의 텍스트를 읽습니다. 현대의 인보이스, 재무 요약, HTML 내보내기에서 흔히 볼 수 있듯이 이러한 선이 없으면 엔진은 공백 패턴에서 열을 추론하는 방식으로 대체됩니다. "항목"과 "설명" 사이의 단일 공백은 OCR 엔진에게 의도적인 열 간격과 동일하게 보입니다.

해결 방법:

  • 최소 300 DPI로 스캔하세요. 더 높은 해상도는 공백 경계를 선명하게 하여 위치 기반 휴리스틱이 약간 더 잘 작동하도록 합니다. 격자선을 생성하지는 않지만 엔진에 더 많은 신호를 제공합니다.
  • "테두리 없는 테이블" 모드를 활성화하세요. 일부 OCR 엔진에는 선 감지에서 정렬 기반 추론으로 전환하는, 구분선이 없는 테이블 전용 모드가 있습니다.
  • 레이아웃 인식 추출을 사용하세요. 비전 모델은 공간 관계를 의미적으로 이해합니다. "수량" 아래의 숫자 열은 수직선이 아닌 문맥으로 인식됩니다. 이것이 OCR 정확도가 문서 유형에 따라 다른 이유입니다. 기존 OCR은 모든 문서가 제공하지 않는 시각적 특징에 의존하기 때문입니다.

원인 #4 — 다중 열 레이아웃으로 인한 가짜 행 생성

증상: 문서에 두 개의 독립적인 표가 나란히 있거나, 주요 표 오른쪽에 요약 패널이 있는 경우 추출된 출력이 두 표의 행을 섞어서 의미 없는 데이터를 만듭니다.

근본 원인: OCR은 읽기 순서(왼쪽에서 오른쪽, 위에서 아래)로 스캔합니다. 페이지에 여러 콘텐츠 열(왼쪽에는 항목, 오른쪽에는 가격 요약)이 포함된 경우 엔진은 왼쪽 열의 첫 번째 줄을 읽고 오른쪽 열로 건너간 다음 왼쪽 두 번째 줄로 돌아갑니다. 엔진은 "이것은 별도의 표다"라는 개념이 없으며, 단지 다양한 위치에 텍스트가 존재한다는 것만 인식합니다.

해결 방법:

  • 영역 선택으로 한 번에 하나의 표 추출: 각 표 주위에 경계를 개별적으로 정의하고 별도의 업로드 또는 영역으로 처리합니다.
  • 페이지 수준 레이아웃 분석 사용: 비전 기반 도구는 먼저 전체 페이지를 분석하여 각각에서 텍스트를 추출하기 전에 별도의 콘텐츠 블록을 식별합니다. 이렇게 하면 주요 표와 사이드바 요약 간의 분리가 유지됩니다.
  • 읽기 순서를 단일 영역으로 제한: 일부 엔진은 섹션 간 점프를 방지할 수 있습니다.

원인 #5 — 회전 또는 기울어진 표로 인한 열 연결 끊김

증상: 표가 약간 비스듬히 촬영되었거나 페이지가 비뚤게 급지되었습니다. 추출된 데이터에는 올바른 텍스트가 있지만 값이 이동되어 "합계" 열에 있어야 할 숫자가 "세금" 열에 나타납니다.

근본 원인: OCR 엔진에는 읽기 전에 페이지를 곧게 펴는 기울기 보정 단계가 포함됩니다. 하지만 기울기 보정은 텍스트 각도를 수정할 뿐 열 정렬은 수정하지 않습니다. 기울기 보정 후에도 엔진은 여전히 수직 투영 프로필(픽셀 밀도 히스토그램)을 사용하여 열 경계를 결정합니다. 3도 회전은 투영을 압축하여 경계를 서로 흐리게 만듭니다. 엔진은 "$12,450.00"을 4열이 아닌 3열에 배치하며, 2행 이후의 모든 셀도 동일한 정렬 불량을 따릅니다.

해결 방법:

  • OCR 전에 더 강력한 기울기 보정으로 전처리: 소스 파일 준비에 대한 자세한 내용은 전처리 가이드를 참조하세요.
  • 문서 프레이밍을 안내하는 캡처 앱 사용: 소스에서 카메라 기울기를 줄입니다.
  • 픽셀 투영에 의존하지 않는 도구 선택: 비전-언어 모델은 전체 이미지를 전체적으로 처리합니다. 비스듬히 촬영된 표도 사람의 눈에는 여전히 이해 가능하며, VLM 기반 추출도 동일한 방식으로 작동합니다.

원인 #6 — 일관되지 않은 열 머리글로 인한 데이터 매핑 오류

증상: 추출된 스프레드시트에 데이터는 있지만, 머리글이 중복되거나 일치하지 않습니다. "Invoice Date"가 한 파일에서는 "Date"로, 다른 파일에서는 "Issued"로 표시되어 병합된 출력에서 날짜가 두 열에 흩어집니다.

근본 원인: OCR은 의미를 이해하지 못합니다. "Invoice Date", "Date Issued", "Issued On"이 모두 같은 의미라는 것을 알 수 없습니다. 각 머리글을 문자 그대로 읽어 열 키로 사용합니다. 여러 공급업체의 문서를 처리하면 엔진이 각 표현 변형에 대해 별도의 열을 생성합니다. "Qty"와 "Quantity"가 하나의 열이 아닌 두 개의 열이 됩니다.

해결 방법:

  • 사전에 머리글을 정규화하세요. 사용 중인 도구가 지원한다면, 표준 열 매핑(예: "날짜", "설명", "수량", "단가", "합계")을 정의하고 엔진이 발견하는 모든 항목을 이 표준 이름에 매핑하도록 설정하세요.
  • 의미 기반 열 추출 도구를 사용하세요. 기존 머리글을 읽는 대신, 사용자 정의 열 추출을 통해 원하는 출력 열을 정의하면 AI가 문서에서 해당 필드의 명칭과 관계없이 관련 데이터를 찾습니다. 이것이 AI 기반 테이블 추출을 Excel로 하는 방식입니다: 원하는 것을 지정하면 도구가 머리글 텍스트 일치가 아닌 의미를 기반으로 데이터를 찾습니다.
  • 후처리 매핑 테이블을 적용하세요. Excel이나 Google Sheets에서 머리글 변형을 표준 이름으로 통합하는 조회 테이블을 만들고, 각 추출 실행 시 적용하세요.

문제 심각도 판단: 도구 자체가 문제인가?

위의 해결 방법으로 결과를 개선할 수 있습니다. 더 나은 전처리, 더 높은 DPI, 영역 선택 등이 가능합니다. 그러나 이 모든 것은 동일한 한계에 대한 임시 방편입니다. 기존 OCR은 테이블을 읽도록 설계되지 않았습니다. 매 배치마다 세 가지 이상의 방법을 적용해야 한다면, 도구 자체가 병목 현상입니다.

문서에 병합된 셀, 테두리 없는 테이블, 다중 열 레이아웃 또는 일관되지 않은 머리글이 포함되어 있고(대부분의 실제 비즈니스 문서가 그렇습니다), 주당 20-30개 이상을 처리한다면, 수동 정리 작업이 OCR로 절약한 시간을 상쇄할 것입니다. 이 시점에서 테이블을 2차원 구조로 처리하는 비전 기반 추출 도구로 업그레이드하는 것은 사치가 아니라 수학적으로 더 저렴한 선택입니다.

자주 묻는 질문

기존 OCR로 표를 잘 처리할 수 있나요?

간단한 표는 일부 처리 가능합니다. ABBYY FineReader와 Tesseract(표 확장 기능 포함)는 테두리가 있고 열 너비가 일정한 기본 표를 다룰 수 있습니다. 그러나 셀 병합, 테두리 없는 레이아웃, 여러 페이지에 걸친 표, 회전된 콘텐츠는 모두 어려워합니다. 한계는 구조적입니다. 엔진이 문자를 순차적으로 읽는 한 2차원 구조는 항상 추측에 불과합니다.

스캔 품질을 높이면 표 추출이 개선되나요?

더 나은 스캔(300 DPI, 정확한 급지, 균일한 조명)은 어느 정도 도움이 되지만 구조적 문제를 해결하지는 못합니다. 완벽하게 스캔된 테두리 없는 표에도 여전히 격자선은 없습니다. 완벽하게 정렬된 병합 셀도 여전히 여러 열에 걸쳐 있습니다. 이미지 품질은 문자 오류를 줄여주지만 구조 오류는 줄여주지 못합니다.

텍스트는 올바르게 인식되지만 잘못된 열에 표시되는 이유는 무엇인가요?

이는 투영 오류입니다. OCR 엔진은 각 단어의 가로 위치를 기준으로 열을 할당합니다. 문서가 기울어져 있거나 열 너비가 불규칙하면 투영된 경계가 이동합니다. 단어는 올바르게 인식되지만 잘못된 열에 할당됩니다. 데이터가 합계를 확인하기 전까지는 정확해 보이기 때문에 가장 실망스러운 오류 유형입니다.

표 OCR과 AI 표 추출의 차이점은 무엇인가요?

표 OCR은 문자 인식 후 위치 기반 휴리스틱을 사용하여 구조를 추측합니다. AI 표 추출(비전 모델 사용)은 전체 페이지를 시각적 장면으로 분석하고, 표를 레이아웃 객체로 이해하며, 구조적 맥락 내에서 콘텐츠를 추출합니다. AI는 열 경계를 "찾을" 필요가 없습니다. 셀 간의 시각적 관계를 통해 이미 표가 표임을 알기 때문입니다. 이는 근본적으로 다른 기술적 접근 방식입니다.

AI 기반 추출이 표에서 100% 정확할까요?

모든 문서에서 100% 정확한 도구는 없습니다. 매우 조밀한 표, 심하게 변형된 스캔본, 일부 필기 항목은 여전히 검토가 필요합니다. 그러나 오류 유형이 다릅니다. 기존 OCR은 구조적 오류(잘못된 열, 데이터 병합)를 발생시키는 반면, AI 추출은 개별 셀에서 문자 수준 오류를 발생시켜 발견하고 수정하기 더 쉽습니다. OCR의 단일 열 이동은 모든 행을 손상시킬 수 있지만, AI 추출에서 단일 셀 오독은 고립된 수정으로 끝납니다.

추출 도구와의 싸움을 멈추세요

위의 여섯 가지 원인은 작업 흐름의 결함이 아닙니다. 이는 문단용으로 설계된 기술의 구조적 한계입니다. ImageToTable.ai는 모든 표를 2차원 시각 구조로 처리합니다. 줄 단위로 읽지 않으며, 격자선이 필요하지 않습니다. "송장 번호", "항목", "합계" 등 원하는 열을 정의하면 AI가 의미를 이해하여 데이터를 찾습니다. 페이지에서의 위치가 아니라 의미를 기준으로 말이죠.

샘플 송장을 업로드하고 필요한 열 이름을 지정해 보세요. 사람처럼 페이지를 이해하는 도구가 표를 읽을 때 어떤 일이 일어나는지 확인해 보십시오. 단순한 문자 인식이 아닌 페이지 이해를 기반으로 합니다.

📮 contact email: [email protected]