복사 불가능한 문서에서 텍스트를 추출해 LLM에서 사용할 수

텍스트 선택이 불가능한 스캔 도서, 슬라이드 덱, PDF 뷰어의 제약은 OCR It(광학 문자 인식 도구)을 통해 해소된다. 이 Chrome 확장 프로그램은 뷰어 내에 갇혀 텍스트 선택이 불가능했던 수백 페이지의 문서를 텍스트 파일로 변환한다. 이렇게 추출된 결과물은 Claude나 ChatGPT와 같은 LLM(대규모 언어 모델)에 전달하여 요약, 검색, 특정 정보에 대한 질문 등에 활용할 수 있다. 수백 페이지의 비선택 텍스트를 LLM이 처리 가능한 데이터로 전환하여 분석의 제약을 없애는 구조다.

추출 과정은 캡처 영역 지정에서 시작한다. 사용자가 캡처 영역을 한 번 설정하면, 이후 단축키를 누를 때마다 해당 사각형 영역의 스크린샷을 찍고 OCR을 수행하여 텍스트를 순차적으로 추가한다. ⌥⇧S는 페이지당 한 번씩 수동으로 캡처할 때 사용하며, ⌥⇧A는 캡처와 페이지 넘김 과정을 문서가 끝날 때까지 자동으로 반복 수행하는 기능을 제공한다. 캡처된 텍스트는 순서대로 기록되어 하나의 트랜스크립트로 생성되며, 사용자가 직접 내용을 수정할 수 있다.

저장된 좌표(stored point) 방식을 사용하여 DOM

CSS 선택자가 무효화되는 DOM(문서 객체 모델) 재렌더링 상황에서도 페이지 넘김을 유지하기 위해 저장된 좌표(stored point) 방식을 적용했다. 일반적인 CSS 선택자는 DOM 구조가 빈번하게 변경되는 환경에서 무효화되지만, 저장된 좌표는 이러한 재렌더링 이후에도 유효한 지점을 추적해 동작한다. 교차 출처 경계에서는 postMessage(브라우저 간 메시지 전송 API)를 통해 오프셋을 전달하며 제어권을 유지한다. pointerdown, mousedown, pointerup, mouseup, click으로 이어지는 전체 이벤트 시퀀스를 순차적으로 생성해 뷰어를 조작하는 방식이다. 이는 iframe 환경과 같이 보안 경계가 엄격한 웹 구조에서도 페이지 제어 기능을 안정적으로 보장한다.

영어, 포르투갈어, 스페인어 3개 언어가 확장 프로그램에 기본 포함되어 있으며 Tesseract(오픈소스 OCR 엔진)의 다른 언어 모델을 추가할 수 있다. Tesseract가 제공하는 약 100여 개의 언어 모델 중 필요한 파일을 확장 프로그램에 직접 포함하는 벤더링(vendoring) 작업이 선행되어야 한다. 런타임에 모델 파일을 외부 서버에서 가져오는 과정이 없으므로 설치 단계에서 모든 리소스가 확정된다. eng+por와 같이 두 가지 언어 코드를 함께 설정하면 한 페이지 내에 혼용된 다국어 텍스트도 동시에 인식 가능하다. 네트워크 호출을 완전히 배제한 로컬 모델 기반의 다국어 처리 구조를 구현했다.

확인해야 할 핵심 지점

로컬 환경과 클라우드 서버 중 어디에서 연산을 처리하느냐에 따라 데이터 보안 수준이 결정된다. Tesseract(광학 문자 인식 엔진) 빌드를 내장해 모든 OCR 작업을 로컬에서 수행한다. API 키나 네트워크 연결이 필요 없으며 이미지는 사용자 기기 외부로 전송되지 않는다. 확장 프로그램이 외부로 어떠한 요청도 보내지 않는 구조이므로 데이터 유출 경로가 원천적으로 차단된다. 서버 통신 과정에서 발생하는 지연 시간이나 보안 취약점 문제를 배제한 설계다.

Chrome 내장 PDF 뷰어는 텍스트 추출은 가능하나 자동 페이지 넘김 기능은 지원하지 않는다. PDF 뷰어는 확장 프로그램이 주입될 수 없는 플러그인 형태이므로 합성 키 이벤트를 통해 페이지를 자동으로 넘기는 제어가 불가능하다. 사용자가 직접 PageDown 키 등을 눌러 수동으로 페이지를 전환해야 한다. 이는 확장 프로그램이 접근할 수 없는 독립적인 플러그인 구조에서 기인한 제약이다. 텍스트 추출 기능 자체는 정상적으로 작동한다.

영역 지정은 ⌥⇧R, 단일 캡처는 ⌥⇧S, 자동 실행은 ⌥⇧A 단축키로 제어하며 세부 설정은 `chrome://extensions/shortcuts`에서 확인한다. 데이터 유출 우려가 있는 폐쇄적 문서 뷰어의 내용을 LLM에 입력하기 위한 전처리 도구로 활용 가능하다.