OCR을 이용하여 PDF에서 특정 텍스트 추출하기
사전 준비
1. Tesseract-OCR 설치
Window 기준으로 OCR을 사용하려면 Tesseract-OCR을 설치해야 한다.
https://github.com/UB-Mannheim/tesseract/wiki
Home
Tesseract Open Source OCR Engine (main repository) - UB-Mannheim/tesseract
github.com
여길 들어가 “tesseract-ocr-w64-setup-5.5.0.20241111.exe (64 bit)” 를 다운하면 된다.
2. poppler 설치
이 라이브러리는 PDF에서 image로 변환할 때 필요한 라이브러리다.
https://github.com/oschwartz10612/poppler-windows/releases/
여기 링크에 들어가서
알집 파일을 내려받고 C드라이브로 옮기면 된다.
다음으로 시스템 환경 변수에 들어가
시스템 변수의 path에
해당 경로의 bin 폴더 경로를 추가한다.
C드라이브 기준이니까 bin 폴더 경로는 아래처럼 나와야 한다.
C:\\poppler-24.08.0\\Library\\bin
만약 bin 폴더가 다른 곳에 있다면 그 위치에 맞게 경로를 변경하면 된다.
cmd를 켜서 아래 명령어를 입력하여 버전이 제대로 나오는지 확인한다.
pdfinfo -v
C:\\Users\\user>pdfinfo -v
pdfinfo version 24.08.0
Copyright 2005-2024 The Poppler Developers - <http://poppler.freedesktop.org>
Copyright 1996-2011, 2022 Glyph & Cog, LLC
Tesseract-OCR 설치
이 부분에서 한글 텍스트를 추출해야 한다면
- Additional script data
- Additional langudage data
둘 다 korean을 찾아서 체크 해야 한다.
Additional script data
Hangul, Han 이라고 적힌 것들 모두 체크해준다.
Additional langudage data
Korean을 체크한다.
만약, 다양한 언어들을 인식하여 추출하고 싶으면 그냥 전부 체크해버리면 된다.
(용량이 많이 늘어날 수 있음)
또한, 설치가 모두 제대로 이뤄질 때 까지 반드시 기다려야 한다.
설치가 모두 끝나면 C:\Program Files\Tesseract-OCR 이 있을 것이다.
만약, 여기 없다면 Program Files(x86) 쪽을 찾아보면 된다.
PDF 내부
PDF 파일 내부는 저게 끝이다.
OCR 라이브러리가 한글을 제대로 인식하는지 테스트 해봐야 한다.
실행
Python으로 할 거니까 필요한 라이브러리들을 설치한다.
pip install pdf2image pytesseract pillow PyPDF2
from pdf2image import convert_from_path
import pytesseract
# tesseract ocr 명령어 호출
pytesseract.pytesseract.tesseract_cmd = r'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
# Poppler 설치 경로 (Windows 사용자만 필요)
poppler_path = r'C:\\poppler-24.08.0\\Library\\bin'
def extract_text_from_pdf(pdf_path):
try:
# 1. PDF를 이미지로 변환
images = convert_from_path(pdf_path, poppler_path=poppler_path)
# 2. 각 페이지에서 OCR을 사용해 텍스트 추출
for i, image in enumerate(images):
print(f"\\n--- Page {i + 1} ---")
text = pytesseract.image_to_string(image, lang='kor+eng') # 필요 시 'lang' 변경 가능
print(text)
except Exception as e:
print(f"Error during PDF processing: {e}")
# 실행 예제
pdf_path = r"C:\\test\\example.pdf" # 분석할 PDF 파일 경로
extract_text_from_pdf(pdf_path)
print("Extraction complete.")
--- Page 1 ---
안녕하세요
반갑습니다
| os
어서 오세요
Extraction complete.
조금 어색하게 나오는 감이 있지만 필요한 텍스트는 모두 출력된다.
원한다면 특정 영역을 잘라내 해당 영역을 인식하여 텍스트를 추출하는 것도 가능하다.
결론
잘 활용한다면 고정된 구조를 가진
여러 페이지 내 특정 텍스트를 규칙적으로 뽑아내
CSV에 저장하는 방법도 가능할 듯 하다.
추가로, 정확도가 높지 않다.
일부 글자를 인식 못하는 경우도 있다.
깔끔하면서 PDF나 이미지에서 깨짐 없는 폰트를 쓰는 게 나아 보인다.