에이전트·RAG

AGENT / 52번째 글

PDF를 텍스트로 바꾸는 데서 대부분이 무너진다

PDF 안에는 글자와 좌표만 있고 문단·단·표·헤딩은 없습니다. 읽기 순서가 왜 어긋나는지, 파서를 문서마다 어떻게 고르는지, 헤딩을 살리는 것이 왜 그렇게 값을 하는지 정리합니다.

PALDYN Team12 MIN READ

지난 글 끝에서 조건 하나를 남겨 두었다. 청크에 「3장 > 3.2 환불 규정」 같은 헤딩 경로를 붙이려면, 파서가 그 줄을 헤딩으로 알아봤어야 한다는 조건이다. PDF에서 잘라 온 문서라면 그 보장이 없다.

검색이 안 되는 원인을 좇아가다 보면 이 자리에서 끝나는 경우가 많다. 임베딩 모델도 아니고 청킹 크기도 아니고, 애초에 색인에 들어간 글자가 원문과 다른 것이다. 그리고 이 단계는 뒤에서 손댈 수 없다 — 무너진 텍스트를 아무리 잘 잘라도 무너진 청크가 나온다.

PDF 안에는 문서가 없다

PDF는 인쇄 결과를 재현하려고 만든 형식이다. 그래서 파일 안에 실제로 들어 있는 것은 「이 글자를 이 좌표에 이 글꼴로 그려라」라는 명령의 목록이다. 문단, 단, 제목, 표, 목록, 각주는 하나도 들어 있지 않다. 그것들은 사람이 눈으로 보고 만들어 내는 구조다.

그래서 텍스트 추출기가 하는 일은 「추출」이 아니라 복원이다 — 흩어진 글자 좌표에서 원래 구조를 되짚어 세우는 일이고, 되짚기이므로 틀릴 수 있다. 가장 자주 틀리는 것이 순서다.

2단 편집에서 문장이 섞이는 이유

좌표를 위에서 아래로만 훑으면 2단 편집에서 왼쪽 단 첫 줄, 오른쪽 단 첫 줄, 왼쪽 단 둘째 줄 순으로 나온다. 문장 한가운데가 다른 단의 문장과 이어 붙는다. 이 상태로 청킹하면 청크마다 두 주제가 번갈아 섞인 글이 된다.

순서 말고도 자주 어긋나는 자리가 넷 더 있다.

머리말과 꼬리말이 본문 사이에 낀다. 쪽마다 「팔딘 내부 문서 · 12」 같은 줄이 반복되면 청크마다 그 문장이 들어간다. 청크 100개가 모두 같은 문장을 품고 있으면 벡터가 그쪽으로 조금씩 끌려간다.

각주가 본문에 섞인다. 각주 표시 숫자가 본문 낱말 사이에 그대로 들어가 「환불은 7일2 이내」 같은 문자열이 된다.

띄어쓰기가 사라지거나 늘어난다. 자간을 좌표로 조절한 문서에서는 글자 사이 간격을 공백으로 볼지 말지가 임계값 문제가 된다. 한글 문서에서 특히 자주 어긋난다.

표가 줄글이 된다. 표의 셀을 왼쪽 위부터 훑어 이어 붙이면 「구분 2024년 2025년 매출 120 138 영업이익 8 11」 같은 줄이 나온다. 어느 숫자가 어느 해의 어느 항목인지 사라진다.

파서는 문서마다 다르게 고른다

여기서 흔한 실수는 저장소 전체에 파서 하나를 고르는 것이다. 문서마다 필요한 것이 다르므로, 파일 하나씩 물어서 정하는 것이 맞다.

파서는 문서가 고른다

필요 없는 단계를 태우면 정확도가 오히려 떨어진다. 텍스트 레이어가 멀쩡한 PDF를 이미지로 바꿔 OCR을 돌리면, 원래 정확했던 글자에 인식 오류가 새로 생긴다. 무거운 파서가 항상 나은 것이 아니다.

갈래는 셋이다.

갈래 하는 일 강한 곳 약한 곳
텍스트 추출기 글자와 좌표를 그대로 꺼낸다 워드에서 바로 뽑은 PDF, 한 단짜리 문서 다단, 표, 스캔본
레이아웃 모델 파서 블록을 검출해 종류를 붙이고 순서를 정한다 2단 논문, 보고서, 헤딩이 필요한 문서 느리고 비싸다
비전 모델 파서 쪽 이미지를 모델이 읽고 마크다운으로 적는다 복잡한 표, 도형 안 글자 없는 글자를 지어낼 수 있다

세 번째가 요즘 늘고 있는데, 대가가 다르다는 점을 알고 써야 한다. 앞의 둘은 틀리면 순서가 어긋나거나 글자가 빠진다. 비전 모델은 틀리면 원문에 없는 그럴듯한 글자를 적는다. 숫자 하나가 조용히 바뀐 표는 순서가 뒤엉킨 텍스트보다 위험하다. 금액·기한·수량이 답의 근거가 되는 문서에서는 원본 셀 값과 대조하는 검사가 따로 있어야 한다.

살려야 할 것은 헤딩이다

파서를 고를 때 기준으로 삼을 것은 「텍스트가 얼마나 예쁘게 나오는가」가 아니라 구조가 남는가이다. 파서가 마크다운으로 내보내면 뒤 단계가 전부 쉬워진다.

# 2026년 2분기 실적 보고서

## 3. 구독 부문

### 3.2 환불 규정

이번 분기 매출은 전년 대비 3% 늘었습니다.

이 형태가 되면 세 가지가 자동으로 따라온다.

청킹 경계가 생긴다. 청킹 전략에서 문단·절 경계를 지키라고 한 그 경계가 헤딩이다. 글자 수로만 자르면 절 한가운데가 잘리는데, 헤딩이 있으면 절 단위로 자르고 긴 절만 나눌 수 있다.

맥락 문장을 공짜로 얻는다. 지난 글의 표에 있던 「상위 헤딩 이어 붙이기」가 그대로 된다. 모델을 부르지 않고도 청크마다 「2026년 2분기 실적 보고서 > 3. 구독 부문 > 3.2 환불 규정」을 붙일 수 있다.

메타데이터로 걸러 낼 수 있다. 「3장에서만 찾아라」 같은 조건이 가능해진다.

반대로 헤딩이 평범한 문단으로 내려앉으면 이 셋이 전부 사라진다. 그래서 파서 비교는 헤딩 인식률부터 본다.

PDF만 문제인 것은 아니다

다른 형식에도 각자의 함정이 있다.

형식 자주 무너지는 자리 대응
HTML 네비게이션·광고·푸터가 본문에 섞인다 본문 추출기로 먼저 걸러 낸다
DOCX 변경 이력·주석이 본문으로 섞인다 수락된 최종본만 남기고 주석은 뺀다
슬라이드 도형 안 글자라 순서가 없다 쪽 단위로 묶고 발표자 노트를 함께 담는다
이메일 인용된 이전 메일이 반복해서 들어간다 인용 부분을 잘라 내고 스레드 하나를 한 문서로
스프레드시트 시트가 문서가 아니라 표다 표로 다룬다 — 줄글로 펴지 않는다

슬라이드와 이메일이 특히 자주 새는 자리다. 슬라이드는 도형마다 좌표만 있어 읽기 순서 문제가 PDF보다 심하고, 이메일은 스레드가 길수록 같은 문장이 여러 문서에 중복 색인된다. 중복된 문장은 검색 결과 상위를 자기들끼리 채워 다른 문서를 밀어낸다.

파싱이 잘됐는지 재는 법

파싱 품질은 눈으로 보면 알지만, 문서가 만 개면 눈으로 볼 수 없다. 자동 신호 몇 개를 걸어 두고 걸린 것만 본다.

빈 쪽 비율. 텍스트가 거의 안 나온 쪽이 있으면 스캔본이거나 추출 실패다.

한 줄 길이 분포. 평균이 지나치게 짧으면 줄바꿈이 과하게 들어간 것이고, 지나치게 길면 문단 경계가 다 뭉개진 것이다.

반복 문자열 비율. 같은 줄이 쪽마다 나오면 머리말·꼬리말이 안 걸러진 것이다.

헤딩 개수. 200쪽 문서에서 헤딩이 0개면 구조가 통째로 사라진 것이다.

그리고 문서 종류마다 표본 열 개씩은 사람이 읽는다. 자동 신호는 「무너졌다」를 잡지 「조용히 틀렸다」를 못 잡는다. 새 종류의 문서가 들어올 때마다 이 표본 검수를 한 번씩 하는 것이 가장 확실하다.

검수한 표본은 그대로 회귀 세트가 된다. 파서를 바꿀 때 같은 파일을 다시 돌려 결과를 비교하면, 「좋아졌다는데 어디가 나빠졌는지 모르는」 상태를 피할 수 있다.

정리

  • PDF 안에는 글자와 좌표만 있다. 문단·단·헤딩·표는 파서가 되짚어 세우는 것이다
  • 2단 편집의 읽기 순서, 머리말·꼬리말, 각주, 표가 자주 어긋나는 자리다
  • 파서는 저장소가 아니라 문서마다 고른다. 필요 없는 단계를 태우면 오히려 나빠진다
  • 비전 모델 파서는 없는 글자를 지어낼 수 있다. 숫자가 근거인 문서에서는 대조 검사가 따로 필요하다
  • 파서 비교의 기준은 예쁜 텍스트가 아니라 헤딩이 남는가다
  • 자동 신호로 무너진 것을 걸러 내고, 종류마다 표본은 사람이 읽는다

읽어주셔서 감사합니다. 😊

LATEST

에이전트·RAG의 최신 글

에이전트·RAG2026.08.23

에이전트는 어디서 어긋나기 시작하는가

에이전트가 이상한 답을 낼 때 증상은 마지막에 보이지만 어긋난 자리는 그보다 앞입니다. 한 걸음이 무너지는 여섯 자리를 나누고, 증상에서 원인을 거슬러 찾는 방법과 자리별 처방을 정리합니다.

11 MIN
에이전트·RAG2026.08.23

에이전트가 무엇을 했는지 나중에 알 수 있게 만들기

에이전트는 같은 입력에도 다른 경로로 갑니다. 그래서 로그 몇 줄로는 왜 그렇게 됐는지 복원이 안 됩니다. 트레이스를 어떻게 나누고 구간마다 무엇을 붙이며 어떤 지표를 볼지 정리합니다.

11 MIN
에이전트·RAG2026.08.23

에이전트 비용은 걸음 수보다 빨리 늘어난다

걸음이 두 배면 비용은 두 배가 아니라 서너 배입니다. 왜 그렇게 되는지, 어디서 새는지, 상한을 몇 겹으로 어떻게 거는지와 실제로 효과가 큰 순서대로의 대응을 정리합니다.

13 MIN