- 검색 엔진에 PDF 인덱싱이 추가됐지만, PDF에서 검색에 쓸 만한 구조화 텍스트를 얻는 일은 HTML 처리보다 훨씬 까다로움
- PDF는 텍스트 문서라기보다 좌표 기반 그래픽 형식에 가까워 글리프가 회전·겹침·순서 뒤섞임 상태로 배치될 수 있음
- PDFBox의 PDFTextStripper는 출발점이 될 수 있지만, 제목·문단 같은 의미 구조를 충분히 살리지 못해 검색 관련성 판단에 한계가 있음
- 제목과 문단을 구분하려면 문서 전체 기준보다 페이지별 글꼴 크기 통계와 줄 간격 중앙값 같은 휴리스틱이 더 유용함
- 완벽한 PDF 텍스트 추출은 어렵기 때문에, 검색 엔진에는 제목·초록·본문 구조를 안정적으로 얻는 충분히 좋은 해법이 현실적인 목표임
PDF 인덱싱을 추가하며 드러난 문제
- 검색 엔진은 최근 PDF 파일 형식을 인덱싱할 수 있게 되었고, 변경 사항은 몇 달 동안 배포될 예정임
- 검색 엔진 입장에서는 깔끔한 HTML이 가장 다루기 쉽지만, PDF는 같은 수준의 구조화 텍스트를 바로 제공하지 않음
- 겉으로는 텍스트가 보이더라도, PDF 내부에서 검색 가능한 문장과 문단을 복원하는 일은 별도 문제에 가까움
PDF가 텍스트 추출에 어려운 이유
- PDF는 일반적인 텍스트 형식이 아니라 그래픽 형식에 가까움
- 내부 표현은 문장이나 문단보다 “종이” 위 좌표에 글리프를 배치한 형태에 가까움
- 글리프는 다음과 같은 상태일 수 있음
- 회전되어 있음
- 서로 겹쳐 있음
- 읽는 순서와 다르게 나타남
- 붙어 있는 의미 정보가 매우 적음
- PDF 뷰어나 브라우저에서
ctrl+f검색이 되는 것 자체가 꽤 놀라운 결과임 - 비전 기반 머신러닝 모델이 현재로서는 좋은 접근일 수 있지만, GPU 없는 단일 서버에서 수백 GB의 PDF를 처리하는 규모에는 맞지 않음
PDFBox로 시작할 수 있지만 충분하지 않음
- 완전히 미개척 문제는 아니어서 PDFBox의 PDFTextStripper 클래스를 출발점으로 삼을 수 있음
- PDFTextStripper는 PDF에서 텍스트를 추출하지만, 이름 그대로 텍스트를 벗겨내는 데 초점이 있음
- 검색 엔진에는 제목 같은 의미 정보가 중요한 관련성 신호인데, 기본 추출 결과만으로는 이런 구조를 충분히 얻기 어려움
제목을 찾기 위한 휴리스틱
- 가장 단순한 제목 탐지는 다른 텍스트와 떨어져 있는 semibold 이상 굵기의 줄을 찾는 방식임
- 하지만 모든 제목이 굵게 표시되지는 않고, 많은 문서는 글꼴 크기로 제목을 구분함
- 전역 글꼴 크기 기준점은 문서마다 흔들림
- 어떤 문서는 본문 10pt, 제목 16pt를 쓸 수 있음
- 다른 문서는 본문 14pt, 제목 20pt를 쓸 수 있음
- 문서 전체보다 페이지별 통계가 더 적합할 때가 있음
- 첫 페이지는 초록과 저자 목록 때문에 나머지 페이지와 글꼴 선택이 크게 다를 수 있음
- 예시 문서에서는 문서 제목에 17 크기 글꼴이 쓰이고, 이후 제목에는 14 크기 글꼴이 쓰임
- 각 페이지에는 대체로 본문에 해당하는 지배적 글꼴 크기가 있음
- 페이지별 중앙 글꼴 크기에 약 20% 정도의 계수를 붙이면 제목을 꽤 안정적으로 식별할 수 있음
- 예외는 남지만, 중요한 사례 대부분은 잡아낼 수 있음
여러 줄 제목을 하나로 합치기
- 제목은 스타일 때문에 여러 줄로 나뉘는 경우가 많아, 연속된 제목 줄을 하나로 합쳐야 할 때가 있음
- 언제 합칠지 정하는 기준은 단순하지 않음
- 예시에는 다음 조건이 함께 나타남
- 두 줄짜리 제목
- 오른쪽 정렬된 제목
- 제목 뒤에 이어지는 semibold 저자명
- 몇 줄 아래에 있는 굵지 않은 제목
- 들여쓰기는 문단 구분 신호로도 쓰이므로, 오른쪽 정렬된 제목은 판단을 더 어렵게 만듦
- 같은 글꼴 크기와 굵기를 가진 연속 제목을 합치는 방식은 대체로 잘 동작하지만, 원치 않는 결과도 만들 수 있음
문단 식별에서 줄 간격이 만드는 함정
- PDFTextStripper는 문단 식별을 꽤 잘 수행함
- 줄 간격과 들여쓰기를 함께 보면서 문단을 나눌 위치를 판단함
- 개선 여지는 특히 줄 간격 로직에 있음
- PDFTextStripper의 큰 문제는 줄 분리에 고정 기준점을 쓴다는 점임
- 기준점보다 줄 간격이 크면 같은 문단이 아니라고 판단함
- 문서마다 줄 간격이 다르다는 점을 충분히 반영하지 못함
- 학술 초안과 프리프린트에서는 1.5~2배 줄 간격이 꽤 흔함
- 기준값을 너무 크게 잡으면 일부 제목이 본문 문단에 흡수되어 제목 식별을 방해할 수 있음
줄 간격 통계로 보정하기
- 글꼴 크기 처리와 비슷하게, 줄 사이 거리에도 통계적 기법을 적용할 수 있음
- 텍스트 페이지에서 줄 사이 거리 히스토그램을 만들면 큰 이상치가 나타나는 경향이 있음
- 평균값은 이상치에 흔들리기 쉽지만, 중앙값은 본문에 사용된 줄 간격과 정확히 맞는 경우가 있음
- 중앙값에 일정 계수를 붙이면 다양한 줄 간격에서도 버티는 문단 분리 휴리스틱을 만들 수 있음
현실적인 목표는 완벽보다 안정성
- PDF에서 텍스트를 추출하는 작업은 완벽해지기 어려움
- PDF 형식 자체가 그런 작업을 위해 설계되지 않았고, “충분히 좋은” 해법을 고를 때 여러 트레이드오프가 생김
- 검색 엔진은 특히 다음 정보에 관심이 큼
- 제목 같은 관련성 신호
- 초록 식별
- 나머지 텍스트의 어느 정도 일관된 구조
- 이런 목표라면 대부분의 관련 문서를 비교적 무리 없이 처리하는 해법에 접근할 수 있음
사용된 샘플 텍스트
Can Education be Standardized? Evidence from Kenya (2022) - Working PaperGuthrie Gray-Lobe, Anthony Keats, Michael Kremer, Isaac Mbiti, Owen W. OzierThe theory of ideas and Plato’s philosophy of mathematics (2019)Dembiński, B.The role of phronesis in Knowledge-Based Economy (2024)Anna Ceglarska, Cymbranowicz Katarzyna