PDF에서 텍스트를 추출하는 작업은 생각보다 단순하지 않습니다.
왜냐하면 PDF의 종류에 따라 처리 방식이 완전히 달라지기 때문입니다.
이미지 기반 PDF는 일반적으로 OCR(광학문자인식) 과정을 거쳐야 텍스트를 추출할 수 있습니다.
과정 : PDF → 이미지 변환 → 이미지에서 텍스트 인식(OCR)
OCR 라이브러리/서비스 예시:
Tesseract OCR – 가장 널리 쓰이는 오픈소스 OCR 엔진
Tesseract OCR 공식링크
EasyOCR – 한글 등 다양한 언어를 지원하는 딥러닝 기반 OCR
EasyOCR github
Google Cloud Vision API – 구글의 고성능 OCR API
Google Vision API 공식링크
PaddleOCR – 중국 Baidu에서 만든 고정확도 OCR 라이브러리
PaddleOCR github
텍스트 기반 PDF는 OCR이 필요 없기 때문에, 텍스트 추출 라이브러리만 잘 선택하면 됩니다.
저는 이번에 한글 텍스트로 구성된 PDF (판례)를 대상으로 다음 두 가지 오픈소스를 테스트해봤습니다:
원본 파일 :
pdfminer.sixfrom pdfminer.high_level import extract_text
import os
# PDF 파일 경로
pdf_path = "2022구합22331_부산지방법원.pdf"
try:
text = extract_text(pdf_path)
# PDF 파일명에서 확장자 제거하여 txt 파일명 생성
pdf_filename = os.path.basename(pdf_path)
txt_filename = os.path.splitext(pdf_filename)[0] + ".txt"
txt_path = os.path.join(os.path.dirname(__file__), txt_filename)
# 텍스트를 txt 파일로 저장
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(text)
print(f"텍스트 저장 성공")
print(f'파일명 : {txt_filename}')
print(f"저장 위치: {txt_path}")
except FileNotFoundError:
print(f"파일을 찾을 수 없습니다: {pdf_path}")
except Exception as e:
print(f"오류 발생: {str(e)}")

PyMuPDF (mupdf)import fitz # PyMuPDF
import os
# PDF 파일 경로
pdf_path = "2022구합22331_부산지방법원.pdf"
try:
# PDF 열기
doc = fitz.open(pdf_path)
for page in doc:
text = page.get_text()
print(text)
# PDF 파일명에서 확장자 제거하여 txt 파일명 생성
pdf_filename = os.path.basename(pdf_path)
txt_filename = os.path.splitext(pdf_filename)[0] + ".txt"
txt_path = os.path.join(os.path.dirname(__file__), txt_filename)
# 텍스트를 txt 파일로 저장
with open(txt_path, 'w', encoding='utf-8') as f:
f.write(text)
print(f"텍스트 저장성공")
print(f'파일명 : {txt_filename}')
print(f"저장 위치: {txt_path}")
# PDF 문서 닫기
doc.close()
except FileNotFoundError:
print(f"파일을 찾을 수 없습니다: {pdf_path}")
except Exception as e:
print(f"오류 발생: {str(e)}")
pdfminer.six, PyMuPDF 같은 툴로 바로 추출하면 되고,Tesseract, EasyOCR 같은 OCR 도구를 써야 합니다.본인이 추출해야 하는 pdf 내용 유형을 확인하고, 어떤 툴이 더 적합한지 테스트 후에 사용하는 것을 추천한다.
나는 PyMuPDF 툴을 사용했다.