Last active 1744597805

OCR 분기 시점 Raw
1force_ocr = False # OCR을 강제할지 여부 플래그
2pdf_page_count = 0
3
4# 3-1. PDF 텍스트 추출 시도 (PyMuPDF)
5try:
6 print("Attempting text extraction from PDF...")
7 with fitz.open(stream=contents, filetype="pdf") as doc:
8 pdf_page_count = len(doc)
9 if doc.needs_pass:
10 print("PDF is password protected. Text extraction skipped, proceeding to OCR.")
11 force_ocr = True # 비밀번호가 있으면 OCR 강제
12 else:
13 all_text = ""
14 for page_num in range(pdf_page_count):
15 page = doc.load_page(page_num)
16 page_text = page.get_text("text")
17 all_text += page_text
18 if page_num < pdf_page_count - 1:
19 all_text += "\n--- Page Break ---\n" # 페이지 구분 추가
20
21 # 추출된 텍스트 유효성 검사
22 if all_text and not all_text.isspace():
23 print(f"Text extracted ({len(all_text)} chars). Validating content...")
24 # 워터마크 제거 후 텍스트 확인
25 cleaned_text = watermark_regex.sub("", all_text).strip()
26 # 페이지 구분자도 제거하고 길이 계산
27 cleaned_text_for_length = cleaned_text.replace("\n--- Page Break ---\n", "")
28
29 # 1. 전체 텍스트 길이가 페이지 수 * 임계값보다 긴지 확인
30 # 2. 워터마크 제거 후에도 텍스트가 남아있는지 확인
31 min_total_length = MIN_MEANINGFUL_TEXT_LENGTH_PER_PAGE * pdf_page_count
32 if len(cleaned_text_for_length) >= min_total_length and cleaned_text:
33 print("Meaningful text found after validation.")
34 extracted_text_from_pdf = all_text.strip() # 원본 추출 텍스트 저장
35 processing_method = "pdf_text_extraction"
36 else:
37 print(f"Extracted text seems insufficient or mostly watermarks (Cleaned length: {len(cleaned_text_for_length)}, Threshold: {min_total_length}). Forcing OCR.")
38 force_ocr = True
39 else:
40 print("No text found via direct extraction. Proceeding to OCR.")
41 force_ocr = True # 텍스트가 아예 없으면 OCR 강제
42
43except Exception as e:
44 print(f"Error during PDF text extraction: {e}. Proceeding to OCR.")
45 force_ocr = True # 텍스트 추출 중 에러 발생 시 OCR 강제