본문 바로가기
AI 코딩/클로드 코드

PDF 텍스트가 안 나올 때 — 스캔본인 줄 알았는데 앞 4쪽만 읽고 있었습니다

by 아트스탁 2026. 8. 22.
한눈에
  • 26~97쪽짜리 인뎁스 리포트 1,129개·6.3GB를 같은 도구로 처리했습니다. 앞 편 엔진을 복사하지 않고 «어디서 가져오나»만 갈아끼웠습니다 — 그래서 한쪽을 고치면 양쪽이 같이 좋아집니다.
  • 「스캔한 PDF라 글자를 못 읽는다」고 몇 달을 믿었는데 틀렸습니다. 제 코드가 앞 네 쪽만 읽고 있었고, 두꺼운 리포트는 앞 네 쪽이 표지·목차입니다.
  • 86쪽 문서에서 4,361자만 읽고 있었습니다 — 전문 120,000자의 3.6%입니다. 「전 페이지를 읽어라」 한 줄로 고쳤고, 스캔으로 분류했던 155건 중 절반이 정상 문서로 돌아왔습니다.
  • PDF가 1,000개를 넘으면 눈으로 못 찾습니다. 파일 이름의 낱말로 갈래를 나눠 폴더로 옮기고, 기준을 고치면 이미 쌓인 것도 다시 분류합니다 — 옮기기 전에 «무엇을 어디로»를 먼저 보여줍니다.

앞 편에서 만든 도구를 다른 자료에 붙였습니다. 이번 상대는 인뎁스 리포트입니다. 한 편이 26쪽에서 97쪽까지 가는 두꺼운 산업 분석 자료입니다.

지금 1,129개, 6.3GB가 쌓여 있습니다. 여기서 제가 몇 달을 잘못 알고 있던 것을 하나 발견했습니다.

엔진은 새로 만들지 않았습니다

가장 먼저 한 결정입니다. 앞 편의 도구를 복사해서 고치지 않았습니다.

앞 편 도구는 다섯 단계였습니다 — 수집 · 정독 · 작성 · HTML · 발송. 이 중 바뀌어야 하는 건 「수집」 하나뿐이었습니다. 자료가 어디서 오느냐만 다르고, 읽고 요약하고 꾸며서 보내는 일은 똑같습니다.

① 수집만 갈아끼우고 ②~⑤는 그대로 씁니다. 새 폴더에는 「어디서 가져오나」와 「어디에 저장하나」만 들어 있고, 정독 지시문·화면 틀·전송은 앞 편 것을 그대로 불러 씁니다.

이렇게 하면 앞 편에서 고친 것이 이쪽에도 자동으로 적용됩니다. 요약 오류를 막는 지시문을 손보면 두 곳이 같이 좋아집니다. 복사해뒀다면 한쪽만 고치고 다른 쪽은 옛날 상태로 남았을 겁니다.

실제로 앞 편 문서에 "①만 바꾸면 다른 자료에도 쓸 수 있다"고 적어뒀는데, 그 설계가 처음으로 값을 했습니다.

「스캔한 PDF라 못 읽는다」고 믿고 있었습니다

붙이고 나니 이상했습니다. 요약이 자꾸 부실했습니다. 97쪽짜리 산업 분석인데 나오는 요약이 짧고 알맹이가 없습니다.

그리고 155건은 아예 글자가 안 잡혔습니다. 저는 "이건 스캔한 이미지 PDF구나, 글자가 없으니 어쩔 수 없다"고 결론 내렸습니다. 그럴듯했습니다.

97쪽짜리를 앞 네 쪽만 읽고 있었다

둘 다 틀렸습니다. 원인은 하나였습니다. 글자를 뽑는 부분이 앞 네 쪽만 읽고 있었습니다.

앞 편에서 다루던 리포트는 몇 쪽짜리라 네 쪽이면 충분했습니다. 그 코드를 그대로 가져다 97쪽짜리에 쓴 것입니다. 실제로 재보니 이랬습니다.

문서 읽고 있던 양 실제 전문
38쪽 4,009자 59,922자 (7%)
78쪽 2,959자 119,945자 (2.5%)
86쪽 4,361자 120,000자 (3.6%)

그리고 「스캔이라 못 읽는다」던 155건 중 절반은 스캔이 아니었습니다. 두꺼운 리포트는 앞 네 쪽이 표지·목차·면책 문구입니다. 거기엔 뽑을 글자가 거의 없습니다. 그래서 「글자 없음 = 스캔 문서」로 잘못 판정한 것입니다.

제가 내린 진단이 「이 파일은 스캔본이다」였는데, 실제 사실은 「내가 표지만 봤다」였습니다. 그리고 이 오진이 문제를 고칠 수 없는 것처럼 만들었습니다. 스캔본이라면 방법이 없으니까요. 원인을 잘못 짚으면 포기까지 하게 됩니다.

고친 건 「전 페이지를 읽어라」 한 줄입니다. 스캔 여부를 판정하는 기준도 전문 기준으로 바꿨습니다. 그러자 요약이 살아났고, 155건 중 절반이 정상 문서로 돌아왔습니다.

파일이 쌓이면 찾을 수가 없습니다

다음 문제는 정리였습니다. PDF가 매일 몇 개씩 들어오는데 한 폴더에 쌓이니 1,000개가 넘어가면서 눈으로 못 찾게 됐습니다.

PDF 1,129개를 파일 이름으로 자동 분류

그래서 파일 이름을 보고 갈래를 나눠 폴더로 옮기는 것을 만들었습니다. 파일명에 들어 있는 낱말로 판단합니다 — 반도체·데이터센터 계열인지, 통신·우주 계열인지, 전력·2차전지 계열인지 같은 식입니다.

완벽하진 않습니다. 파일 이름이 애매하면 엉뚱한 데로 갑니다. 그래서 두 가지를 같이 넣었습니다.

① 기준을 고치면 이미 쌓인 것도 다시 분류합니다. 낱말 목록을 손봤는데 새 파일만 적용되면, 폴더 안에 옛 기준과 새 기준이 섞입니다. 그러면 나중에 어느 규칙으로 들어간 건지 알 수 없게 됩니다.

② 옮기기 전에 무엇을 어디로 옮길지 먼저 보여줍니다. 1,000개가 넘는 파일을 한 번에 움직이는 일이라, 잘못 짠 규칙 하나가 전부를 헝클 수 있습니다. 목록을 눈으로 확인하고 나서 실행합니다.

정리하면

이번 편의 교훈은 하나로 모입니다. 「안 되는 이유」를 스스로 만들어내지 말 것.

저는 「스캔본이라 안 된다」고 결론 내리고 몇 달을 그대로 뒀습니다. 실제로는 제 코드가 네 쪽만 읽고 있었을 뿐이고, 고치는 데는 한 줄이 들었습니다.

돌아보면 확인하지 않고 넘어간 지점이 정확히 거기였습니다. "글자가 안 잡힌다 → 스캔이겠지"에서 멈췄고, "정말 스캔인가"를 안 물었습니다. 파일 하나만 열어봤어도 표지라는 걸 알았을 겁니다.

다음 편은 장마감 시황 브리핑입니다. 거기서는 반대로, 막아둔 장치가 제 손으로 무너진 이야기를 적겠습니다.

※ 이 글은 개인의 개발 기록입니다. 리포트 원문·수집 경로·내용은 공개하지 않으며, 특정 종목의 매수·매도를 권유하지 않습니다. 증권사 리포트의 저작권은 각 발행사에 있습니다.