헬스케어 제조 · 품질 · 사례

그림으로 붙은 표와 손글씨 기재값을, 행과 열이 살아 있는 표 데이터로 되돌린다

고객 PoC · 데모읽는 데 5분Consilience Team

이걸로 되는 일손글씨 기재값과 캡처 이미지 표가 섞인 QbD 품질문서를, 병합 셀과 비정형 레이아웃까지 처리해 행과 열이 살아 있는 검색·집계 가능한 표 데이터로 받는다.

한 헬스케어 제조사의 품질관리 부서. 공유 폴더와 캐비닛에 품질문서가 쌓여 있다. 설계 단계의 실험값, 검증 결과, 조건별 측정치가 표 안에 정리된 문서들이다. 담당자는 어느 칸에 어떤 값이 손으로 적혀 있는지, 어떤 표가 화면을 캡처해 붙인 그림인지 한눈에 안다.

문제는 시스템이다. 같은 문서를 검색하거나 집계하려는 순간, 시스템은 그 표를 '글자'가 아니라 '그림'으로 본다. 손으로 적은 숫자는 잡히지 않고, 이미지로 붙은 표는 행과 열이 사라진 한 장의 사진일 뿐이다. 그 간극이 품질 데이터 활용의 출발선을 막고 있었다.

그래서 이 회사는 Consilience와 순서를 정했다. 똑똑한 분석을 약속하기 전에, 먼저 문서를 제대로 '읽을 수 있게' 만드는 일부터 증명한다. 이 글은 그 첫 단계인 고객 PoC(Proof of Concept, 실제로 되는지 검증하는 시범 프로젝트)의 기록이다.

한 장 안에 인쇄·손글씨·캡처 이미지가 섞여 있다

이 회사의 품질문서는 한 장 안에 세 가지가 뒤섞여 있다. 인쇄된 항목명, 현장에서 손으로 적은 기재값, 그리고 화면에서 만든 표를 그대로 캡처해 붙인 이미지다. 대표적인 예가 QbD(Quality by Design, 품질을 설계 단계부터 미리 계획하는 방식) 관련 문서다. 설계와 실험, 검증 데이터가 모두 표로 들어가는데, 그 표의 일부는 손글씨로 채워지고 일부는 그림으로 붙어 있다.

  • 공유 폴더와 캐비닛에 쌓인 품질문서. 설계 단계의 실험값, 검증 결과, 조건별 측정치가 표 안에 정리돼 있다
  • QbD 관련 문서. 설계·실험·검증 데이터가 모두 표로 들어간다
  • 인쇄된 항목명 — 미리 인쇄된 양식 쪽이다
  • 손으로 적은 기재값 — 현장에서 채워 넣은 데이터다. 사람마다 글씨체가 다르다
  • 화면에서 만든 표를 캡처해 붙인 이미지 — 행과 열 구조가 통째로 사라진 픽셀 덩어리다
  • 까다로운 케이스: 한 셀 안의 손글씨, 여러 칸이 하나로 병합된 셀, 정해진 격자를 따르지 않는 비정형 레이아웃

누군가 한 장씩 보며 값을 옮겨 적어야 시작된다

사람에게는 아무 문제가 없다. 손으로 적힌 값을 읽고, 어느 열에 속하는지 가늠하고, 그림 속 표라도 행과 열을 눈으로 따라간다. 하지만 이 문서를 데이터로 다루려는 순간 벽에 부딪힌다. 손글씨와 이미지 표는 검색도 집계도 되지 않는다. 그림으로 붙은 표는 다시 표로 복원하기 전에는 한 칸의 값도 꺼내 쓸 수 없다. 결국 누군가는 문서를 한 장씩 들여다보며 값을 손으로 옮겨 적어야 한다. 품질문서를 토대로 한 검색도, 분석도, 지식화도 그 전처리가 끝나야 비로소 시작된다.

인쇄된 글자만 있다면 일반 OCR(Optical Character Recognition, 이미지 속 글자를 텍스트로 바꾸는 기술)로 충분하다. 문제는 손글씨가 섞이는 순간 인식 난도가 급격히 올라간다는 점이다. 같은 칸 안에 인쇄된 항목명과 손으로 적은 값이 함께 들어 있으면, 무엇이 미리 인쇄된 양식이고 무엇이 사람이 적어 넣은 데이터인지부터 가려내야 한다. 표 구조도 만만치 않다. 한 셀에 손글씨가 들어가 있거나, 여러 칸이 병합되어 있거나, 비정형 레이아웃이라면, 단순한 OCR은 표를 엉뚱하게 쪼개거나 값을 잘못된 칸에 밀어 넣고 무너진다.

쉬운 문서만 처리하는 시연은 의미가 없다. 현장의 까다로운 문서를 견뎌야 비로소 쓸모가 있다.

품질문서를 "소스 추출" 마법사에 넣는다

이번 PoC의 전략은 분명했다. 한 번에 모든 걸 약속하지 않고, 문서 전처리가 제대로 되는지부터 검증한다. 이것이 성공해야 그 위에 의미를 잇는 단계를 올린다는 순서다. 그래서 시연도 전처리 한 갈래만 겨눴다. 사람이 따라 볼 수 있는 화면 흐름으로 보이고, 마지막에 구조화된 산출물까지 실제로 만들어 내는 것이 목표였다.

전처리 화면 흐름

  1. ⌘⇧I로 "소스 추출"을 연다

    왼쪽 사이드바의 "소스 추출하기" 버튼이나 단축키 Cmd+Shift+I(Windows: Ctrl+Shift+I)로 마법사를 연다. 품질문서를 창에 끌어다 놓거나 "직접 추가하기" → "파일 추가"·"폴더 추가"로 넣는다. 각 행에는 종류 라벨이 붙는다: 문서, PDF, 이미지.

  2. "가져오기"를 누른다

    워크스페이스가 열려 있고 소스가 하나라도 있으면 버튼이 켜지고, 누르는 순간 바로 시작된다. 라이브 체크리스트의 첫 단계 "파일 읽는 중"이 마크다운 변환을 돌린다.

  3. 파일별 상태 배지를 읽는다

    스캔본이나 그림 위주 문서 행에는 "OCR…" 배지가 떠 있다. 비전 호출이 진행 중이라는 뜻이다. ✓는 노트 기록 완료다. 주황색 "첨부됨"은 마크다운으로 바꾸지 못하고 원본만 첨부한 자리표시 노트라는 뜻이라, 마우스를 올려 이유를 확인한다.

  4. 변환된 노트를 열어 표를 확인한다

    ✓ "문서 준비가 끝났어요"가 뜨면 노트를 연다. 그림이던 표가 행과 열이 살아 있는 표로 들어왔는지, 손으로 적은 기재값이 제 칸에 들어갔는지 본다. 원본 문서는 손대지 않고 attachments/ 아래에 그대로 보관되며, 변환된 노트에서 링크로 이어진다.

전처리를 끝낸 표에 묻는다

변환된 노트를 열고 확인하는 것
"이 칸의 값은 인쇄된 항목명인가, 사람이 적어 넣은 기재값인가?"
→ 인쇄 텍스트와 손글씨가 섞인 영역을 함께 읽어,
   손으로 적은 기재값과 인쇄된 항목명을 구분해 인식한다.

"그림으로 붙어 있던 이 표의 한 칸 값을 꺼낼 수 있나?"
→ 이미지로 붙은 표를 인식해 행·열·셀 구조를 되살린다.
   픽셀 덩어리이던 표가 다시 다룰 수 있는 표 데이터로 돌아온다.

"병합된 셀과 격자를 벗어난 레이아웃은 어떻게 됐나?"
→ 한 셀 안의 손글씨, 병합 셀, 비정형 레이아웃은 별도로 처리한다.
   표를 엉뚱하게 쪼개거나 값을 잘못된 칸에 밀어 넣지 않는다.

전처리는 이 세 갈래로 나눠 다뤘다. 이미지 표의 구조 복원, 인쇄와 손글씨가 섞인 영역의 구분 인식, 그리고 까다로운 케이스의 별도 처리다. 세 번째를 그냥 두면 깔끔한 문서에서만 동작하는 '데모용' 결과에 머물기 때문에 따로 떼어 다뤘다.

이 답들은 '되는가'에 대한 답이지 '얼마나 잘 되는가'에 대한 답이 아니다. 이번 단계에서 확인한 것은 흩어져 있던 손글씨와 그림 속 값들이 검색하고 집계할 수 있는 표 데이터로 정리되어 나오는 모습이다. 인식이 몇 퍼센트 맞는지는 이 자리에서 확정하지 않았다.

무엇이 달라지고, 무엇은 아직인가

예전이번 PoC에서 시연한 것
손으로 적은 숫자는 검색에 잡히지 않는다인쇄된 항목명과 손글씨 기재값을 구분해 인식한다
이미지로 붙은 표는 행과 열이 사라진 한 장의 사진이다행·열·셀 구조를 되살려, 한 칸의 값을 꺼내 쓸 수 있는 표 데이터로 되돌린다
병합 셀·비정형 레이아웃에서 단순 OCR은 값을 잘못된 칸에 밀어 넣고 무너진다까다로운 케이스를 별도로 처리해, 깔끔한 문서에서만 되는 데모로 끝나지 않는다
누군가 문서를 한 장씩 보며 값을 손으로 옮겨 적어야 검색·분석이 시작된다구조화된 산출물이 나와, 검색하고 집계할 수 있는 표 데이터로 정리된다
  • 확정(사실): 손글씨·이미지 표가 섞인 품질문서의 전처리 화면 흐름 시연, 구조화된 최종 산출물 생성
  • 미측정: 인식 정확도·처리 속도 등 정량 성능 — 아직 측정 전
  • 향후 계획(미착수): 구조화된 데이터를 온톨로지·지식그래프로 연결하는 단계

이번 고객 PoC에서 확정된 사실은 하나다. 손글씨와 이미지 표가 뒤섞인 품질문서를 대상으로 전처리의 화면 흐름을 시연하고, 구조화된 최종 산출물까지 실제 화면으로 만들어 보였다.

그림으로 붙은 표와 손글씨 기재값을, 행과 열이 살아 있는 표 데이터로 되돌린다 · Consilience